Halloween treats 抽屉原理
传送门:https://vjudge.net/contest/374932#problem/B
题意
给你一个c和长为n的序列,要求在序列中选出一些元素使他们的和能整除c。
思路
题目保证c<=n,找到一些元素那么是不是可以找相邻的元素,因为c<=n的缘故我们可以用Find a multiple这题的思路,还是抽屉原理,然后就没有然后了。
AC代码
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; typedef long long ll; const int maxn=1e5+5; ll a[maxn],sum[maxn],num[maxn]; int vis[maxn]; int n,c; int main() { while(scanf("%d%d",&c,&n)){ if(c==0&&n==0) break; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; num[i]=sum[i]%c; } int l=1,r=0; for(int i=1;i<=n;i++){ if(num[i]==0){ l=1;r=i; break; } if(vis[num[i]]==0) vis[num[i]]=i; else{ l=vis[num[i]]+1;r=i; break; } } for(int i=l;i<=r;i++) printf("%d ",i); printf("\n"); } return 0; }
一点一点积累,一点一点蜕变!