1. 程式人生 > 其它 >2021ccpc第一次網路賽I題

2021ccpc第一次網路賽I題

題目連結:Problem - 7108 (hdu.edu.cn)

就是給一組運算元,在中間擷取任意長度,看看起點和終點相同的操作集合有多少個,比如說樣例URLLDR,設初始點為(0,0),那麼路徑為(0,0)->(0,1)->(1,1)->(0,1)->(-1,1)->(-1,0)->(0,0);

明顯1->6是一組,2->4是一組,所以最後輸出2;剩餘詳情見註釋

# include<bits/stdc++.h>
using namespace std;
typedef long long LL;
//簽到題,但res+=p[{x,y}];可能不好想;
int
main() { int t; string s; cin>>t; while(t--) { map<pair<int,int>,int> p; //把map設定在while迴圈裡面,是因為每次都要重置map //不能讓上一組的map資料影響到下一組 LL res=0; //我想開LL; int x=0,y=0; int n; cin>>n>>s; p[{0,0}]=1;
//起始點是(0,0),所以(0,0)剛開始就經過了一次 for(auto ch:s) { if(ch=='U') y++; if(ch=='D') y--; if(ch=='R') x++; if(ch=='L') x--; res+=p[{x,y}]; //每次經過一個點,如果之前經過過這個點的路徑加上這一段路徑 //也可以當成是一條新的路徑首尾都是(X,Y); p[{x,y}]++; } cout
<<res<<endl; } return 0; }

交上AC