/*
51nod 1103
抽屉原理就是说
9个抽屉要放十个东西,必定有一个抽屉要放至少两个
而这题的思路就是
把每个数与前面所有数相加,然后对n取余
就是我们所说的前缀和取余
如果某一个等于0那么就输出包括这个数在内的之前的数
或者找到两个相同的余数输出左端点到右端点之间,包括右端点在内的数
因为题目特殊性
一组数据有多组结果
所以只要输出数据正确,即使与给定数据不同
也能AC
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define MAX 1000005
using namespace std;
int main()
{
int n;
cin>>n;
int a[50005],b[50005];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=(b[i-1]+a[i])%n;
}
int flag=0,ans,ans1,ans2;
for(int i=1;i<=n;i++)
{
if(b[i]==0)
{
flag=1;
ans=i;
break;
}
for(int j=i+1;j<=n;j++)
{
if(b[j]==b[i])
{
flag=2;
ans1=i;
ans2=j;
break;
}
}
if(flag==2)
break;
}
if(flag==0)
{
cout<<"No Solution"<<endl;
}
if(flag==1)
{
cout<<ans<<endl;
for(int i=1;i<=ans;i++)
cout<<a[i]<<endl;
}
if(flag==2)
{
cout<<ans2-ans1<<endl;
for(int i=ans1+1;i<=ans2;i++)
cout<<a[i]<<endl;
}
return 0;
}
51nod 1103
抽屉原理就是说
9个抽屉要放十个东西,必定有一个抽屉要放至少两个
而这题的思路就是
把每个数与前面所有数相加,然后对n取余
就是我们所说的前缀和取余
如果某一个等于0那么就输出包括这个数在内的之前的数
或者找到两个相同的余数输出左端点到右端点之间,包括右端点在内的数
因为题目特殊性
一组数据有多组结果
所以只要输出数据正确,即使与给定数据不同
也能AC
*/
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<stdio.h>
#include<math.h>
#define ll long long
#define MAX 1000005
using namespace std;
int main()
{
int n;
cin>>n;
int a[50005],b[50005];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=(b[i-1]+a[i])%n;
}
int flag=0,ans,ans1,ans2;
for(int i=1;i<=n;i++)
{
if(b[i]==0)
{
flag=1;
ans=i;
break;
}
for(int j=i+1;j<=n;j++)
{
if(b[j]==b[i])
{
flag=2;
ans1=i;
ans2=j;
break;
}
}
if(flag==2)
break;
}
if(flag==0)
{
cout<<"No Solution"<<endl;
}
if(flag==1)
{
cout<<ans<<endl;
for(int i=1;i<=ans;i++)
cout<<a[i]<<endl;
}
if(flag==2)
{
cout<<ans2-ans1<<endl;
for(int i=ans1+1;i<=ans2;i++)
cout<<a[i]<<endl;
}
return 0;
}