这就是个超级水题……!!!!写一写来纪念一下自己的错误……

如果某个学生的的成绩是其他俩个或三个学生成绩的和则给予奖励

直接暴力,所以一开始直接用数组标记两个人或三个人的和,但是忽略了这种情况 20(学生A) =  0 +20(学生A)……

错误代码……!!!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>

const int MAXN = 10000 + 10;
const double ESP = 10e-8;
const double Pi = atan(1.0) * 4;
const int INF = 0xffffff;
const int MOD = 10000007;

using namespace std;
struct People{
  int s;
  char n[101];
  bool operator < (const People a)const{
      if(strcmp(n,a.n) < 0)
        return 1;
      return 0;
  }
};
People a[MAXN];
bool vis[400];
int main(){
//    freopen("input.txt","r",stdin);
    int t;
    scanf("%d",&t);
    int n;
    while(t--){
        scanf("%d",&n);
        memset(vis,0,sizeof(vis));
        for(int i = 0;i < n;i++){
            getchar();
            scanf("%s %d",a[i].n,&a[i].s);
        }
        sort(a,a+n);
        for(int i = 0;i < n;i++){
            for(int j = i+1;j < n;j++){
                int tt = a[i].s + a[j].s;
                vis[tt] = 1;
                for(int k = j+1;k < n;k++){
                    tt = a[i].s + a[j].s + a[k].s;
                    vis[tt] = 1;
                }
            }
        }
        int cnt = 0;
        for(int i = 0;i < n;i++){
            if(vis[ a[i].s ]){
                cnt++;
            }
        }
        printf("%d\n",cnt);
        for(int i = 0;i < n;i++){
            if(vis[ a[i].s ]){
                printf("%s\n",a[i].n);
            }
        }

    }
    return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-11
  • 2022-01-30
  • 2021-05-26
  • 2022-12-23
  • 2022-01-19
猜你喜欢
  • 2022-02-06
  • 2021-07-10
  • 2021-07-26
  • 2021-09-13
  • 2021-10-14
  • 2021-08-11
  • 2021-09-19
相关资源
相似解决方案