HDU 2094/HDU 2648/HDU 1027/HDU 1312

为了防止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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值