ACdream - 1073 雷霆战机

来源:互联网 发布:c语言贪吃蛇代码 编辑:程序博客网 时间:2024/04/29 19:56

中文题,根据题意做就好,判断条件比较多,改 bug 要很久而且容易糊。学长说中文题一定要做出来,结果是最后 AC 的,中文题真的没比英文题好做,一把心酸泪。
提供一个样例:

INPUT 5 9999 1 23 8 9998 1 1 23 8 OUTPUT YES 0
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;int level[4];int EXP[10000];int cmp(const void*a, const void *b) {    return *(int*)a - *(int*)b;}int main() {    int N;    while(scanf("%d", &N) != EOF) {        memset(EXP, 0, sizeof(EXP));        for (int i = 0; i < 4; i++)            scanf("%d", &level[i]);        for (int i = 0; i < N; i++)            scanf("%d", &EXP[i]);        if (N < 4) { printf("NO\n"); continue;}        qsort(EXP, N, sizeof(int), cmp);        int cnt = 0;        for (int i = 0; i < 4; i++) {            int tag, exp = 0;            for (tag = 0; tag < N; tag++)                if (EXP[tag] != 0) break;            if (tag == N) break;            for (int j = 0; j < N; j++) {                if (exp + EXP[j] >= level[i]) {                    exp += EXP[j];                    EXP[j] = 0;                }                else if (j == N - 1) {                    while (EXP[j] == 0) j--;                    exp += EXP[j];                    EXP[j] = 0;                    j = -1;                }                if (exp >= level[i]) { cnt++; break;}                for (tag = 0; tag < N; tag++)                    if (EXP[tag] != 0) break;                if (tag == N) break;            }        }        if (cnt == 4) {            int sum = 0;            for (int i = 0; i < N; i++) {                sum += EXP[i];            }            printf("YES %d\n", sum);        }        else printf("NO\n");    }return 0;}
0 0
原创粉丝点击