[Daily] 20200813
5508 ワード
文書ディレクトリ C題[Codeforces 125C] Hobbits' Party
C題[Codeforces 125C] Hobbits’ Party
タイトルリンク
考え方:2つの要求があります:1人は最大2日招待されて、任意の2日はきっと同じ人が招待されます.だから最良の案はきっと任意の2日間招待された人の中で、一人だけが同じだ.すなわち、任意の2日間に1人を消費し、k日間にk*(k-1)/2人を消費すると、最大日数kはn>=k*(k-1)/2を満たす最大のkであるべきである.kが得られた後,任意の2日間で1人を消費する過程をk 2列挙し,結果シーケンスを得た.
C題[Codeforces 125C] Hobbits’ Party
タイトルリンク
考え方:2つの要求があります:1人は最大2日招待されて、任意の2日はきっと同じ人が招待されます.だから最良の案はきっと任意の2日間招待された人の中で、一人だけが同じだ.すなわち、任意の2日間に1人を消費し、k日間にk*(k-1)/2人を消費すると、最大日数kはn>=k*(k-1)/2を満たす最大のkであるべきである.kが得られた後,任意の2日間で1人を消費する過程をk 2列挙し,結果シーケンスを得た.
//AC
#include
using namespace std;
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
int n,k,cnt;
vector<int>ans[1000];
int main(){
cin>>n;
for(int i=2;i<=n;i++)
if(n>=i*(i-1)/2)k=i;else break;
cout<<k<<endl;
for(int i=1;i<=k;i++)
for(int j=i+1;j<=k;j++){
ans[i].push_back(++cnt);
ans[j].push_back(cnt);
}
for(int i=1;i<=k;i++){
for(auto j:ans[i])printf("%d ",j);
puts("");
}
}