题解:B4532 [信息与未来 2026] 折纸
题意简述
对一张
题目分析
由于
我们考虑维护一个布尔变量
先考虑
if(s[i]=='D'){
if(a)c+=1<<i;
else{
a=1;
c=(1<<i)-c+1;
}
}
其它三种情况同理,由对称性,我们可以写个函数来减少码量:
void f(bool&x,bool y){
if(x==y)l+=1<<i;
else{
x=y;
l=(1<<i)-l+1;
}
}
然后再看第二问:注意到正反面只与 "UD"[a^b]。
代码
#include<bits/stdc++.h>
using namespace std;
int n,i,l=1;
bool a,b;
char c;
void f(bool&x,bool y){
if(x==y)l+=1<<i;
else{
x=y;
l=(1<<i)-l+1;
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n;
for(i=0;i<2*n;i++){
cin>>c;
if(c=='D')f(a,1);
if(c=='U')f(a,0);
if(c=='R')f(b,1);
if(c=='L')f(b,0);
}
cout<<l<<' '<<"UD"[a^b];
}