随笔 - 164  文章 - 0  评论 - 4  阅读 - 9771

2023CCPC网络赛 - E(dfs)

cf传送门

E. Robot Experiment

每次操作,每个位置只有三种情况:可走可不走,必须走,不能走
dfs 每次操作模拟过程统计答案即可,模拟过程类似八皇后问题

//>>>Qiansui
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x, y, sizeof(x))
#define debug(x) cout << #x << " = " << x << '\n'
#define debug2(x,y) cout << #x << " = " << x << " " << #y << " = "<< y << '\n'
//#define int long long
using namespace std;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<double, double> pdd;
/*
*/
const int maxm = 2e5 + 5, inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f, mod = 998244353;
int n;
string ss;
map<pii, int> q;
set<pii> ans;
void dfs(int id, int x, int y){
if(id == n){
ans.insert({x, y});
return ;
}
int dx = 0, dy = 0;
if(ss[id] == 'L') -- dx;
else if(ss[id] == 'R') ++ dx;
else if(ss[id] == 'U') ++ dy;
else -- dy;
if(q[{x + dx, y + dy}] == 0){
q[{x + dx, y + dy}] = 1;
dfs(id + 1, x + dx, y + dy);
q[{x + dx, y + dy}] = -1;
dfs(id + 1, x, y);
q[{x + dx, y + dy}] = 0;// 记得清空!!!
}else if(q[{x + dx, y + dy}] == -1)
dfs(id + 1, x, y);
else dfs(id + 1, x + dx, y + dy);
return ;
}
void solve(){
cin >> n >> ss;
q[{0, 0}] = 1;
dfs(0, 0, 0);
cout << ans.size() << '\n';
for(auto [x, y] : ans){
cout << x << ' ' << y << '\n';
}
return ;
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int _ = 1;
// cin >> _;
while(_ --){
solve();
}
return 0;
}
posted on   Qiansui  阅读(339)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示