牛客NOIP暑期七天营-普及组3-B填数

填数

https://ac.nowcoder.com/acm/contest/927/B

题目大意:填n个数,对于每个位置,遇到0随便填正整数,遇到1不比前面小,遇到2比前面大,填数之和能不超过m吗?

要想数字之和不超过m,那么填的数字尽量小!

从左往右,下标从小到大填,任意填必填最小值1,不比前面小就填前面的那个数,比前面大就只大1。

细节1:第一个数必填1,虽然数据保证b[1]是0,我们还是早做打算。

细节2:n个数之和可能爆int?1+2+...+100000就爆掉了?

细节3:中途判断出结果,也要把当组数据读完。

#include <stdio.h>
int t, s, n, m, i, j, k, p, a, b;
int main(){
    scanf("%d", &t);
    while(t--){
        scanf("%d%d%*d", &n, &m);
        p = s = 1;
        for(i=2; i<=n; i++){
            scanf("%d", &b);
            if(s > m) continue;
            if(b == 0) a = 1;
            if(b == 1) a = p;
            if(b == 2) a = p+1;
            s += a, p = a;
        }
        if(s > m) printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}
全部评论

相关推荐

05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务