3 条题解

  • 0
    @ 2026-2-1 10:23:13
    #include<bits/stdc++.h>
    using namespace std;
    struct nd{int x,y;};
    map<int,nd>a;
    int main()
    {
    	int n,q;scanf("%d%d",&n,&q);
    	for(int i=1;i<=n;i++)a[i]={n-i+1,0};
    	int l=n;
    	while(q--)
    	{
    		int op,p;char c;scanf("%d",&op);
    		if(op==1)
    		{
    			a[l+1]=a[l];l++;
    			cin>>c;
    			if(c=='R')a[l].x++;
    			else if(c=='L')a[l].x--;
    			else if(c=='U')a[l].y++;
    			else a[l].y--;
    		}
    		else
    		{
    			scanf("%d",&p);
    			printf("%d %d\n",a[l-p+1].x,a[l-p+1].y);
    		}
    	}
    	return 0;
    }
    
    • -1
      @ 2026-2-1 14:23:38

      注意题目未给数据范围,记得定义足够

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
      	ios::sync_with_stdio(0);
      	cin.tie(0);cout.tie(0);
      	int n,q;cin>>n>>q;
      	int m=n;
      	struct node{int x,y;}loong[n+q+10];
      	//n+q是这个代码最多所用的结构体数量,n个部位,q次移位
      	for(int i=1;i<=n;i++)loong[i]={n-i+1,0};//初始值,存为一条 
      	while(q--)
      	{
      		int a,b;char s;
      		cin>>a;
      		if(a==1)//情况1--移位 
      		{
      			cin>>s;
      			m++;//调整龙头
      			if(s=='R')loong[m]={loong[m-1].x+1,loong[m-1].y}; 
      			else if(s=='L')loong[m]={loong[m-1].x-1,loong[m-1].y};
      			else if(s=='U')loong[m]={loong[m-1].x,loong[m-1].y+1};
      			else loong[m]={loong[m-1].x,loong[m-1].y-1};
      			//题意推导,移动到先前部位的位置,别忘了这个情况要再移动 
      		}
      		else//情况2--输出 
      		{
      			cin>>b;
      			printf("%d %d\n",loong[m-b+1].x,loong[m-b+1].y);
      		}
      	}
      	return 0;
      }
      
      
      • -1
        @ 2026-2-1 10:55:28

        按照题意每种情况即可 注意:不开2e6会RE ,别问我是怎么知道的

        #include<bits/stdc++.h>
        using namespace std;
        const int N=2e6+10;
        struct node{int x,y;}a[N];
        int n,q;
        int main()
        {
        	scanf("%d%d",&n,&q);
        	for(int i=n;i>=1;i--)a[i]={n-i+1,0};
        	int sum1=n;
        	while(q--)
        	{
        		int op;scanf("%d",&op);
        		if(op==1)//情况1 
        		{
        			sum1++;//龙头是第几个结构体 
        			char c[2];scanf("%s",c);
        			if(c[0]=='U')a[sum1]={a[sum1-1].x,a[sum1-1].y+1};//每种方向 
        			else if(c[0]=='D')a[sum1]={a[sum1-1].x,a[sum1-1].y-1};
        			else if(c[0]=='L')a[sum1]={a[sum1-1].x-1,a[sum1-1].y};
        			else if(c[0]=='R')a[sum1]={a[sum1-1].x+1,a[sum1-1].y};
        		}
        		else
        		{
        			int x;scanf("%d",&x);
        			printf("%d %d\n",a[sum1-x+1].x,a[sum1-x+1].y);//输出!!! 
        		}
        	}
        	return 0;//完结撒花 
        }
        
        • 1

        信息

        ID
        8264
        时间
        2000ms
        内存
        1024MiB
        难度
        7
        标签
        递交数
        49
        已通过
        13
        上传者