ZOJ1825
#include<iostream>
#include<string>
#include<set>
#include<cstdio>
using namespace std;
set<string>s;
set<string>::iterator p;
int main()
{
// freopen("test.in","r",stdin);
string str,str1,str2;
s.clear();
int len,i;
while(cin>>str)
{
s.insert(str);
}
for(p=s.begin();p!=s.end();p++)
{
str=*p;
len=str.length();
for(i=1;i<len;i++)
{
str1=str.substr(0,i);
str2=str.substr(i,len-i);
if(s.find(str1)!=s.end()&&s.find(str2)!=s.end())
{
cout<<str<<endl;
break;
}
}
}
return 0;
}
还可以用字典序写
ZOJ1109
纯map水题,zoj对cin的优化还不够,原来时间将近1s,用c输入输出后160ms
#include<map>
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s1,s2;
string s;
char str[100];
map<string,string>dic;
while(gets(str))
{
s.assign(str);
if(s.empty())break;
int pos=s.find(' ');
s1=s.substr(0,pos);
s2=s.substr(pos+1);
dic[s2]=s1;
}
while(scanf("%s",str)!=EOF)
{
s1.assign(str);
s2=dic[s1];
if(s2.empty())printf("eh\n");
else printf("%s\n",s2.c_str());
}
return 0;
}
ZOJ1073简单题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define N 100
using namespace std;
int main()
{
string s1,s;
while(cin>>s1)
{
int i,j;
int flag=1;
for(i=1;i<=s1.size();i++)
{
s.clear();
int jin=0;
int t=1;
for(j=s1.size()-1;j>=0;j--)
{
t=(s1[j]-'0')*i+jin;
jin=t/10;
t%=10;
s=s+char(t+'0');
}
if(jin)s=s+char(jin+'0');
int len=s.size();
for(j=0;j<len/2;j++){
t=s[j];
s[j]=s[len-j-1];
s[len-j-1]=t;
}
if(s.size()>s1.size()){
flag=0;
break;
}
int f2=0;
for(int pos=0;pos<len;pos++){
if(s==s1.substr(pos)+s1.substr(0,pos))
{
f2=1;
break;
}
}
if(f2==0)flag=0;
}
if(flag)cout<<s1<<" is cyclic\n";
else cout<<s1<<" is not cyclic\n";
}
return 0;
}
hunnu11466
找数字2 |
Time Limit: 25000ms, Special Time Limit:50000ms, Memory Limit:32768KB |
Total submit users: 112, Accepted users: 94 |
Problem 11466 : No special judgement |
Problem description |
给定2n+1个数字,只有一个数字出现了奇数次,其余的数字都出现了偶数次,现在你需要找出出现奇数次的数字。 |
Input |
包含多组数据,每组数据第一行为一个数n(0<=n<=5000000)。接下来一行包括2n+1个数字(小于1000000000)。 |
Output |
对于每组数据,输出出现奇数次的数字. |
Sample Input |
1 1 1 1 2 1 2 1 3 3 3 1 1 2 2 3 3 4 |
Sample Output |
1 2 4 |
Problem Source |
HUNNU Contest |
//1096KB 12312ms
#include<vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
n=n*2+1;
int ans,x;
scanf("%d",&ans);
n--;
while(n--){
scanf("%d",&x);
ans^=x;
}
printf("%d\n",ans);
}
return 0;
}
解法2:map
//1428KB 14921ms
#include<map>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n,x;
map<int,bool>dic;
while(~scanf("%d",&n))
{
dic.clear();
n=n*2+1;
while(n--){
scanf("%d",&x);
if(dic[x])dic.erase(x);
else dic[x]=1;
}
map<int,bool>::iterator it;
for(it=dic.begin();it!=dic.end();it++)printf("%d\n",it->first);
}
return 0;
}