为了防止TLE使用scanf/printf代替cin/cout
SLT相关
//HDU 2094(HDU使用g++提交可以使用万能头)
//利用两个集合,A中包含全部的人,B中只有loser,当A比B多一个人时可以说明有人胜出
//#include<iostream>
//#include<string.h>
//#include<set>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n&&n){
set<string>a,b;
a.clear();
b.clear();
string x,y;
for(int i=0;i<n;i++){
cin>> x>> y;
a.insert(x);
a.insert(y);
b.insert(y);
}
if(a.size()-b.size()==1){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
}
//hdu 2648 题好像没说有多次n
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
map<string,int>mp;
while(cin>>n){
mp.clear();
for(int i=0;i<n;i++){
string s;
cin>>s;
mp[s]=0;
}
cin>>m;
while(m--){
for(int i=0;i<n;i++){
string s;
int ig;
cin>>ig>>s;
mp[s]+=ig;
}
int res=1;
map<string,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++){
if(it->second>mp["memory"]){//可以通过此方式取到后面的值
res++;
}
}
cout<<res<<endl;
}
}
}
//hdu 1027
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+9;
int vi[maxn];
int main(){
int n,m;
while(cin>>n>>m){
memset(vi,0,sizeof(vi));
for(int i=0;i<n;i++){
vi[i]=i+1;
}
m--;
while(m--){
next_permutation(vi,vi+n);//next_permutation的用法:当还有下一个排列时,返回true;否则false
}
for(int i=0;i<n;i++){
cout<<vi[i];
if(i!=n-1){
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
//hdu 1312 bfs解法
//不要使用带0的
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+9;
int gh[maxn][maxn];
bool ghb[maxn][maxn];
typedef struct{
int x;
int y;
}point;
point dir[4]={{0,-1},{0,1},{-1,0},{1,0}};
int main(){
int m,n;
point in;
while(cin>>m>>n&&m&&n){
getchar();//换行
memset(gh,0,sizeof(gh));
memset(ghb,0,sizeof(ghb));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch=getchar();
if(ch=='@'){
in.x=i;
in.y=j;
}else if(ch=='.'){
gh[i][j]=1;
}
}
getchar();//换行
}
queue<point>qu;
qu.push(in);
ghb[in.x][in.y]=true;
int res=0;
while(!qu.empty()){
point tmpp=qu.front();
qu.pop();
res++;
for(int i=0;i<4;i++){
point tmpn;
tmpn.x=tmpp.x+dir[i].x;
tmpn.y=tmpp.y+dir[i].y;
if(gh[tmpn.x][tmpn.y]&&!ghb[tmpn.x][tmpn.y]){
qu.push(tmpn);
ghb[tmpn.x][tmpn.y]=true;//在这里做标记(易错)
}
}
}
cout<<res<<endl;
}
return 0;
}
其他:
1-k=k&(k-1)可以消除k的二进制形式的最后一个1
2-使用~scanf()