题目传送门:http://codeforces.com/gym/100623/attachments
思路:一道比较简单的思维题吧,要求任一横行学生和任一纵列学生的最小值最大,如果学生人数大于行数和列数最小值*2-1,就输出行数和列数最小值,否则输出(人数+1)/2,很好理解,剩下的学生随便排就行
Code:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
freopen("class.in","r",stdin);
freopen("class.out","w",stdout);
int n,r,c,ans,t;
while(cin>>n>>r>>c)
{
ans=min(r,c);
if(ans*2-1>n)
ans=(n+1)/2;
cout<<ans<<endl;
t=n;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
if(((j==1&&i<=ans)||(i==1&&j<=ans)||(t>ans-i))&&t>0)
{
cout<<"#";
t--;
}
else
cout<<".";
}
cout<<endl;
}
}
return 0;
}
思路: