[非题解]Codeforces Round #454 (Div. 2) D. Seating of Students
来源:互联网 发布:单片机体温计课程设计 编辑:程序博客网 时间:2024/05/30 04:44
这题是错的…虽然不知道哪里错了,还是贴下来吧…
#include <iostream>#include <queue>using namespace std;queue<int> outp[100000];void solve(int n,int m){ int tem,i,j; for(i=1;i<=n;i++){ tem=(i-1)*m+1; if(i&1)tem+=!(tem&1); else tem+=(tem&1); for(j=1;j<=m;j++){ outp[i].push(tem);tem+=2; if(j==(m+1)/2){ tem=(i-1)*m+1; if(i&1)tem+=tem&1; else tem+=!(tem&1); } } }}void prt(int m,int n){ int i,j; if(n<=m){ for(i=1;i<=n;i++){ while(!outp[i].empty())cout<<outp[i].front()<<" ",outp[i].pop(); if(i!=n)cout<<endl; } }else{ while(!outp[1].empty()){ for(i=1;i<=m;i++){ cout<<outp[i].front()<<" ",outp[i].pop(); } if(!outp[1].empty())cout<<endl; } }}int main(){ std::ios::sync_with_stdio(false); int n,m,i,j,num=-1,mn,flag=1; cin>>n>>m;mn=m*n; if(1<mn&&mn<9&&m<=3&&n<=3)cout<<"NO"; else { cout<<"YES"<<endl; if(m==1&&n==1)cout<<"1"; else if(m==2&&n==4)cout<<"2 3"<<endl<<"7 6"<<endl<<"4 1"<<endl<<"5 8"; else if(m==4&&n==2)cout<<"5 4 7 2"<<endl<<"3 6 1 8"; else if(m==3&&n==3)cout<<"6 1 8"<<endl<<"7 5 3"<<endl<<"2 9 4"; else if(m==1&&n==4)cout<<"2\n4\n1\n3"; else if(m==4&&n==1)cout<<"2 4 1 3"; else{ if(m<n)solve(m,n);else solve(n,m); prt(m,n); } }}
阅读全文