第一种情况
把和取模存到数组
判断为0
直接输出
第二种情况
大佬写的代码简直。。。
抽屉原理
有N个数 N+1个和
而取模后只有0-N-1个数
所以至少有一组相等
相等的两数相减之后就是我们要求的第二种情况
注意输出一组解就可以了
这道题是Special judge 有多组解
抽屉原理好神奇。。。。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
int x[50005];
int ans[50005],tt[50005];
int main()
{
int t;
while(cin>>t)
{
for(int i=1; i<=t; i++)
{
scanf("%d",&x[i]);
ans[i]=(ans[i-1]+x[i])%t;
if(ans[i]==0)
{
printf("%d\n",i);
for(int j=1; j<=i; j++)
cout<<x[j]<<endl;
return 0;
}
if(tt[ans[i]])
{
printf("%d\n",i-tt[ans[i]]);
for(int j=tt[ans[i]]+1; j<=i; j++)
{
printf("%d\n",x[j]);
}
return 0;
}
tt[ans[i]]=i;
}
}
return 0;
}

本文介绍了一种利用抽屉原理解决特定数学问题的方法。通过对一系列整数进行模运算,并存储中间结果来查找重复项,从而找到满足条件的子序列。文章详细解释了算法流程,并提供了一个C++实现示例。
4万+

被折叠的 条评论
为什么被折叠?



