3 条题解
-
1
#include <iostream> #include <vector> #include <stack> using namespace std; vector<string> result; int count = 0; void dfs(int n, int index, stack<int>& s, vector<int>& path) { if (count >= 20) return; if (path.size() == n) { string res; for (int num : path) res += to_string(num); result.push_back(res); count++; return; } if (!s.empty()) { int temp = s.top(); s.pop(); path.push_back(temp); dfs(n, index, s, path); path.pop_back(); s.push(temp); } if (index <= n) { s.push(index); dfs(n, index + 1, s, path); s.pop(); } } int main() { int n; cin >> n; stack<int> s; vector<int> path; dfs(n, 1, s, path); for (const auto& res : result) { cout << res << endl; } return 0; }
-
-3
#include #include #include #include #include
using namespace std;
#define INF 0x3f3f3f3f const int maxn = 1e6 + 7; stacks1,s2; int f[maxn],sum[maxn]; int main() { int Q;scanf("%d",&Q); sum[0] = 0; int cnt = 0; memset(f,-INF,sizeof(f)); while(Q--) { char op[10];int n; scanf("%s",op); if(op[0] == 'I') { cnt++; scanf("%d",&n); sum[cnt] = sum[cnt - 1] + n; f[cnt] = max(f[cnt - 1],sum[cnt]); s1.push(n); } else if(op[0] == 'D') { if(!s1.empty()) { cnt--; s1.pop(); } } else if(op[0] == 'L') { if(!s1.empty()) { cnt--; int tmp = s1.top(); s2.push(tmp); s1.pop(); } } else if(op[0] == 'R') { if(!s2.empty()) { cnt++; int tmp = s2.top(); sum[cnt] = sum[cnt - 1] + tmp; f[cnt] = max(f[cnt - 1],sum[cnt]); s1.push(tmp); s2.pop(); } } else if(op[0] == 'Q') { scanf("%d",&n); printf("%d\n",f[n]); } } return 0; }
-
-4
#include #include #include #include #include
using namespace std;
#define INF 0x3f3f3f3f const int maxn = 1e6 + 7; stacks1,s2; int f[maxn],sum[maxn]; int main() { int Q;scanf("%d",&Q); sum[0] = 0; int cnt = 0; memset(f,-INF,sizeof(f)); while(Q--) { char op[10];int n; scanf("%s",op); if(op[0] == 'I') { cnt++; scanf("%d",&n); sum[cnt] = sum[cnt - 1] + n; f[cnt] = max(f[cnt - 1],sum[cnt]); s1.push(n); } else if(op[0] == 'D') { if(!s1.empty()) { cnt--; s1.pop(); } } else if(op[0] == 'L') { if(!s1.empty()) { cnt--; int tmp = s1.top(); s2.push(tmp); s1.pop(); } } else if(op[0] == 'R') { if(!s2.empty()) { cnt++; int tmp = s2.top(); sum[cnt] = sum[cnt - 1] + tmp; f[cnt] = max(f[cnt - 1],sum[cnt]); s1.push(tmp); s2.pop(); } } else if(op[0] == 'Q') { scanf("%d",&n); printf("%d\n",f[n]); } } return 0; }
- 1
信息
- ID
- 40
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 103
- 已通过
- 50
- 上传者