Codeforces Round #719 (Div. 3)个人代码

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

C. Not Adjacent Matrix

这题题目意思是让你用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;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值