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;
}