题目大意:一个n*m的棋盘上有k个棋子,k个棋子相互关联,可以一起向上向下向左向右,当碰到边界时,如果继续移动会发生越界,那么该棋子会保持不动,其余棋子继续移动。问能否在2*n*m的移动次数内,使各个棋子到达其约定的位置。
题解:将所有的棋子汇集于一点,然后蛇形遍历棋盘复杂度为n*m+n+m-3。(这种方法想到了,复杂度计算错了...然后直接就pass掉了QWQ)
code:
#include<bits/stdc++.h> using namespace std; const int N=300; int arr[N][N]; int k; int stx[N],sty[N]; int endx[N],endy[N]; int main(){ int n,m,k; cin>>n>>m>>k; for(int i=1;i<=k;i++) cin>>stx[i]>>sty[i]; for(int i=1;i<=k;i++) cin>>endx[i]>>endy[i]; string s=""; for(int i=m-1;i>=1;i--) s+='L'; for(int i=n-1;i>=1;i--) s+='U'; for(int i=1;i<=m;i++){ for(int j=1;j<=n-1;j++){ s+=((i&1)? 'D':'U'); } if(i!=m) s+='R'; } cout<<s.size()<<endl; cout<<s<<endl; return 0; }