天天看点

51Nod1103 N的倍数 前缀和+抽屉定理

#include<iostream>
#include<cstdio>

using namespace std;
typedef long long ll;
const int maxn=50000+10;
int sum;
int a[maxn];
int vis[maxn];
int main() {
  int n;
  scanf("%d",&n);
  for(int i=0; i<n; i++) {
    scanf("%d",&a[i]);
  }
  for(int i=0; i<n; i++) {
    sum=(sum+a[i])%n;
    if(!sum) {
      printf("%d\n",i+1);
      for(int j=0; j<=i; j++) {
        printf("%d\n",a[j]);
      }
      break;
    } else if(vis[sum]) {
      printf("%d\n",i-vis[sum]);
      for(int j=vis[sum]+1; j<=i; j++) {
        printf("%d\n",a[j]);
      }
      break;
    }
    vis[sum]=i;
  }

}