[poj2356]--Find a multiple ——鸽巢原理
2024-09-07 18:13:43
题意:
给定n个数,从中选取m个数,使得\(\sum | n\)。本题使用Special Judge.
题解:
既然使用special judge,我们可以直接构造答案。
首先构造在mod N剩余系下的前缀和。
\[sum_i = (a_i + sum_{i-1}) mod n
\]
\]
剩余系N的完系中显然共有N-1个元素,我们有N个前缀和。
根据鸽巢原理,一定有\(sum_j = sum_i\)
所以这样构造是可行的。
TRICK
具体实现的时候用了一个技巧:
从前往后扫描sum数组,记录一个pos数组,这样就可以把时间复杂度降到了\(\Theta (n)\)
代码
#include <cstdio>
#include <cstring>
const int maxn = 10005;
int N, a[maxn], sum[maxn], pos[maxn];
int main() {
scanf("%d", &N);
memset(pos, -1, sizeof(pos));
for(int i = 1; i <= N; i++) {
scanf("%d", &a[i]);
sum[i] = (a[i] + sum[i-1]) % N;
}
pos[0] = 0;
for(int i = 1; i <= N; i++) {
if(pos[sum[i]] == -1) {
pos[sum[i]] = i;
}
else {
printf("%d\n", i-pos[sum[i]]);
for(int j = pos[sum[i]]+1; j <= i; j++) {
printf("%d\n", a[j]);
}
return 0;
}
}
return 0;
}
最新文章
- html+css上传文件控件美化
- Gyp语法规则参考 &; 工具的使用
- DP专题训练之HDU 1231 	最大连续子序列
- JQuery判断radio是否选中,获取选中值
- WDCP安装并配置php5.4和mongodb
- iOS--隐藏和显示TabBar的方法
- MVC 3个重要的描述对象之ControllerDescriptor
- 并行计算之OpenMP入门简介
- UITableView的常用属性和cell的内存优化
- Caffe训练好的网络对图像分类
- htmlt中的块状元素与内联元素
- QT5-控件-QProgressBar-进度条-用来做下载进度,文件读取进度还不错
- tribonacci
- java输出空心菱形
- 长连接 Socket.IO
- java 5年规划---
- 多线程编程学习笔记——异步调用WCF服务
- 第三十六篇-FloatingActionButton的使用
- python-获取当前工作路径
- Gis数据处理