Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!

  A. Johnny and Ancient Computer

#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0);// cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int N=1000+5;
 
    int n,m,t;
    int i,j,k;
 
int32_t main()
{
    IOS;
    rush(){
        ll a,b; cin>>a>>b;
        if(a==b){cout<<0<<endl;continue;}
        else if(a>b){
            swap(a,b);
        }
        int num=0;
        while(a<b){
            a*=2;
            num++;
        }
        if(a==b){
            int tmp=num%3;
            num=num/3;
            if(tmp) num++;
            cout<<num<<endl;
        }
        else cout<<-1<<endl;
    }
    return 0;
}

B. Johnny and His Hobbies 

本來還想從異或的性質去考慮,結果沒發現規律,暴力還真過了,沒想到的是官方題解也是暴力

#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0);// cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int N=1024+5;
 
    int n,m,t;
    int i,j,k;
    map<int,int>mp;
    int a[N],b[N];
int32_t main()
{
    IOS;
    rush(){
        cin>>n;
        for(i=0;i<n;i++){
            cin>>a[i];
        }
        if(n==2){
            if(a[0]==0) {cout<<a[1]<<endl;continue;}
            else if(a[1]==0) {cout<<a[0]<<endl;continue;}
        }
        sort(a,a+n);
        int f=0;
        for(k=1;k<=1023;k++){
            for(i=0;i<n;i++){
                b[i]=a[i]^k;
            }
            sort(b,b+n);
            for(i=0;i<n;i++){
                if(b[i]!=a[i]) break;
            }
            if(i==n){f=1;break;}
        }
        if(f) cout<<k<<endl;
        else cout<<-1<<endl;
    }
    return 0;
}

C. Johnny and Another Rating Drop(數學)

這個題的解決思路需要看每一位上的貢獻,也就是說

0000

0001

0010

0011

0100

最右邊的一位貢獻是n ,再向左一步,貢獻值變成了n/2,以此類推        

//#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
#include <string>
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0);// cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int N=1000+5;

    int n,m,t;
    int i,j,k;

int32_t main()
{
    IOS;
    rush(){
        ll n; cin>>n;
        ll ans=0,cur=n;
        while(cur){
            ans+=cur;
            cur>>=1;
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

 D. Johnny and Contribution

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章