水题系列 4

水题系列

PREV-33 兰顿蚂蚁

思路:

大家最爱的模拟题加一。纯递归模拟题,当然做法比较多,要判断好蚂蚁的前进方向与图是从0开始编号就行,特别是后者,然后就没有难度了。

代码:

#include<iostream>
#include<cstring>
using namespace std;
int a,b;
int dp[300][300];
int book[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int what(char ap)
{
	if(ap=='U')return 2;
	if(ap=='D')return 0;
	if(ap=='L')return 3;
	if(ap=='R')return 1;
}
void dfs(int q,int p,int node,int num)
{
	if(num==0){
		cout<<q<<" "<<p<<endl;
		return;
	}
	if(dp[q][p]==1){
		node--;if(node==-1)node=3;
	}
	else{
		node++;if(node==4)node=0;
	}
	if(dp[q][p]==0)dp[q][p]=1;
	else dp[q][p]=0;
	dfs(q+book[node][0],p+book[node][1],node,num-1);
}
int main()
{
	int q,p,num;
	char node;
	cin>>a>>b;
	for(int i=0;i<a;i++)
	{
		for(int j=0;j<b;j++)
		{
			cin>>dp[i][j];
		}
	}
	cin>>q>>p>>node>>num;
	dfs(q,p,what(node),num);
	return 0;
}

PREV-32 分糖果

思路:

没想到吧,这又是大家最喜爱的模拟题,暴力模拟就是大爷,也是没什么难度,模拟一下分糖的过程就行,而且范围极小,不用担心超时。

代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct dian{
	int num,sum;
	dian(){
		num=0;
		sum=0;
	}
};
int main(){
	int a,rng=0,han,bkb;
	dian d[1001];
	cin>>a;
	for(int i=0;i<a;i++){
		cin>>d[i].num;
	}
	while(bkb!=a){
		int fuck=0;bkb=1;
		for(int i=0;i<a;i++){
			int nb=i-1;
			if(nb==-1)nb=a-1;
			d[i].num/=2;
			d[nb].sum+=d[i].num;
		}
		for(int i=0;i<a;i++){
			d[i].num+=d[i].sum;d[i].sum=0;
			if(fuck==0)fuck=d[i].num;
			else{
				if(d[i].num==fuck)bkb++;
			}
		}
		if(bkb==a)break;bkb=0;fuck=1;
		for(int i=0;i<a;i++){
			if(d[i].num%2!=0){
				d[i].num++;rng++;
			}
			if(fuck==0)fuck=d[i].num;
			else if(d[i].num==fuck){
				bkb++;
			}
		}
	}
	cout<<rng<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值