您的当前位置:首页正文

Atcoder(Crossing)

来源:华佗小知识
image.png
按照如下构造方式即可得到最终答案。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> a[1010];

int main(){
    scanf("%d",&n);
    int t = sqrt(2*n+0.5);
    if(t*(t+1)==2*n){
        printf("Yes\n%d\n",t+1);
        int cnt = 1;
        for(int i=1;i<=t;i++){
            for(int j=1;j<=i;j++){
                a[i].push_back(cnt);
                if(j==i)a[t+1].push_back(cnt);
                else
                a[j].push_back(cnt);
                cnt++;
            }
        }
        for(int i=1;i<=t+1;i++){
            printf("%d",t);
            for(int j=0;j<a[i].size();j++){
                printf(" %d",a[i][j]);
            }
            printf("\n");
        }
    }
    else printf("No\n");
}