poj 3370(鸽巢原理。。。水)

来源:互联网 发布:河南学历网络教育学校 编辑:程序博客网 时间:2024/05/16 11:54

过了刚才的那题2356。。这题稍微改一下就可以了。。。。


#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{    bool k;    int ki;}ka[100010];int main(){    int n,m,i,kx,ky,flag;    long long sum[100010];    while(scanf("%d%d",&n,&m) && (n||m)){        for(i=0;i<m;i++)            scanf("%lld",&sum[i]);        memset(ka,0,sizeof(ka));        for(i=1,flag=0;i<=m;i++){            if(i!=m) sum[i]+=sum[i-1];            sum[i-1]%=n;            if(sum[i-1]==0){                flag=1,kx=i-1,ky=-1; break;            }else if(ka[sum[i-1]].k){                flag=1,ky=ka[sum[i-1]].ki,kx=i-1;                break;            }else{                ka[sum[i-1]].k=1,ka[sum[i-1]].ki=i-1;            }        }        if(flag){            for(i=ky+1;i<kx;i++)                printf("%d ",i+1);            printf("%d\n",kx+1);        }    }    return 0;}