水题系列
思路:
大家最爱的模拟题加一。纯递归模拟题,当然做法比较多,要判断好蚂蚁的前进方向与图是从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;
}
思路:
没想到吧,这又是大家最喜爱的模拟题,暴力模拟就是大爷,也是没什么难度,模拟一下分糖的过程就行,而且范围极小,不用担心超时。
代码:
#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;
}