Codeforces1023E Down or Right 【贪心】

题目分析:

从起点开始询问终点连通性,优先右走。从终点开始询问起点连通性,优先上走。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n;
 5 
 6 int query(int x1,int y1,int x2,int y2){
 7     printf("? %d %d %d %d\n",x1,y1,x2,y2);
 8     fflush(stdout);
 9     char str[5];
10     scanf("%s",str);
11     if(str[0] == 'Y') return 1;
12     else return 0;
13     //int z; scanf("%d",&z);
14     //return z;
15 }
16 
17 stack<char> sta;
18 vector <char> vc;
19 void work(){
20     int x = 1,y = 1;
21     while(n-x+n-y > n-1){
22     int z = query(x,y+1,n,n);
23     if(z){vc.push_back('R');y++;}
24     else{vc.push_back('D');x++;}
25     }
26     int nx = n,ny = n;
27     while(nx != x || ny != y){
28     int z = query(1,1,nx-1,ny);
29     if(z){sta.push('D');nx--;}
30     else{sta.push('R');ny--;}
31     }
32     printf("! ");
33     for(int i=0;i<vc.size();i++) printf("%c",vc[i]);
34     while(!sta.empty()){printf("%c",sta.top());sta.pop();}
35 }
36 
37 int main(){
38     scanf("%d",&n);
39     work();
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/Menhera/p/9507816.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值