【交互题】
【交互题】
输入 的数据是 根据输出的数据决定 的
语法格式
-
【推荐使用】若使用
scanfprintf:
在每次输出后加一句fflush(stdout) -
若使用
cincout:
在#define endl '\n'的情况下
不要关闭同步流!
在每次输出后加一句fflush(stdout)
常见方法
【题目积累】
【构造】Snake
https://qoj.ac/contest/3588/problem/17759
贪吃蛇结论
题目大意
贪吃蛇规则,每次给出目标点,要到达目标点吃掉果子
执行\(n \times m-1\)次
思路

代码
注意(1,1)和(2,2)的处理
int n,m,stx,sty;
void solve(){
cin>>n>>m>>stx>>sty;
vector<vector<char>> s(n+1,vector<char>(m+1,'%'));
//int cnt=0;
int mode=0;
auto query=[&](int sx,int sy,int mx,int my,bool isji)->void{
int nx=sx,ny=sy;
string ans;
if(isji && mx==1 && my==1){
if(sx==2 && sy==2){
ans+='U';
nx--;
}
s[2][1]='U';
s[2][2]='R';
s[2][2]='%';
}
if(isji && mx==2 && my==2){
if(sx==1 && sy==1){
ans+='R';
ny++;
}
s[2][1]='R';
s[2][2]='U';
s[1][1]='%';
}
while(nx!=mx || ny!=my){
if(s[nx][ny]=='U'){
ans+='U';
nx--;
}
else if(s[nx][ny]=='D'){
ans+='D';
nx++;
}
else if(s[nx][ny]=='L'){
ans+='L';
ny--;
}
else{
ans+='R';
ny++;
}
}
cout<<ans<<endl;
cout.flush();
};
if(n%2==0 || m%2==0){
if(n%2==0){//n偶数
for(int i=1;i<=n;i++){
s[i][1]='D';
}
s[n][1]='R';
for(int i=1;i<=n;i+=2){
for(int j=3;j<=m;j++){
s[i][j]='L';
}
}
for(int i=2;i<=n;i+=2){
for(int j=2;j<=m-1;j++){
s[i][j]='R';
}
}
for(int i=2;i<=n;i++){
if(i%2==0){
s[i][m]='U';
}
else{
s[i][2]='U';
}
}
if(m>=2) s[1][2]='L';
}
else{
for(int i=1;i<=m;i++){
s[1][i]='R';
}
s[1][m]='D';
for(int i=1;i<=m;i+=2){
for(int j=3;j<=n;j++){
s[j][i]='U';
}
}
for(int i=2;i<=m;i+=2){
for(int j=2;j<=n-1;j++){
s[j][i]='D';
}
}
for(int i=2;i<=m;i++){
if(i%2==0){
s[n][i]='L';
}
else{
s[2][i]='L';
}
}
if(n>=2)s[2][1]='U';
}
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<s[i][j];
}
cout<<endl;
}
*/
//查询
for(int i=1;i<n*m;i++){
int xx,yy;
cin>>xx>>yy;
query(stx,sty,xx,yy,0);
stx=xx;sty=yy;
}
}
else{//奇数换路跑两次
for(int i=n;i>=2;i--){
s[i][1]='U';
}
if(n>=2) s[2][1]='R';
if(n>=2 && m>=2) s[2][2]='U';
for(int i=2;i<=m-1;i++){
if(i%2==0){
s[1][i]='R';
}
else{
s[2][i]='R';
}
}
for(int i=3;i<=m-1;i++){
if(i%2==1){
s[1][i]='D';
}
else{
s[2][i]='U';
}
}
s[1][m]='D';
if(n>=2) s[2][m]='D';
for(int i=3;i<=n;i+=2){
for(int j=3;j<=m;j++){
s[i][j]='L';
}
}
for(int i=4;i<=n;i+=2){
for(int j=2;j<=m-1;j++){
s[i][j]='R';
}
}
for(int i=3;i<=n;i++){
if(i%2==1){
s[i][2]='D';
}
else{
s[i][m]='D';
}
}
if(m>=2) s[n][2]='L';
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<s[i][j];
}
cout<<endl;
}
*/
for(int i=1;i<n*m;i++){
int xx,yy;
cin>>xx>>yy;
query(stx,sty,xx,yy,1);
stx=xx;sty=yy;
}
}
}

浙公网安备 33010602011771号