| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| Valera and Tubes | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-23 20:34:34 | 字母打错(0) |
在n*m的格子里放置k条管子,必需保证管子覆盖到每一个格子,且两条不同的管子不相邻,每条管子至少覆盖两个格子。
如果k=1,容易得到S型的管子:
1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13
而k>1其实只要再去分割这个序列为k段即可,所以最简单的可以分个长度为2的,剩下分一段即可。
| 441C.cpp代码已折叠
展开折叠内容
|
|---|
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<queue>
#include<vector>
using namespace std;
#define f(i,n) for(int i=1;i<=n;++i)
#define fi(i,t,n)for(int i=t;i<=n;++i)
#define fd(i,n) for(int i=n;i>=1;--i)
#define fdi(i,t,n) for(int i=n;i>=t;--i)
#define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
#define rforeach(i,s) for(typeof(s.rbegin()) i=s.rbegin();i!=s.rend();++i)
#define si(n) scanf("%d",&n)
#define dsi(n) int n;scanf("%d",&n)
#define llu unsigned long long
#define lld long long
#define ci const int &
int a[100010],t=0,z=1,n,m,k;
void save(int x,int y)
{
++t;
if(t%2==1)
{
if(t==1)
{
if(k!=1)//fixed:第一项特判//
{
cout<<"2 ";
++z;
}
else
{
cout<<n*m<<" ";
z=3;
}
}
else if(z==k)
{
cout<<endl<<n*m-t+1<<" ";
++z;
}
else if(z<k)//fixed:是k不是n//
{
cout<<endl<<"2 ";
++z;
}
}
cout<<x<<' '<<y<<' ';
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;++i)
if(i&1)
for(int j=1;j<=m;++j)
save(i,j);
else
for(int j=m;j>=1;--j)
save(i,j);
return 0;
}
|