codeforce round615 div3 B

这道题一开始打算给每个点赋权值,再用记录路径的bfs去找可能的结果,后来看了题解发现这样子做麻烦了。观察就可以发现,给出的点要能形成一条通路,必须满足任意两个点(xi,yi),(xj,yj),其中i!=j,并且xi<yj,yi<yj,不然就无法走到该点,故可以推断出所有点必然满足一定的升序排列,所以只需要按照排好序的点来找就行。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int t;
 5     cin>>t;
 6     for(int i = 0;i<t;i++){
 7         int n;
 8         cin>>n;
 9         vector<pair<int,int>>a(n);
10         for(int k = 0;k<n;k++){
11             cin>>a[k].first>>a[k].second;
12         }
13         sort(a.begin(),a.end());
14         pair<int,int> cur = make_pair(0,0);
15         string ans;
16         bool ok = true;
17         for(int j = 0;j<n;j++){
18             int r = a[j].first - cur.first;
19             int u = a[j].second - cur.second;
20             if(r<0||u<0){
21                 cout<<"NO
";
22                 ok = false;
23                 break;
24             }
25             ans+=string(r,'R');
26             ans+=string(u,'U');
27             cur = a[j];
28         }
29         if(ok){
30             cout<<"YES
";
31             cout<<ans<<endl;
32         }
33     }
34 }
原文地址:https://www.cnblogs.com/mlcn-2000/p/12247336.html