2005. Lovely Number 很神奇的一道题 2010中山大学新手赛-网络预选赛
2014-01-22 23:56
281 查看
2005. Lovely Number
Constraints
Time Limit: 1 secs, Memory Limit: 64 MBDescription
Every time after got a solution from kevin, ivan repeats again and again,"Are there any better ones?". It seems more worse this time. Given a sequence of numbers, which ivan is sure that all of them appear even times except onlyone "lovely number" appears odd times, kevin must find out the lovely number as soon as possible. So, let's rock!
Input
There are multiple test cases.Each test case contains two lines. The first line is an integer N, 1 <= N <= 10001, and N % 2 = 1. The second line contains N integers, separated by spaces.
Input is terminated by EOF.
Output
For each test case, output a line of an integer, which should be the lovely number.Sample Input
31 2 157 7 7 7 372 2 4 4 4 2 2
Sample Output
234
Problem Source
2010中山大学新手赛-网络预选赛 ivankevin@argo好吧 这道题的解法实在太多了
解法一:
我的代码 struct(最长的……哭):Run Time:0.12sec
Run Memory:392 KB
#include <iostream>
using namespace std;
struct num {
int number;
int time;
}num[10005];
int main () {
int n;
while (cin>>n && n) {
//for(int i = 0; i < 10002; i++) { //这里是初始化 可以有可以没有
// num[i].number = 0;
// num[i].time = 0;
//}
int temp;
cin>>temp;
num[1].number = temp;
num[1].time = 1;
int j = 1; //记录已经录入的数字数目
for (int i = 2; i <= n; i++) {
bool flag = false; //这货的位置坑了我很久!!!
cin>>temp;
for (int k = 1; k <= j; k++) {
if(num[k].number == temp) {
num[k].time += 1;
flag = true;
break;
}
}
if (flag == false) {
j++;
num[j].number = temp;
num[j].time = 1;
}
}
for (int k = 1; k <= j; k++) {
if (num[k].time % 2 == 1)
cout<<num[k].number<<endl;
}
}
//system("pause");
return 0;
}
解法2:
位运算
异或
链接:http://163yescpk.blog.163.com/blog/static/1418902882010111310433304/
代码:Run Time: 0.02secs Run Memory: 312KB
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int ans = 0;
for (int i = 0 ; i < n ; ++i)
{
int x;
cin >> x;
ans ^= x;
}
cout << ans << "\n";
}
return 0;
}
解法3:
set
链接:http://blog.csdn.net/luojiayu14/article/details/7098665
代码:Run Time: 0.04secs Run Memory: 312KB
#include <iostream>
#include <set>
using namespace std;
int main()
{
int t;
while(cin>>t)
{
int temp;
set<int>myset;
while(t--)
{
cin>>temp;
if(myset.count(temp))
myset.erase(temp);
else
myset.insert(temp);
}
cout<<*myset.begin()<<endl;
}
return 0;
}
解法4:
map
链接:http://blog.csdn.net/ederick/article/details/7246270
代码:Run Time: 0.02secs Run Memory: 436KB
#include <cstdio>
#include <map>
using namespace std;
int main()
{
int N, i;
int temp;
map<int, int>::iterator it;
while ( scanf( "%d", &N ) != EOF ) {
map<int, int> data;
for ( i = 0; i < N; i++ ) {
scanf( "%d", &temp );
data.find( temp ) != data.end() ? data[ temp ]++: data[ temp ] = 1;
}
for ( it = data.begin(); it != data.end(); it++ ) {
if ( it->second % 2 == 1 ) {
printf( "%d\n", it->first );
break;
}
}
}
return 0;
}
解法5:
数组only
但是空间很大(题目给的也很大所以不用担心)以空间换时间
链接:http://www.cnblogs.com/lvye/archive/2011/03/25/1995810.html
代码:Run Time: 0.04secs Run Memory: 4220KB
#include<iostream>
#include<stdlib.h>
#include<cstring>
using namespace std;
int num[1000001];
int main()
{
int n,i,m;
while(cin>>n)
{
memset(num,0,sizeof(num));
for(i=0;i<n;i++)
{
cin>>m;
num[m]++;
}
for(i=0;i<1000001;i++)
if(num[i]%2==1)
{
cout<<i<<endl;
break;
}
}
return 0;
}
相关文章推荐
- 2010 哈尔滨网络预选赛 1003解题报告
- 第十八届中山大学程序设计竞赛网络预选赛B题
- 2010 ACM/ICPC Online-Contest-SCU[四川赛区网络预选赛]
- BZOJ1834 [ZJOI2010] network 网络扩容
- SharePoint 2010 + VS 2010 + InfoPath做工作流的各种坑[新手向]
- Exchange 2010 DAG完成后群集私有网络故障
- 新手入门:了解网络应用与网络协议1
- 网络_2_2010_03_13
- [2016ICPC 青岛网络预选赛] HDU 5879 数列求和
- 2016Qingdao网络预选赛1007 / HDU5884 Sort(二分)
- 洛谷P2604 [ZJOI2010]网络扩容
- [ZJOI2010][bzoj1834] 网络扩容 [费用流]
- 【bzoj1834】[ZJOI2010]network 网络扩容
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 A - 成功人士
- bzoj 1834 [ZJOI2010] network 网络扩容(费用流)
- bzoj1834: [ZJOI2010]network 网络扩容(最小费用最大流)
- 神奇的网络实物感觉器
- Android新手系列教程(申明:来源于网络)
- 新手入门:了解网络应用与网络协议
- 2017武汉大学校赛网络预选赛e题