Codeforces Round #719 (Div. 3)
比赛地址:https://codeforces.com/contest/1520
A. Do Not Be Distracted!
题目大意:给你一个字符串相同字符是不是紧挨在一起,如果是就输出YES否则输出NO
思路:用一个vit数组来记录某个字符是不是第一次出现如果第一次出现显然没有问题,如果不是第一次出现就看它和前面的字符是否相等,如果相等那也没问题,否则就输出NO
代码:
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<cstdlib>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,vit[1000],flag=1;
memset(vit,0,sizeof(vit));
char arr[100];
cin>>n;
scanf("%s",&arr);
vit[arr[0]]++;
for(int i=1; i<n; i++)
{
if(vit[arr[i]]==0)
{
vit[arr[i]]++;
}
else
{
if(arr[i]!=arr[i-1])
{
flag=0;
break;
}
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
B. Ordinary Numbers
题目大意:给出一个n问从1到n有多少个数它的每个数位上的数相同
思路:直接双重循环构造这种数然后统计
代码:
#include<iostream>
#include<cstdio>
typedef long long ll;
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin >> n;
int ans = 0;
for(int i = 1; i <= 9; i++)
{
ll x = i;
while(x<= n)
{
ans+=1;
x=x*10+i;
}
}
cout <<ans<<'\n';
}
return 0;
}
C. Not Adjacent Matrix
题目大意:给你一个n问能不能将1~n* n填到n*n的矩阵中问能不能使相邻位置元素相差大于1如果可以就打印一种,不行就输出-1
思路:首先如果n等于1输出1就行,n=2时无解,其他情况一定有解,在次分析一下假如n=3我们可以先将矩阵按照
1 2 3
4 5 6
7 8 9
填好然后将每一列依次向上平移0~n-1个单位平移后相邻位置一定相差大于1给出平移后的矩阵
1 5 9
4 8 3
7 2 6
可以多举几个例子然后会发现规律:第一行的元素是从1开始然后后面的数在前面的数的基础上加上n+1
然后每一列以该列第一个数为基准都等于前面的数加上n,由于可能出现大于nn的数所以一旦大于nn就对n*n取余即可。
代码:
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int t,n,m,arr[105][105];
cin>>t;
while(t--)
{
cin>>n;
m=n*n;
if(n==1)
{
cout<<1<<endl;
continue;
}
if(n==2)
{
cout<<-1<<endl;
continue;
}
arr[0][0]=1;
for(int i=1; i<n; i++)
arr[0][i]=arr[0][i-1]+n+1;
for(int j=0; j<n; j++)
{
for(int i=1; i<n; i++)
{
arr[i][j]=(arr[i-1][j]+n)%m;
if(arr[i][j]==0)
arr[i][j]=m;
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
printf("%d%c",arr[i][j],j==n-1?'\n':' ');
}
}
}
return 0;
}
D. Same Differences
题目大意: