2023CCPC网络赛 - E(dfs)
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; }
本文来自博客园,作者:Qiansui,转载请注明原文链接:https://www.cnblogs.com/Qiansui/p/17744118.html
分类:
oj - Codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!