Codeforces Round #426 (Div. 2)
阿新 • • 發佈:2017-07-31
lap namespace urn 總結 turn mes else lose ide
哎,再想想應該能寫出第三題的!!!
A. The Useless Toy
題目大意:給你兩個方向的箭頭,再給你旋轉的次數,問你是順時針還是逆時針還是不確定。
#include<bits/stdc++.h> #define first fi #define second se #define ll long long #define pb push_back #define pii pair<int,int> #define mk make_pair using namespace std; int n; int work(char g) { if(g==118View Code) return 0; else if(g==60) return 1; else if(g==94) return 2; else if(g==62) return 3; } int main() { int n; char a[3],b[3]; int x,y; scanf("%s%s",a,b); cin>>n; //printf("%d %d\n",a[0],b[0]); x=work(a[0]); y=work(b[0]); //cout<<x<<endl; //cout<<y<<endl;int now=n%4; if((x+now)%4==y && (x-now+4)%4==y) puts("undefined"); else if((x+now)%4==y) puts("cw"); else if((x-now+4)%4==y) puts("ccw"); else puts("undefined"); return 0; }
B. The Festive Evening
題目大意:有26扇門和,k個哨兵,有n個人進門,每個人只能進特定的門,從這扇門的第一個人進來的時候就
需要一個哨兵,最後一個人走這個哨兵才能離開,問你哨兵夠不夠。
思路:記錄一下每扇門經過的人數,從頭模擬一下。
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,k,vis[30]; bool judge[30]; char s[N]; int main() { cin>>n>>k; scanf("%s",s); for(int i=0;i<n;i++) vis[s[i]-‘A‘]++; for(int i=0;i<n;i++) { if(!judge[s[i]-‘A‘]) { judge[s[i]-‘A‘]=true; k--; if(k<0) { puts("YES"); return 0; } vis[s[i]-‘A‘]--; if(vis[s[i]-‘A‘]==0) k++; } else { vis[s[i]-‘A‘]--; if(vis[s[i]-‘A‘]==0) k++; } //cout<<k<<endl; } puts("NO"); return 0; }View Code
C. The Meaningless Game
題目大一:給你n組數,沒組裏面有兩個數字a,b,表示兩個人最後的分數,問你有沒有可能經過若幹輪達到變成這兩個數,
每個人的分數剛開始都為1,每次選一個數x,贏的人分數 *x^2 另一個人的分數 *x。
思路:媽的!!想到關鍵點了都沒做出來,我好笨啊啊啊啊!!!! 我想到兩個人得分數相乘一定是一個數的三次方。
這是個必要條件,那麽我們就可以先預處理處1e18以內所有數的三次方,二分查找就行了。然後我就在想怎麽保證這
a,b都合法呢,我就一個勁地往他們的gcd方向想,什麽枚舉因子啥的,哎。其實我們把a可以看成 三個數的乘積,k1*k1*k2
b可以看成 k2*k2*k1。 k1就是所有第一個人贏的數字的乘積,k2是所有第二個人贏的數字的乘積,而我們二分查出來的是
k1*k2, 所以我們只要判斷一個 a和b能不能被 k1*k2整除就行了。。反省反省反省,這題不難!!
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e6; ll x,y,vis[1000006]; int main() { for(ll i=0;i<1e6;i++) vis[i]=(i+1)*(i+1)*(i+1); int n; cin>>n; while(n--) { ll x,y; scanf("%I64d%I64d",&x,&y); ll sum=x*y; int item=lower_bound(vis,vis+1000000,sum)-vis; if(vis[item]!=sum) { puts("No"); continue; } item++; if(x%item==0 && y%item==0) puts("Yes"); else puts("No"); } return 0; }View Code
總結:我他媽就是傻逼!
Codeforces Round #426 (Div. 2)