F题题解,本场比赛最离谱的一件事

讲个笑话,这份代码过了。(你被骗了,这里根本没有题解)

这份代码过了倒是没啥好说的,关键是这份代码和我想写的代码是不一样的。

按照我的思路,这份代码其实是写错了的,手捏了一个hack

然后我把错误的部分改掉了,hack就过了,但是提交就WA了

也就是说,我对着错误的思路写代码,但是写错了,然后反而通过了。

这一份代码和我第一发提交的代码仅仅只差一个+1,第一发代码的提交时间为35分钟,正好和一血同时。而我在写代码的时候,中途花了15分钟左右去处理其他事情,也就是说,这把差点以一个完全错误的代码拿到了F题一血。

#include<bits/stdc++.h>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> a(n+1);
    for(int i=2;i<=n;i++){
        cin>>a[i];
    }
    int m = n + 1 >> 1;
    for(int i=0;i<(1<<m);i++){
        string s(n+1,'0');
        for(int j=0;j<m;j++){
            if((i>>j)&1) s[j+1] = '1';
        }
        auto b = a;
        for(int j=n;j>=2;j--){
            for(int k=n;k>j;k--){
                if(s[k-j+1]=='0' && s[k]=='1') b[j]--;
            }
            if(b[j]==1){
                if(s[1]=='0') s[j] = '1';
                else goto no;
            }
            else if(b[j]<0 || b[j]>1) goto no;
            else{
                if(s[1]=='0') s[j] = '0';
                else s[j] = '1';
            }
        }
        cout<<s.substr(1,n)<<endl;
        return 0;
        no:;
    }
    cout<<-1<<endl;
}
/*
这个样例直接寄了:
4
2 2 1
*/

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务