凉脾的比赛

你离开我真会死。 提交于 2020-01-22 19:14:38

A - DRM Messages

这道题主要是找两个字符串的有种联系

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int sum,sum_;
int main(){
	string s;
	cin>>s;
	for(int i=0;i<s.length()/2;i++)
	sum+=s[i]-'A';
	for(int i=s.length()/2;i<s.length();i++)
	sum_+=s[i]-'A';
	for(int i=0;i<s.length()/2;i++)
	s[i]=(s[i]-'A'+sum)%26+'A';
	for(int i=s.length()/2;i<s.length();i++)
	s[i]=(s[i]-'A'+sum_)%26+'A';
//	cout<<s<<endl;
    for(int i=0;i<s.length()/2;i++){
    	s[i]=(s[i]+s[i+s.length()/2]-'A'-'A')%26+'A';
	}
	cout<<s.substr(0,s.length()/2);
	return 0;
}

B - Game of Throwns

这道题的难点之一就是输入数据,当时比赛时就没弄出来
这道题有简单方法,就是现将数存起来,等在最后在进行处理。
注意了,这题是我找来教大家负数取模的,具体做法看代码

总结:
当要求a模b,需分情况讨论:

当a>=0 : a%b
当-b<=a<0 : (a+b)%b
当a<-b : (a%b+b)%b

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[100];
int p[1000];
int n,k,c;
int sum;
int main(){
	cin>>n>>k;
	for(int i=1;i<=k;i++){
		scanf("%s",s);
		int num=0;
		if(s[0]>='0'&&s[0]<='9'){
			for(int j=0;j<strlen(s);j++){
				num*=10;
				num+=s[j]-'0';
			}
//			cout<<num<<endl;
			p[++c]=num; 
		}
		if(s[0]=='-'){
			for(int j=1;j<strlen(s);j++){
				num*=10;
				num+=s[j]-'0';
			}
//			cout<<-num<<endl;
			p[++c]=-num;
		}
		if(s[0]=='u'){
			scanf("%s",s);
			for(int j=0;j<strlen(s);j++){
				num*=10;
				num+=s[j]-'0';
			}
//			cout<<num<<endl;
//			cout<<num<<endl;
			c-=num;
//			cout<<c<<endl;
		}
	}
	for(int i=1;i<=c;i++)
	sum+=p[i];
	if(sum>n)
	sum=sum%n;
	if(sum<0&&sum>-n)
	sum=(sum+n)%n;
	if(sum<-n)
	sum=(n+sum%n)%n;
	cout<<sum<<endl;
	return 0;
} 

C - Sheba’s Amoebas

这道题用dfs,当时也做出来了,做法也一样,但做的稀里糊涂的,这次再捋一遍

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=110;
int n,m;
int num,sum;
char s[maxn][maxn];
int a[maxn][maxn];
void dfs(int x,int y){
	if(x<=0||x>n||y<=0||y>m||a[x][y]||s[x][y]!='#')
	return;
	a[x][y]=1;
	num++;
	for(int i=-1;i<=1;i++){
		for(int j=-1;j<=1;j++){
			dfs(x+i,y+j);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	cin>>s[i][j];
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++){
		num=0;
		dfs(i,j);
		if(num>0)sum++;
	}
	cout<<sum<<endl;
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!