第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)(热身赛)

A Algorithm Course

题意:给你一个字符串,找里面有多少个cat和dog
思路:直接string函数find一直找到末尾并累加即可。

#include<bits/stdc++.h>
using namespace std;

int main(){
	string s;  cin>>s;
	int cnt = 0;
	int i = 0;
	while(s.find("cat",i)!=string::npos){
		i = s.find("cat",i)+3;
		cnt++;
	}
	i = 0;
	while(s.find("dog",i)!=string::npos){
		i = s.find("dog",i)+3;
		cnt++;
	}
	cout<<cnt<<"\n";
	return 0;
}

B Best Grouping

题意:给出n(<1e5),找出1到n这n个数中最多有几对对子满足最大公约数大于1,每个数不能重复用。先输出有几对,再输出这些对子。
思路:大概就是,,找1到n每个数因数里的最大质数,然后有相同的就凑一对。如果相同的有奇数个,就把第2个(该质数的2倍)加到以2为最大质因数数组中。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int maxp[maxn];
vector<int>a[maxn];
int main(){
	ios::sync_with_stdio(false);
	maxp[2] = 2;  maxp[3] = 3;
	for(int i = 4; i <= maxn; i++){
		int k = i;
		for(int j=2; j*j <= k; j++){
			while(k%j==0){
				maxp[i] = j;  k/=j;
			}
		}
		if(k!=1)maxp[i] = k;
	}
	
	int T;  cin>>T;
	while(T--){
		int n;  cin>>n;
		vector<pair<int,int> >ans;
		for(int i = 2; i <= n; i++)a[i].clear();
		for(int i = 2; i <= n; i++)a[maxp[i]].push_back(i);
		for(int i = n; i >= 2; i--){
			if(a[i].size()<2)continue;
			if(a[i].size()%2==0){
				for(int j = 0; j < a[i].size(); j+=2)
					ans.push_back({a[i][j],a[i][j+1]});
			}else{
				if(i!=2)a[2].push_back(a[i][1]);
				ans.push_back({a[i][0],a[i][2]});
				for(int j = 3; j < a[i].size(); j+=2)
					ans.push_back({a[i][j],a[i][j+1]});
			}
		}
		cout<<ans.size()<<" ";
		for(auto i:ans)cout<<i.first<<" "<<i.second<<" ";
		cout<<"\n";
	}
	return 0;
}

C Computer Science Ability Test

题意:无
思路:妙啊,最多只要提交2^10份代码,就可以ak了。(可以用py写个生成cpp文件的程序,写个自动上传的程序),只要不怕罚时,一定能A出来的。

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"FTTFTFFTFT";
	return 0;
}

以下附赠更新一份神仙的代码
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页