poj2356
来源:互联网 发布:肯德基收银软件 编辑:程序博客网 时间:2024/05/04 17:18
链接:点击打开链接
题意:给定n个数,求其中的一个集合中每个元素的值加和正好是n的倍数的集合中的元素是什么(如果有多个输出任何一个)
代码:
#include <iostream>#include <algorithm>using namespace std;long long a[10005];struct node{ long long num,sum;}b[10005];int cmp(struct node a,struct node b){ if(a.sum==b.sum) return a.num<b.num; return a.sum<b.sum;}int main(){ long long n,i,j,sumsum; while(cin>>n){ sumsum=0; for(i=0;i<n;i++){ cin>>a[i]; sumsum+=a[i]; //容斥原理,如果有n个数对n取余,最少有一个数模n=0, b[i].sum=sumsum%n; //或者两个数模n相等。因此前1,2,3...n个数的和正好是n个数 b[i].num=i; //不是题目没有说是连续和,而是连续和肯定是满足条件的一种 } //情况,所以将和的余数存起来,当其中有两个和的余数相等时 sort(b,b+n,cmp); //中间部分一定是n的倍数// for(i=0;i<n;i++)// cout<<b[i].num<<" "<<b[i].sum<<endl; if(b[0].sum==0){ //模是0直接输出 cout<<b[0].num+1<<endl; for(i=0;i<=b[0].num;i++) cout<<a[i]<<endl; continue; } for(i=0;i<n;i++){ if(b[i].sum==b[i+1].sum){//排序之后余数想等的肯定相邻 cout<<b[i+1].num-b[i].num<<endl; for(j=b[i].num+1;j<=b[i+1].num;j++) cout<<a[j]<<endl; break; } } } return 0;}
0 0
- poj2356
- poj2356
- poj2356
- poj2356
- poj2356 二分
- poj2356(鸽巢原理)
- poj2356 抽屉原理
- poj2356(二分图匹配)
- poj2356——Find a multiple
- poj3370 poj2356 鸽巢定理
- poj2356 Find a multiple(鸽巢原理)
- poj2356 Find a multiple(鸽巢原理)
- POJ2356 Find a multiple【鸽巢原理】
- poj2356 Find a multiple 抽屉原理
- 【POJ2356】Find a multiple(鸽巢原理)
- 【HDU1205/POJ2356/POJ3370】鸽巢原理专题
- 鸽巢原理 Poj3370&Hdu1808 + Poj2356 + Hdu 1205
- POJ2356 Find a multiple 抽屉原理(鸽巢原理)
- Leetcode #86 Partition List
- Xcode 6.1 做ipa企业级分发(In-House模式)详细步骤
- Android复习笔记(9) - 调用远程服务
- 64bit解决tomcat内存不足问题
- 编程细节 - 2
- poj2356
- 用rand()和srand()产生伪随机数的方法总结
- 曾帮Facebook把用户做到7亿的那个人,告诉你如何实现用户增长
- 您的计算机上的office2003安装已损坏,安装程序无法继续。请删除或修复office2003产品并重新运行安装程序
- Java实现Zip压缩与解压(解决中文乱码问题)
- 黑马程序员--iOS--Objective-C基础 (内存管理二)
- 你对别人讲诚信,同时,你也要做一些防范措施,别人不讲诚信的时候你怎么办
- 如何在Mac OS X上安装 Ruby运行环境
- 【Unity基础知识之三】Unity Assets目录下的特殊文件夹名称