1327C

题目大意:一个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;
}
原文地址:https://www.cnblogs.com/Accepting/p/12674982.html