1. 题目
2. 题解
额。。。
要是我 NOIP2017 有这运气就好了。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,ans;
stack<int> st[60];
bool ispow(int a)
{
int sq=sqrt(a);
return sq*sq==a;
}
int main()
{
scanf("%d",&n);
for(ans=1;1;ans++)
{
bool flag=0;
for(int j=1;j<=n;j++)if(flag=(st[j].empty()||ispow(st[j].top()+ans)))
{st[j].push(ans);break;}
if(!flag)break;
}
printf("%d\n",ans-1);
for(int i=1;i<=n;i++,putchar('\n'))
while(!st[i].empty())printf("%d ",st[i].top()),st[i].pop();
return 0;
}
0 条评论