性❤感❤树状❤数组❤在线求调
查看原帖
性❤感❤树状❤数组❤在线求调
809765
Limitless_lmw楼主2024/9/25 17:54

RT

#include <bits/stdc++.h>
using namespace std;

#define lowbit(x) (x&(-x))

int a[53][2000005];
char M[505][505];
int n,m,q,k;

void add(int pos,int p,int v){
    while(p<=q+1) a[pos][p]+=v,p+=lowbit(p);
}

int pre(int pos,int p){
    if(!p) return 0;
    int s=0;
    for(;p;p-=lowbit(p)) s+=a[pos][p];
    return s;
}

void read_(int &x){
	x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while('0'<=ch&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return ;
}

int sx=1,sy=1;

int main(){
	read_(n),read_(m),read_(q),read_(k);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>M[i][j];
//	puts("Genshin Impact");
	for(int i = 1; i<=q; i++){
		char c;
		int x,y;
		cin>>c>>x>>y;
		if(pre(i%k,i/k+1)%2==0){
			if(c=='U') c='D';
			if(c=='D') c='U';
			if(c=='L') c='R';
			if(c=='R') c='L';
		}
		if(c=='U'){
			sx=max(1,sx-x);
		}if(c=='D'){
			sx=min(n,sx+x);
		}if(c=='L'){
			sy=min(m,sy+x);
		}if(c=='R'){
			sy=max(1,sy-x);
		}
		if(M[sx][sy]=='X'){
			add(i%k,i/k+2,1);
			add(i%k,i/k+y+2,-1);
		}
	}
	cout<<sx<<" "<<sy;
	return 0;
}
2024/9/25 17:54
加载中...