VJ2020-1-18

A Kattis drmmessages DRM Messages
题目长,其他没啥。简单模拟

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt1,cnt2;
int main()
{
	string s;
	while(cin>>s)
	{
		cnt1=0;cnt2=0;
		int l=s.size();
		for(int i=0;i<l/2;i++)
		  cnt1+=s[i]-'A';
		for(int i=l/2;i<l;i++)
		  cnt2+=s[i]-'A';
		cnt1%=26;
		cnt2%=26;
		for(int i=0;i<l/2;i++)
		{
			s[i]+=cnt1;
			if(s[i]-'A'>=26)
			  s[i]-=26;
		 }
		for(int i=l/2;i<l;i++)
		{
			s[i]+=cnt2;
			if(s[i]-'A'>=26)
			  s[i]-=26;
		 }
		for(int i=0;i<l/2;i++)
		{
			s[i]+=s[i+l/2]-'A';
			if(s[i]-'A'>=26)
			  s[i]-=26;
		  } 
		for(int i=0;i<l/2;i++) cout<<s[i];
		cout<<endl;
	}
	return 0;
} 

B Kattis throwns Game of Throwns
读错题了,不然就AC了。双端队列,也可以用其他方法模拟双端队列
先把所有的“undo”撤销操作完成。然后按照剩下的操作进行转圈就行。

#include<bits/stdc++.h>
using namespace std;
int power(int a,int b)
{
	int ans=1,base=a;
	while(b)
	{
		if(b&1)ans*=base;
		base*=base;
		b>>=1;
	}
	return ans;
}
int n,k;
int main()
{
	while(cin>>n>>k)
	{
		deque<string>d;
		while(k--)
		{
			string t;cin>>t;
			if(t=="undo")
			{
				int sum;cin>>sum;
				for(int i=1;i<=sum;i++)
				    if(!d.empty())
					 d.pop_back();
			}
			else
			d.push_back(t);
		}
		int ans=0;
		while(!d.empty())
		{
			string t=d.front();d.pop_front();
			int cnt=0,l=t.size();
			for(int i=l-1;i>=0;i--)
			{
				if(t[i]=='-')
				{
					cnt=-cnt;break;
				}
				cnt+=(t[i]-'0')*(power(10,l-1-i));
			 } 
			cnt=(cnt%n+n)%n;
			ans=(ans+cnt)%n;
		}
		cout<<ans<<endl;
	}
	return 0;
}

C Kattis amoebas Sheba’s Amoebas
BFS爆搜

#include<bits/stdc++.h>
using namespace std;
int a[110][110],m,n;
int dir[8][2]={
	{-1,0},
	{-1,-1},
	{-1,1},
	{0,1},
	{0,-1},
	{1,0},
	{1,1},
	{1,-1}
};
struct node
{
	int x,y;
};
void bfs(int x,int y)
{
	queue<node>q;
	node c,b;
	b.x=x;b.y=y;
	q.push(b);
	while(!q.empty())
	{
		b=q.front();q.pop();
		for(int i=0;i<8;i++)
	  		{
	  			c.x=b.x+dir[i][0],c.y=b.y+dir[i][1];
	  			if(a[c.x][c.y]&&c.x>=1&&c.x<=m&&c.y>=1&&c.y<=n)
	  			{
	  			 	a[c.x][c.y]=0;
	  			 	q.push(c);
				   }
			  }
	}
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	  for(int j=1;j<=n;j++)
	  {
	  	char t;cin>>t;
	  	if(t=='#')
	  	  a[i][j]=1;
	  }
	int cnt=0;
	for(int i=1;i<=m;i++)
	  for(int j=1;j<=n;j++)
	  {
	  	if(a[i][j])
	  	{
	  		cnt++;
	  		bfs(i,j);
		  }
	  }
	cout<<cnt<<endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值