競程作業,2017 TOPC Problem D:FOJ-191
模擬題,反正就照他的規則模擬
但每次合併完剩下的丟到一個 stack 裡面,比較省時間
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include<stdio.h> #include<queue> #include<utility> #include<stack> using namespace std; stack<pair<char, int> > S; queue<pair<char, int> > Q; int main(){ int t, n, tmpi, ans; char tmpc; scanf("%d", &t); while(t--){ ans = 0; scanf("%d", &n); for(int i=0; i<n; i++){ pair<char, int> p; scanf(" %c %d", &p.first, &p.second); Q.push(p); } while(!Q.empty()){ if(!S.empty()){ if(Q.front().first==S.top().first){ Q.front().second+=S.top().second; S.pop(); } }
if(Q.front().second>=3){ pair<char, int> p; p.first = Q.front().first; p.second = Q.front().second/3; Q.push(p); Q.front().second%=3; } if(Q.front().second>0) S.push(Q.front()); Q.pop(); } while(!S.empty()){ ans+=S.top().second; S.pop(); } printf("%d\n", ans); } }
|