1. 程式人生 > 實用技巧 >Codeforces Round #691 (Div. 2)

Codeforces Round #691 (Div. 2)

A. Red-Blue Shuffle

這題求問概率沒啥好說的,首位決定一切,比較首位個數。

B. Move and Turn

豎著走以後只能橫著走,橫著走以後只能豎著走。

開始像暴力搜尋,然後炸了。炸了以後開始找規律。

按他的說法打表,打出來以後按奇偶位找規律。

打表程式碼如下

ll id=0;
struct node{
    int x,y;
    int dir;
    int step;      
    ll num;               
    bool operator<(const node& a) const{
        return num<a.num;
    }
};
queue
<node>q; map<pair<int, int> ,int> mp; map<node,int>mp2; int main(){ int n;cin>>n; ll ans=0,num=0; q.push((node){1,1,0,0,++id}); q.push((node){1,1,1,0,++id}); while(!q.empty()){ node now=q.front(); q.pop();
if(mp2[now]==0){ mp2[now]++; } else{ continue; } if(now.step==n){ pair<int ,int > pp= make_pair(now.x,now.y); if(mp[pp]==0){ mp[pp]=1; ans++; } }
else{ if(now.dir==1){ q.push((node){now.x+1,now.y,0,now.step+1,++id}); q.push((node){now.x-1,now.y,0,now.step+1,++id}); } else if(now.dir==0){ q.push((node){now.x,now.y+1,1,now.step+1,++id}); q.push((node){now.x,now.y-1,1,now.step+1,++id}); } } } cout<<ans<<endl; return 0; }

ac程式碼如下:

const int N=1e4+7;
int a[N],pos=1,num=0;
int main(){
    int n;
    for(int i=1;i<=1000;++i){
        num+=i;
        a[pos]=4*num;
        pos+=2;
    }
    for(int i=1;i<=1000;++i){
        if(i%2==0){
            a[i]=(i/2+1)*(i/2+1);
        }    
    }
    cin>>n;
    cout<<a[n]<<endl;
    return 0;
}

C. Row GCD

我們目標是求出GCD(a1+k,a2+k,a3+k,a4+k,.......,an+k)

我們學過輾轉相減法,GCD(a,b)=GCD(a,b-a)

而上面的一大串東西,實際上兩兩求GCD,那麼兩個之間就能合法的消去k

繼而我們得到原式=GCD(a1+k,a2-a1,a3-a2,an-an-1

發現後面是不變的值,那麼我們只需要根據b的變化改變 a1+k 就好了

注意實現的時候qq初始設為0,這樣n==1時,我們就不用特判了。

如果qq初始設為a[2]-a[1]的話,n==1時,不存在該值,會出錯。

const int N=2e6+7;
int n,m;
ll a[N],b[N];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<=m;++i){
        scanf("%lld",&b[i]);
    }
    sort(a+1,a+1+n);
    ll qq=0;
    for(int i=2;i<=n;++i)
        qq=__gcd(qq,a[i]-a[i-1]);
    for(int i=1;i<=m;++i){
        ll ans=__gcd(a[1]+b[i],qq);
        printf("%lld ",ans);
    }
    return 0;
}

------------

週五的CF打完以後晚上沒睡著,把英語課曠了,唉。