• 20181020遭遇战


    今日恰逢新人加入我们NOIP备战的队伍,题目还算“友好”。第一题模拟,第二题n^2暴力+前缀和,第三题听说也很暴力。

    “设置两个布尔型数组,分别记录模拟每个人走过的格子。如果两人没有相遇并且还可以跑,就让他们按照规则一直跑下去。”——《信息学奥赛课课通(C++)》

    上代码:

    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    int n,x1,y1,d1,x2,y2,d2;
    int movex[4]={0,1,0,-1},movey[4]={1,0,-1,0};
    bool book1[1001][1001],book2[1001][1001];//记录
    bool stop1,stop2;
    void r1(bool xyds)//小林
    {
    	book1[x1][y1]=1;
    	int xx=x1+movex[d1],yy=y1+movey[d1];
    	if(xx<0||xx>=n||yy<0||yy>=n||book1[xx][yy]){//判断越界、重复情况
    		if(xyds){
    			stop1=1;//走到地图边缘死胡同就停下
    			return;
    		}
    		else d1=(d1+1)%4,r1(1);//右转
    	}
    	else x1=xx,y1=yy;	
    }
    void r2(bool xyds)//小华
    {
    	book2[x2][y2]=1;
    	int xx=x2+movex[d2],yy=y2+movey[d2];
    	if(xx<0||xx>=n||yy<0||yy>=n||book2[xx][yy]){
    		if(xyds){
    			stop2=1;
    			return;
    		}
    		else d2=(d2+3)%4,r2(1);//左转
    	}
    	else x2=xx,y2=yy;
    }
    int main()
    {
    	//freopen("fight.in","r",stdin);
    	//freopen("fight.out","w",stdout);
    	int t;
    	scanf("%d",&t);
    	for(int i=1;i<=t;i++){
    		memset(book1,0,sizeof(book1));
    		memset(book2,0,sizeof(book2));
    		stop1=0,stop2=0;//初始化
    		scanf("%d%d%d%d%d%d%d",&n,&x1,&y1,&d1,&x2,&y2,&d2);
    		if(x1==x2||y1==y2) printf("%d %d
    ",x1,y1);//特判,当两人开始时就在同一点,则直接输出
    		else{
    			for(;;){//一直跑下去!!!
    				if(!stop1) r1(0);
    				if(!stop2) r2(0);
    				if(stop1&&stop2){
    					printf("-1
    ");//都凉了
    					break;
    				}
    				if(x1==x2&&y1==y2){//碰上了
    				    printf("%d %d
    ",x1,y1);
    				    break;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    CTF-域渗透--SSH服务
    CTF-域渗透--SMB信息泄露
    CTF-域渗透--FTP服务后门利用
    Codeforces Round #628 (Div. 2)
    模板
    模板
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    模板
    Codeforces Round #627 (Div. 3)
  • 原文地址:https://www.cnblogs.com/dong-ji-yuan/p/9821595.html
Copyright © 2020-2023  润新知