A. Counterexample
题意:给出l,r,找出使得满足l<a<b<c<r,同时满足a,b的最大公约数为1,b,c的最大公约数为1,且a,b的最大公约数不为1
因为题目里说了l-r<=50,所以可以直接枚举
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std; typedef long long LL; LL gcd(LL n,LL m){
return m==? n:gcd(m,n%m);
} int main()
{
LL a,b,c,l,r;
cin>>l>>r;
for(a=l;a<=r;a++){
for(b=a+;b<=r;b++){
for(c=b+;c<=r;c++){
if(gcd(a,b)==&&gcd(b,c)==&&gcd(a,c)!=){
cout<<a<<' '<<b<<' '<<c<<"\n";
return ;
}
}
}
}
printf("-1\n");
}
C. Diverse Permutation
题意:给出n,原始的排列即为1 2 3 4 5 -----n,再给出k,使得新的排列中满足 |p1-p2|,|p2-p3|,..,|pn-1-pn|只有x个不相同
因为只有x个不相同,所以有n-x个是相同的,先按照自然数的序列放前n-x个数 然后剩下的x个数则交替放置,
自己先搜题解的时候,发现一个用hash写的,实在不懂,去翻了第二个提交的代码,发现这样做,更简单
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std; typedef long long LL; int main()
{
int n,x,i=,l,r;
cin>>n>>x;
for(i=;i<=n-x;i++) printf("%d ",i);
r=n;
l=n-x+;
// printf("l=%d\n",l);
for(i=;i<=x;i++)
{
if(i%) printf("%d ",r),r--;
else printf("%d ",l),l++;
}
return ;
}
这次做= =做了半小时就不想再做下去了= =连A的题意都不是很懂(数论做得太少太少拉)B现在还不太明白,C想到了也好理解= =可是当时想的是老老实实枚举,得枚到啥时候----哎----
加油啊--go---go--go
B再补吧= =