cf1487

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;
  }
上一篇:2021-08-01


下一篇:数位dpの学习笔记