• 题意
    • 给m个点,序号1~m,问多大的n*n方格能使得所有的点i,j都满足 |rirj|+|cicj||ij|,即曼哈顿距离大等于下标距离
  • 题解
    • 容易想到左上和右下的曼哈顿距离大概率是能容下的下标差
    • 我们选择在第i行从第i个位置放入两个点,满足题意
  • 代码
    • //#include<bits/stdc++.h>
      #include<iostream>
      #include<cstdio>
      #include<cstring>
      #include<string>
      #include<set>
      #include<vector>
      #include<map>
      #include<stack>
      #include<queue>
      #include<cmath>
      #include<fstream>
      #include<algorithm>
      using namespace std;
      
      #define rep(i,a,n) for(int i=a;i<=n;i++)
      #define per(i,a,n) for(int i=n;i>=a;i--)
      //#define CLR(a) memset(a,sizeof(a),0)
      
      typedef long long ll;
      typedef unsigned long long ull;
      
      const int INF = 0x3f3f3f3f;
      const int maxn=1e6+10;
      
      
      int main(){
          int n,m;
          scanf("%d", &n);
          rep(i,1,n){
              if(i*2-1>=n){
                  m=i;
                  break;
              }
          }
          printf("%d ", m);
          rep(i,1,m){
             rep(j,i,i+1){
                  if(n>0){
                      --n;
                      printf("%d %d ",i,j);
                  }else{
                      break;
                  }
             }
             if(n<=0)break;
          }
          return 0;
      }

发表评论

邮箱地址不会被公开。 必填项已用*标注