1. 程式人生 > >Codeforces Round #426 (Div. 2)

Codeforces Round #426 (Div. 2)

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==118
) 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; }
View Code

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)