Johnny and Ancient Computer CodeForces - 1362A
思路:因为除或者乘的都是2的幂次,所以看看二者的商是不是2的幂次就可以了。如果是的话,就3,2,1依次就行;否则就是-1.
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll x,y;
inline int fcs(ll n)
{
int ans=0;
if(n==1) return 0;
while(n>1)
{
if(n&1) return -1;
ans++;
n/=2ll;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&x,&y);
if(x<y) swap(x,y);
if(x%y) cout<<-1<<endl;
else
{
int num=fcs(x/y);
int ans=0;
ans+=(num/3);
num-=(num/3)*3;
ans+=(num/2);
num-=(num/2)*2;
ans+=num;
cout<<ans<<endl;
}
}
return 0;
}
Johnny and His Hobbies CodeForces - 1362B
思路:暴力就行。注意所有的元素都一样的情况,这样直接输出-1就行。
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=1e3+100;
int a[maxx];
int n;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
set<int> s;
for(int i=1;i<=n;i++) scanf("%d",&a[i]),s.insert(a[i]);
int _max=*s.rbegin();
if(*s.begin()==*s.rbegin())
{
cout<<-1<<endl;
continue;
}
set<int> s1;
int flag=0;
for(int i=1;i<=_max+_max;i++)
{
s1.clear();
for(int j=1;j<=n;j++) s1.insert(i^a[j]);
if(s==s1)
{
flag=1;
cout<<i<<endl;
break;
}
}
if(!flag) cout<<-1<<endl;
}
return 0;
}
努力加油a啊,(o)/~