A.Counterexample
暴力
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int gcd(ll a,ll b)
{
if (b==0) return a;
return gcd(b,a%b);
}
int main()
{
ll l,r;
scanf("%I64d%I64d",&l,&r);
for (ll i=l;i<=r;i++){
for (ll j=i+1;j<=r;j++){
for (ll s=j+1;s<=r;s++){
if (gcd(i,j)==1&&gcd(j,s)==1&&gcd(i,s)!=1){
printf("%I64d %I64d %I64d\n",i,j,s);
return 0;
}
}
}
}
printf("-1\n");
return 0;
}
B. Friends and Presents
二分
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 3000000005
ll cnt1,cnt2,x,y,z;
ll gcd(ll a,ll b)
{
if (b==0) return a;
return gcd(b,a%b);
}
int ok(ll s)
{
ll a=s/x;
ll b=s/y;
ll c=s/z;
ll t1=max(cnt1-b+c,(ll)0);
ll t2=max(cnt2-a+c,(ll)0);
ll cnt3=t1+t2;
if ((s-(a+b-c))>=cnt3) return 1;
else return 0;
}
ll findd(ll s)
{
ll l=1,r=s;
while(l<r){
ll mid=(l+r)/2;
if (ok(mid)){
r=mid;
} else l=mid+1;
}
return r;
}
int main()
{
scanf("%I64d%I64d%I64d%I64d",&cnt1,&cnt2,&x,&y);
z=(x/gcd(x,y))*y;
printf("%I64d\n",findd(maxn));
return 0;
}
C.Counterexample
构造
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
stack<int>sta;
int aa=k+1,b=1;
for (int i=1;i<=k+1;i++)
{
if (i&1) sta.push(aa--);
else sta.push(b++);
}
while(sta.size()){
if (sta.size()!=k+1) printf(" ");
printf("%d",sta.top());
sta.pop();
}
for (int i=k+2;i<=n;i++){
printf(" %d",i);
}
return 0;
}