• Gym100187I


    Gym100187I


    做法:倒着构造,根据下一个数确定正负,本身这个位置确定升降,正就从1开始,负就从-1开始。最终序列从±1e9开始,特殊处理一下,中间判是否越界即可。

    水吧。。。然后就爆炸了,毕竟 IMPOSSIBLE 和 NO 的区别我 zz 的肉眼。。。3个小时都看不到。。。幸好是场训练赛,开了个没人写的题,结果凉透啊。。。需要输出单词的题,一定要注意单词拼的对不对!!!

    //***mdzz IMPOSSIBLE 写成 NO, WA到终场!!!!!***
    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    #define PII pair<int,int>
    typedef long long ll;
    const int N = 2000+ 55;
    const int inf = 0x3f3f3f3f;
    using namespace std;
    int n,ctt,cvt;
    ll tmp[N],v[N], a[N], cc=1;
    int main() {
        srand(time(0));
        scanf("%d",&n);
        rep(i,1,n) scanf("%I64d",&a[i]);
        cc = 1;
        per(i,n,2) {
            ctt = 0;
            ll f = 0;
            cc = 1;
            for(int j=0;j<cvt;++j) cc += abs(v[j]);
            if(a[i-1]==1&&a[i]==0) {
                f=cc;
                tmp[ctt++] = (cc);
                for(int j=0;j<cvt;++j) {
                    f=f+v[j];
                    if(f>1e9||f<-1e9) return puts("IMPOSSIBLE"),0;
                    tmp[ctt++]=(f);
                }
            }
            else if(a[i-1]==0&&a[i]==1) {
                f=-cc;
                tmp[ctt++]=(-cc);
                for(int j=0;j<cvt;++j) {
                    f=f+v[j];
                    if(f>1e9||f<-1e9) return puts("IMPOSSIBLE"),0;
                    tmp[ctt++]=(f);
                }
            }
            else if(a[i-1]==0&&a[i]==0) {
                f=-1;
                tmp[ctt++]=(-1);
                for(int j=0;j<cvt;++j) {
                    f=f+v[j];
                    if(f>1e9||f<-1e9) return puts("IMPOSSIBLE"),0;
                    tmp[ctt++]=(f);
                }
            }
            else if(a[i-1]==1&&a[i]==1) {
                f=1;
                tmp[ctt++]=(1);
                for(int j=0;j<cvt;++j) {
                    f=f+v[j];
                    if(f>1e9||f<-1e9) return puts("IMPOSSIBLE"),0;
                    tmp[ctt++]=(f);
                }
            }
            cvt = 0;
            for(int i=0;i<ctt;++i) v[cvt++]=tmp[i];
            int ff = 0;
            for(int j=0;j<cvt;++j) if(v[j]==0) ff=1;
    
            if(a[i-1]==1&&ff) {
                for(int j=0;j<cvt;++j) ++v[j];
            }
            else if(ff&&a[i-1]==0) {
                for(int j=0;j<cvt;++j) --v[j];
            }
            for(int i=0;i<cvt;++i) if(v[i]>1e9||v[i]<-1e9) return puts("IMPOSSIBLE"),0;
        }
        ll f=1;
        if(a[1]==1) f=-1e9;
        else f=1e9;
        ctt = 0;
        tmp[ctt++]=(f);
        for(int i=0;i<cvt;++i) {
            f=f+v[i];
            if(abs(f)>1e9) return puts("IMPOSSIBLE"),0;
            tmp[ctt++]=(f);
        }
        for(int i=0;i<ctt;++i) if(tmp[i]>1e9||tmp[i]<-1e9) return puts("IMPOSSIBLE"),0;
        for(int i=0;i<ctt;++i) printf("%I64d ",tmp[i]);puts("");
        return 0;
    }
    
    
  • 相关阅读:
    PKU JudgeOnline 题目分类
    调试时拼凑带端口的完整网址/域名
    智能电脑监控器,完美解决想监控别人在自己电脑上的一切操作。
    如何清理LDF文件
    使用母版页后FindConttol需要注意
    【外刊IT评论】代码覆盖率:80%,不能少
    推荐2本普通人参悟的书
    处理在母版页加AJAX环境下处理滚动条回发保持不动的问题
    虚拟目录中的web.config不被上级目录的web.config影响的处理
    C++中^符号的意思
  • 原文地址:https://www.cnblogs.com/RRRR-wys/p/9460261.html
Copyright © 2020-2023  润新知