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