“图灵杯”个人赛真题

第九届:

A. 2356 G1024

#include<iostream>
using namespace std;
int main(){
	int n,k;
	cin>>n>>k;
	int x[k],m[k];
	for(int i=0;i<k;i++)cin>>x[i]>>m[i];
	for(int i=0;i<k;i++){
		if((m[i]-x[i])>=n){
			cout<<i+1;
			return 0;
		}		
	}
	cout<<"G!";	
	return 0;
}

B. 2355 NEUQ

#include<iostream>
using namespace std;
int main(){
	string s="NEUQ";
	int num;cin>>num;
	char a[1000005];
	for(int i=0;i<num;i++)cin>>a[i];
	int j=0;int ans=0;
	for(int i=0;i<num;i++){
		if(a[i]==s[j]){
			j++;j%=4;
		}
		else ans++;
	}
	cout<<ans+j;
	return 0;
}

C. 2358 小G的任务

#include<iostream>
using namespace std;
int main(){
	int n;cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++){
		int j=i;
		while(j>0){
			ans+=j%10;
			j/=10;
		}
	}
	cout<<ans<<endl;
	return 0;
}

D. 2351 nn与游戏

#include<iostream>
#include<queue>
#include<algorithm>
#include<string.h>
using namespace std;
int n,m;//n*n的地图,m个障碍
const int N=1e3+5;
int w[N][N]={0};//存图,己方为1,敌方为2,障碍物为-1
pair<int,int> a[N];//存可控制单位的坐标
pair<int,int> b[N];//存敌对单位的坐标
queue<pair<int,int> >q;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};//四个查找方向
int ans[N][N];//到某个点所需步数
int xt,yt;//记录目标点
void bfs(){
	while(!q.empty())
	{
		int x=q.front().first;int y=q.front().second;
		q.pop();
		for(int i=0;i<4;i++){
			int xx=x+dx[i];int yy=y+dy[i];
			if(xx>=0&&xx<n&&yy>=0&&yy<n&&ans[xx][yy]==-1&&w[xx][yy]==0||(xx==xt&&yy==yt&&ans[xx][yy]==-1))
			{
				q.push(make_pair(xx,yy));
				ans[xx][yy]=ans[x][y]+1;
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int x,y;
		cin>>x>>y;//存入障碍坐标
		w[x][y]=-1;
	}
	int t;cin>>t;//有t个可控制单位和敌对单位
	for(int i=0;i<t;i++)
	{
		int x1,y1,x2,y2;
		cin>>x1>>y1>>x2>>y2;
		a[i]=make_pair(x1,y1);
		b[i]=make_pair(x2,y2);
		w[x1][y1]=1;
		w[x2][y2]=2;
	}
	for(int i=0;i<t;i++)
	{
		memset(ans,-1,sizeof(ans));
		ans[a[i].first][a[i].second]=0;
		q.push(a[i]);
		xt=b[i].first;
		yt=b[i].second;
		bfs();
		cout<<ans[b[i].first][b[i].second]<<endl;
	}
	return 0;
}

 E. 2359 第二大数

#include<iostream>
using namespace std;
const int N=-2e9;
int a[10005];
int main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	long long sum=0;
	for(int i=1;i<=n-1;i++){
		int a_max1=a[i];
		int a_max2=0;
		for(int j=i+1;j<=n;j++){
			if(a[j]>a_max1){
				a_max2=a_max1;
				a_max1=a[j];
			}
			else if(a_max2<a[j])a_max2=a[j];
			sum+=a_max2;
		}
	}
	cout<<sum;
	return 0;
}

F. 2349 Num
(超级简单一道题,两层循环都没有超时)

#include<iostream>
using namespace std;
int main(){
	int n;cin>>n;
	bool a=false;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(i*j+i+j==n)a=true;
		}
	}
	if(a)cout<<"Yes";
	else cout<<"No";
	return 0;
}

G. 2357 特征值

 修改了一下之前写高精加的时候的代码做了一个函数,但是在这个题里面因为位数达不到题目给的5000位的精度,还是只过了2/3的数据

#include<iostream>
#include<string.h>
using namespace std;
string add(string a,string b){
	int c[105]={0};	
	int al=a.length(),bl=b.length();
	if(al<bl)
		{
			swap(a,b);
			swap(al,bl);
	    }
		for(int i=0;i<bl;i++){
			c[i]+=a[al-1-i]-'0'+b[bl-1-i]-'0';
			if(c[i]>=10){
				c[i]-=10;
				c[i+1]++;
			}
		}
		for(int i=bl;i<al;i++){
			c[i]+=a[al-1-i]-'0';
			if(c[i]>=10){
				c[i]-=10;
				c[i+1]++;
			}
		}
		if(c[al]==1)al++;
		char w[105];
		for(int i=0;i<=al-1;i++)
		{
			w[i]=c[i]+'0';
		}
		string s;
	    for(int i=al-1;i>=0;i--){
	    	 s=s+w[i];
	    }
	    return s;
}
int main(){
	string ans;
	string s;
	cin>>s;
	ans=s;
	while(s.length()>0){
		s.pop_back();
		ans=add(ans,s);
	}
	cout<<ans;
	return 0;
}

J 金牌厨师

在网上找到的思路,感觉这个题还是思路的逻辑更加重要,知道用什么方法之后就好做很多了。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值