Codeforces Round #719 Div. 3个人代码
div3只写出来5题,要掉大分了呜呜呜
A. Do Not Be Distracted!
题意翻译过来就是让你判断是否有两个相同的字母没有连续,按照题目意思暴力来一遍就行了
#include<bits/stdc++.h>
using namespace std;
int a[105];
char s[105];
int flag;
int main(){
int n,t;
cin>>t;
while(t--){
cin>>n>>s;
memset(a,0,sizeof(a));
flag=1;
for(int i=0;i<n;i++){
if(s[i]!=s[i+1]){
if(a[s[i]]!=0){
flag=0;
}
a[s[i]]++;
}
}
if(flag){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
B. Ordinary Numbers
这道题目翻译过来就是让你统计从1到n有几个数满足这个数的所有位上的数都一样(比如11,111,6666这样)
正常的从1开始判断每一个所有位数上都一样的数是不是小于n就行了
#include<bits/stdc++.h>
using namespace std;
int a[4005];
int flag,sum;
int main(){
int n,k,t;
cin>>t;
while(t--){
cin>>n;
sum=0;
flag=1;
int k=1;
while(flag&&k<=n){
for(int i=1;i<=9;i++){
if(k*i<=n){
sum++;
}
else{
flag=0;
}
}
k=k*10+1;
}
cout<<sum<<endl;
}
return 0;
}
这题题目意思是让你用1到nn的数各用一遍,组成一个nn的矩阵满足相邻格子的数字之差不能为1。
如果没有这样的矩阵就输出-1;
只有n为2的时候没有矩阵,别的时候先把所有奇数一个个填进去,然后再把偶数填进去就可以了
#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int main(){
int n,k,t;
cin>>t;
while(t--){
cin>>n;
k=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=k;
k+=2;
if(k>n*n){
k=2;
}
}
}
if(n==2){
cout<<-1<<endl;
}
else{
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
}
return 0;
}
D. Same Differences
给n个数,求有多少对(i,j)(i<j)满足a[j]-a[i]=j-i
直接记录a[i]-i,然后遍历一遍算个数。
(这道题因为自己笨一开始一直tle,以为被卡cin了改成scanf后发现还是tle,最终从一个40w的数组变成了map,我个人没学过stl,map的用法还是当场学的)
#include<bits/stdc++.h>
using namespace std;
int a[200005];
map<int,long long> b;
char s[105];
long long sum;
int main(){
int n,m,k,t;
scanf("%d",&t);
int minn,maxn;
while(t--){
scanf("%d",&n);
b.clear();
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
b[a[i]-i]++;
}
sum=0;
map <int,long long> ::iterator it;
for(it=b.begin();it!=b.end();it++){
sum+=it->second*(it->second-1)/2;
}
printf("%lld\n",sum);
}
return 0;
}
E. Arranging The Sheep
这题,我解释不来,就脑中有个想法就写成了这个样子莫名其妙就ac了我也解释不来
sum要开ll不然会wa5
#include<bits/stdc++.h>
using namespace std;
char a[1000005];
long long flag,sum;
int main(){
int n,m,k,t;
cin>>t;
while(t--){
cin>>n>>a;
sum=0;
int l=0,r=n-1,ll=0,rr=n-1;
while(a[ll]=='.'){
ll++;
}
while(a[rr]=='.'){
rr--;
}
l=ll;
r=rr;
while(l<r){
while(a[l]=='*'){
l++;
}
while(a[r]=='*'){
r--;
}
if(l<=r){
if(l-ll<=rr-r){
sum+=l-ll;
ll++;
a[l]='*';
}
else{
sum+=rr-r;
rr--;
a[r]='*';
}
}
}
cout<<sum<<endl;
}
return 0;
}