构造题
最多可以是k的d次方的学生不成为朋友
循环节的长度以k为倍数翻倍
注意long long
#include<iostream> #include<cstdio> #include<cstdlib> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<queue> using namespace std; typedef long long ll; int main() { ll n,m,d,maxx=1; cin>>n>>m>>d; for(int i=0;i<d;i++) { maxx*=m; if(maxx>=n) break; } if(maxx<n) { cout<<-1<<endl; } else { ll cnt=1; for(int i=1;i<=d;i++) { int k; int num=0; for(int j=0;j<n;j++) { for(k=j;k<j+cnt && k<n;k++) { cout<<num%m+1<<" "; } num++; j=k-1; } cnt*=m; if(cnt>n) cnt=n; cout<<endl; } } return 0; }
Codeforces 459C,布布扣,bubuko.com
时间: 2024-12-20 03:26:34