cf1487
edu真不是个东西
A:arena
可以逮着一个人薅到死,所以除了最小的那个都可以。
B:cat cycle
找规律,如果n是偶数不会相遇,就是k步。
如果是奇数,第一步不考虑,然后每隔(n-3)/2跳一次,相当于多走一步
per(){
ll n,k;
cin>>n>>k;
if(n%2==0){
cout<<(k%n==0? n:k%n)<<endl;
}else{
int d=(n-3)/2;
ll tmp=(k-1)/(d+1);
k+=tmp;
cout<<(k%n==0? n:k%n)<<endl;
}
}
C
将所有球队排成一环,一圈可以直接连。
奇数的可以全连上,偶数的对角不连
在n*n的矩阵中,取不含主对角线的上三角,若奇数,上半-1下半1,偶数中间插个0.
const int maxn=1e4+100;
int ans[maxn];
int main()
{
std::ios::sync_with_stdio(false);std::cin.tie(0);
per(){
int n;cin>>n;
if(n==2){
cout<<0<<endl;
}else if(n==3){
cout<<1<<' '<<-1<<' '<<1<<endl;
}else if(n==4){
cout<<"1 0 -1 1 0 1"<<endl;
}else{
int ed=n*(n-1)/2;
if(n%2==1){
int tot=0;
int tr=(n-1)/2;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j){
if(j-i<=tr){
ans[++tot]=1;
}else{
ans[++tot]=-1;
}
}
}else{
int tot=0;
int tr=n/2;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j){
if(j-i<tr){
ans[++tot]=1;
}else if(j-i==tr){
ans[++tot]=0;
}else {
ans[++tot]=-1;
}
}
}
for(int i=1;i<=ed;++i){
cout<<ans[i]<<' ';
}cout<<endl;
}
}
}
D
化出 c − b = 1 c-b=1 c−b=1,故三个数最大的是 c = b + 1 c=b+1 c=b+1,则 b + 1 < = n b+1<=n b+1<=n进而化出 a 2 < = 2 n − 1 a^2<=2n-1 a2<=2n−1,则可以直接求出最大的a,而2~a中所有奇数都行,即 ( a − 1 ) / 2 (a-1)/2 (a−1)/2
per(){
int n;cin>>n;
int ed=(int)sqrt(2*n-1)-1;
cout<<ed/2<<endl;
}