[NOIp复习计划]:模拟

来源:互联网 发布:淘宝评价怎么添加视频 编辑:程序博客网 时间:2024/05/16 08:49

[luogu 1087] FBI树
乱搞

#include<cstdio>int n;char str[1<<11];int data[1<<11];void solve(int l,int r){    if(l==r){        if(data[r] - data[l-1])printf("I");        else printf("B");        return;    }    int mid = l+r>>1;    solve(l,mid);    solve(mid+1,r);    if(data[r] - data[l-1] == 0){        putchar('B');    }else if(data[r] - data[l-1] == r-l+1){        putchar('I');    }else{        putchar('F');    }}int main(){    scanf("%d",&n);n = 1<<n;    scanf("%s",str);    for(int i=1;i<=n;i++){        data[i] = data[i-1] + str[i-1]-'0';    }    solve(1,n);    return 0;} 

[bzoj 1635][Usaco2007 Jan]Tallest Cow 最高的牛
差分数组+map

#include<cstdio>#include<map>using namespace std;map<int,map<int,int> > hs;int n,I,h,r,a,b;const int maxn = 10005;int pre_sum[maxn];int main(){    scanf("%d%d%d%d",&n,&I,&h,&r);    for(int i=1;i<=r;i++){        scanf("%d%d",&a,&b);if(a>b){a=a+b;b=a-b;a=a-b;}        if(hs[a][b]==0){            pre_sum[a+1]--;            pre_sum[b]++;            hs[a][b]=1;        }    }    int buf=0;    for(int i=1;i<=n;i++){        buf += pre_sum[i];        printf("%d\n",h+buf);    }    return 0;} 

[bzoj 1028][JSOI2007]麻将
乱搞

#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,m;int d[405],f[405],ans[405];bool check(){    bool is;    for(int i=1;i<=n;i++){        if(d[i]>=2){            is=1;            d[i]-=2;            for(int j=1;j<=n+2;j++) f[j]=d[j];            for(int j=1;j<=n+2;j++){                if(f[j]<0){is=0;break;}                f[j]%=3;f[j+1]-=f[j];f[j+2]-=f[j];            }            d[i]+=2;            if(is) return 1;        }    }    return false;}int main(){    scanf("%d%d",&n,&m);    int x;    for(int i=1;i<=m*3+1;i++){        scanf("%d",&x);        d[x]++;    }    bool is=0;    for(int i=1;i<=n;i++){        d[i]++;        if(check()){            is=1;            ans[++ans[0]]=i;        }        d[i]--;    }    for(int i=1;i<=ans[0];i++){        printf("%d",ans[i]);        if(i!=ans[0])printf(" ");    }    if(!is)printf("NO");    return 0;}

[bzoj 1088][SCOI2005]扫雷Mine
答案很小,于是乱搞。

#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int N,a[10010],f[10010],ans=0;bool check(){    for(int i=2;i<=N;i++)        f[i+1]=a[i]-f[i-1]-f[i];    if(f[N+1]) return 0;    return 1;}int main(){    scanf("%d",&N);    for(int i=1;i<=N;i++) scanf("%d",&a[i]);    for(int i=0;i<=a[1];i++)    {        memset(f,0,sizeof(f));        f[1]=i;        f[2]=a[1]-i;        if(check()) ans++;    }    printf("%d\n",ans);}

[bzoj 1621][Usaco2008 Open]Roads Around The Farm分岔路口
不用dp,所以乱搞

#include<cstdio>typedef long long ll;ll n,k;ll solve(ll x){    if(x <= k || (x-k)&1 )return 1;    return solve((x-k)>>1) + solve((x-k>>1)+k);}int main(){    scanf("%lld%lld",&n,&k);    printf("%lld",solve(n));    return 0;} 
原创粉丝点击