自Codeforces Round #634

A题

分偶数,奇数
我估计再也遇不到这么简单得了

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>  
using namespace std;
#define mid 1000000007  
typedef  long long ll;
int main(){
	int a;
	cin>>a;
	while(a--){
		int e;
		cin>>e;
		if(e%2==0)
		cout<<e/2-1<<endl;
		else
		cout<<e/2<<endl;
	}
	return 0;
} 

B题

就是个模拟
题读起来有点小抽象
**cao我刚刚写的不在了 **

题中要求m个元素内有n个不同
我们先将相同的元素放在最前面,记作a(什么位置都行,什么元素都行,不过我为了方便,按升序来,何必为难自己)
例如
m=5,n=3 aaabc
m=7, n=2 aaaaaab
后面的每个m长度我们就把最前面的元素复制粘贴到最后面
例如
第一个5 aaabc
第二个5 aabca
第三个5 abcaa
第四个5 bcaaa
这样做的原因是,每一个5距离长度的内容都和第一个一样满足题意
代码实现也十分简便

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>  
using namespace std;
#define mid 1000000007  
typedef  long long ll;
char c[2006];
int main(){
	int a,e,f,g,i;
	cin>>a;
	while(a--){
		cin>>e>>f>>g;
		c[1]='a';
		for(i=1;i<=f-g+1;i++)c[i]='a';//前面的相同 
		for(i=f-g+2;i<=f;i++){
			
		c[i]=c[i-1]+1;
		}
		int t=1;
		for(i=f+1;i<=e;i++)c[i]=c[t++];	
		for(i=1;i<=e;i++)cout<<c[i];
		cout<<endl;
	}
	return 0;
} 

C题好愁

真的好愁

思路
1.先将每个数的出现次数用map记录
2.再读入的时候记录下出现次数最多的数,这个数直接决定了答案的范围,就不用去管出现次数比它小的数了,这很重要!!!!
3.最后还要分情况讨论一下
4.思路很愁我,代码实现很简单
5.就点给个赞吧

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>  
using namespace std;
#define mid 1000000007  
typedef  long long ll;
map<int,int>c;
int main(){
	int a,b,i,d,maxmax;
	cin>>a;
	while(a--){
		maxmax=-1;//记录出现次数的最大值
		cin>>b;
		for(i=0;i<b;i++){
			cin>>d;
			c[d]++;//用map记录出现次数
			maxmax=max(maxmax,c[d]);
		}
		int w=c.size();
		if(maxmax-(w-1)>1)//
		/*形如这种情况
		
		出现的字母    		bcd(此时不包含a)
		最大的出现次数6次   aaaaaa
		那么最大的其实时   abcd  aaaa  (a会拿出一个到右边)

		“能懂吗?我确实解释不怎么优秀“
		*/
		cout<<w<<endl;
		else
		cout<<min(maxmax,w-1)<<endl;
		//只要拿笔演算一下就很轻松
		c.clear();//记得清空
		cout<<endl;
	}
	return 0;
}

D题

还是好实现
就是选好9个位置

9个位置要不同行,不同列
大概就是这个样子(选法很多)
在这里插入图片描述
直接代码就ok啦!

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>  
using namespace std;
#define mid 1000000007  
typedef  long long ll;
char c[10][10];
int w[9][2]={{1,1},{2,4},{3,7},{4,2},{5,5},{6,8},{7,3},{8,6},{9,9}};
//我直接列出位置
int main(){
	int a,i,j,p;
	cin>>a;
	while(a--){
		for(i=1;i<=9;i++){
			for(j=1;j<=9;j++){
				cin>>c[i][j];
			}
		}
		for(i=0;i<9;i++){//这就是让值变成与原来不一样的,写的有点鸡肋
			int k=c[w[i][0]][w[i][1]]-'0';
			k++;
			if(k==10)
			k=1;
			c[w[i][0]][w[i][1]]=k+'0'; 
		}
		cout<<endl;
		for(i=1;i<=9;i++){
			for(j=1;j<=9;j++){
				cout<<c[i][j];
			}
			cout<<endl;
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值