题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
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; } |