A: Exciting Bets
abs(a-b)必然是可取最大公约数的最大值,因为对于任何两个数a-p,b-p (a>=p&&b>=p) 假设k=__gcd(a-p,b-p) 则(a-p)%k=0&&(b-p)%k=0。设a=n1k+p,b=n2*k+p
所以b-a=n2k-n1k=k*(n2-n1)(n1!=n2) 因为n2-n1>=1,所以当n2-n1==1时k取最大值abs(b-a).
从下往上找0 ,k /k, 2k/ … /nk,(n+1)k/…可知只需满足a,b 的最小值关于k的系数在k与min(a,b)的向下取整与向上取整之间
即 k/aa<=a<=(k+a-1)/aa 所以答案为min(a-k/aa,(k+a-1)/aa-a)
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define pb push_back
#define re register
using namespace std;
using ll = long long ;
const int N = 1e5+10;
string yes="Yes\n",no="No\n";
//#define _IO_
void solve()
{
ll a,b;
cin>>a>>b;
if(a==b){
cout<<"0 0\n";
return ;
}
ll n=abs(a-b);
if(a>b)swap(a,b);
cout<<abs(a-b)<<" "<<min((a+n-1)/n*n-a,(a-a/n*n))<<"\n";
}
int32_t main(int argc,char *argv[])
{
#ifdef _IO_
freopen("in.txt","r",stdin);
time_t time;
#endif // _IO_
ios_base::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--)
solve();
#ifdef _IO_
time=clock();
cout<<time/1.0<<"ms\n";
#endif // _IO_
return 0;
}
B:Customising the Track
把所有数平均分配即可
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define pb push_back
#define re register
using namespace std;
using ll = long long ;
const int N = 2e5+10;
string yes="Yes\n",no="No\n";
//#define _IO_
ll a[N];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
ll ans=0;
for(int i=1;i<=n;i++)
ans+=a[i];
ll u=ans-ans/n*n;
cout<<u*(n-u)<<"\n";
}
int32_t main(int argc,char *argv[])
{
#ifdef _IO_
freopen("in.txt","r",stdin);
time_t time;
#endif // _IO_
ios_base::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--)
solve();
#ifdef _IO_
time=clock();
cout<<time/1.0<<"ms\n";
#endif // _IO_
return 0;
}
D1:RPD and Rap Sheet (Easy Version)
从0到n-1之间输出i^(max(i-1,0))直到输入x=1为止
保证答案不会改变利用异或消去的性质只需要把上一次输入错误的答案还原所以还需^(i-1)
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define pb push_back
#define re register
using namespace std;
using ll = long long ;
const int N = 2e5+10;
string yes="Yes\n",no="No\n";
//#define _IO_
void solve()
{
int n,k;
cin>>n>>k;
int ans=0;
for(int i=0;i<n;i++){
cout<<(ans^i)<<endl;
int x;cin>>x;
if(x)break;
ans=i;
}
}
int32_t main(int argc,char *argv[])
{
#ifdef _IO_
freopen("in.txt","r",stdin);
time_t time;
#endif // _IO_
//ios_base::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--)
solve();
#ifdef _IO_
time=clock();
cout<<time/1.0<<"ms\n";
#endif // _IO_
return 0;
}