第四届“传智杯”全国大学生IT技能大赛(练习赛)【完结】

题目都是基础题。

T1 符合条件的数【暴力】

在这里插入图片描述
https://www.luogu.com.cn/problem/T211364?contestId=56279
暴力即可。

#include<bits/stdc++.h>
using namespace std;
int n,k; 
bool check(int n)
{
    
    
	int cnt=0;
	while(n) 
	{
    
    
		if(n%10==3) cnt++;
		n/=10;
	}
	return cnt==k;
}
int main(void)
{
    
    
	cin>>n>>k;
	for(int i=n;;i++)
	{
    
    
		if(check(i)) 
		{
    
    
			cout<<i;
			break;
		}
	}
	return 0;
}

T2 选代表【模拟】

在这里插入图片描述
https://www.luogu.com.cn/problem/T211368?contestId=56279

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int cnt[N],n,x;
int main(void)
{
    
    
	cin>>n;
	for(int i=0;i<n;i++)
	{
    
    
		cin>>x;
		if(!cnt[x]) cout<<x<<" ";
		cnt[x]++;
	}
	return 0;
}

T3 成绩统计 【排序】

在这里插入图片描述
https://www.luogu.com.cn/problem/T211372?contestId=56279
注意向上取整,注意四舍五入即可。

#include<bits/stdc++.h>
using namespace std;
struct node
{
    
    
	string name;
	int id,a,b;
	int sum;
}temp;
vector<node>ve;
int n;
bool cmp(node a,node b)
{
    
    
	if(a.sum==b.sum)
		return a.id<b.id;
	return a.sum>b.sum;
}
int main(void)
{
    
    
	cin>>n;
	for(int i=0;i<n;i++)
	{
    
    
		cin>>temp.name>>temp.a>>temp.b;
		temp.id=i;
		temp.b=ceil(sqrt(1.0*temp.b)*10);
		temp.sum=0.6*temp.b+0.4*temp.a+0.5;
		ve.push_back(temp); 
	}
	sort(ve.begin(),ve.end(),cmp);
	for(int i=0;i<ve.size();i++) 
	{
    
    
		cout<<ve[i].name<<" "<<ve[i].sum;
		if(i!=ve.size()-1) cout<<endl;
	}
	return 0;
}

T4 背答案 【模拟】

在这里插入图片描述
https://www.luogu.com.cn/problem/T211939?contestId=56279

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
unordered_map<string,int>mp;
string a[N],b[N];
int n,m;
int main(void)
{
    
    
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>a[i]>>b[i],mp[a[i]]=i;
	for(int i=0;i<m;i++)
	{
    
    
		string name,temp; cin>>name;
		int ans=0;
		for(int j=0;j<4;j++)
		{
    
    
			cin>>temp;
			if(temp==b[mp[name]]) ans=j;
		}
		cout<<char('A'+ans)<<endl;
	}
	return 0;
}

T5 击鼓传花 【暴力模拟】

在这里插入图片描述
https://www.luogu.com.cn/problem/T211943?contestId=56279
暴力模拟,注意剪枝即可。

#include<bits/stdc++.h> 
using namespace std;
const int N=1e6+10;
int st[N],n,m,k;
int main(void)
{
    
    
	cin>>n>>m>>k;
	for(int i=0;i<m;i++)
	{
    
    
		int x; cin>>x;
		while(!st[x])
		{
    
    
			st[x]=1;
			x=(x+k)%n;
		}
	}
	int cnt=0;
	for(int i=0;i<n;i++) if(!st[i]) cnt++;
	cout<<cnt<<endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
int gcd(int a,int b) {
    
    return b?gcd(b,a%b):a;}
int main()
{
    
    
    cin>>n>>m>>k;
    int l=gcd(n,k);
    vector<bool>v(l,true);
    for(int i=0;i<m;i++)
	{
    
    
        int j;cin>>j;
        v[j%l]=false;
    }
    cout<<(count(v.begin(),v.end(),true))*(n/l);
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/121459361