nyoj1062

来源:互联网 发布:内网访问阿里云 编辑:程序博客网 时间:2024/06/06 06:32

题意:给你一个数列,你可以使数列的某一个数加上若干个k,使最后这个长度为n的数列的数为1-n且每个数只出现一次。
思路:模拟。
AC代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=105;int a[maxn];int main(){   // freopen("51.txt","r",stdin);    int n,k;    while(scanf("%d%d",&n,&k)!=EOF){        int x;        memset(a,0,sizeof(a));        for(int i=1; i<=n; i++){            scanf("%d",&x); a[x]++;        }        int f=0;        for(int i=1; i<=n; i++){            while(a[i]>1){                int c=0;                int kk=i+k;                while(kk<=n){                    if(!a[kk]){                        c=1;                        a[kk]++;                        break;                    }                    kk=kk+k;                }                if(c==0){                    break;                }                a[i]--;            }        }        for(int i=1; i<=n; i++){            if(!a[i] || a[i]>1) f=1;        }        if(f) printf("IMPOSSIBLE\n");        else printf("POSSIBLE\n");    }    return 0;}
0 0
原创粉丝点击