-
20230805 업다운 랜디Study/PS 2023. 8. 5. 20:19
s#100.. !solved_by:p_jun *g5
30분 3문제
G5 16925 문자열 추측 + 22분 19초
내가 너무 싫어하는 구현, 문자열 문제
접미사와 접두사 S, P 인걸 반대로 출력해 시간을 너무 날렸다
맞왜틀로 시간만 태웠다
그냥 나온대로 구현하면 된다
더보기#include <iostream> #include <iomanip> #include <algorithm> #include <vector> #include <string> #include <cstring> #include <stack> #include <queue> #include <deque> #include<set> #include<map> #include<cassert> using namespace std; using ll = long long; #define MOD 1000000007 const ll INF = 987654321; const int MX = 500005; int n; vector<pair<string, int>> v; int is_p(string a, string b) { for (int i = 0; i < a.length(); i++) { if (b[i] != a[i]) return 0; } return 1; } int is_s(string a, string b) { for (int i = 0; i < a.length(); i++) { if (b[b.length() - i - 1] != a[a.length() - i - 1]) return 0; } return 1; } void sol(string s) { string ans = ""; ans.resize(n * 2 - 2); for (int i = 0; i < n * 2 - 2; i += 2) { if (is_p(v[i].first, s) && is_s(v[i + 1].first, s)) { ans[v[i].second] = 'P'; ans[v[i + 1].second] = 'S'; } else if (is_s(v[i].first, s) && is_p(v[i + 1].first, s)) { ans[v[i].second] = 'S'; ans[v[i + 1].second] = 'P'; } else return; } cout << s << '\n'; cout << ans << '\n'; exit(0); } bool cmp(pair<string, int>& a, pair<string, int>& b) { return a.first.length() < b.first.length(); } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n; v.resize(n * 2 - 2); for (int i = 0; i < n * 2 - 2; i++) { cin >> v[i].first; v[i].second = i; } sort(v.begin(), v.end(), cmp); string tmp1 = v[2 * n - 3].first, tmp2 = v[2 * n - 4].first; string str1 = tmp1 + tmp2.back(), str2 = tmp2 + tmp1.back(); sol(str1); sol(str2); }
S1 20167 꿈틀꿈틀 호석 애벌레 - 기능성 -12분 22초
그냥 문제 지문이 뭔가 이상하다
다 소화시키면 연속으로 못 먹는 줄 알고 시간을 날렸다
구현 좀 더 이쁘게 가능할거 같은데 귀찮으니 패스
더보기#include <iostream> #include <iomanip> #include <algorithm> #include <vector> #include <string> #include <cstring> #include <stack> #include <queue> #include <deque> #include<set> #include<map> #include<cassert> using namespace std; using ll = long long; #define MOD 1000000007 const ll INF = 987654321; const int MX = 500005; int n, k; vector<int> v; int sol(int pos, int b, int f) { if (pos == n) return max(0, b - k); if (f == 1) { b += v[pos]; if (b >= k) return b - k + sol(pos + 1, 0, 2); return sol(pos + 1, b, 1); } int ret = 0; if (v[pos] >= k) return max(sol(pos + 1, 0, 0) + v[pos] - k, sol(pos + 1, b, 0)); return max(sol(pos + 1, b + v[pos], 1), sol(pos + 1, b, 0)); } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> k; v.resize(n); for (int i = 0; i < n; i++) cin >> v[i]; cout << sol(0, 0, 0) << '\n'; }
G5 9011 순서 -21분 27초
그냥 보고 이거네 하고 풀었다
더보기#include <iostream> #include <iomanip> #include <algorithm> #include <vector> #include <string> #include <cstring> #include <stack> #include <queue> #include <deque> #include<set> #include<map> #include<cassert> using namespace std; using ll = long long; #define MOD 1000000007 const ll INF = 987654321; const int MX = 500005; void sol() { int n; cin >> n; vector<int> v(n); vector<int> p(n + 1); for (int i = 0; i < n; i++) cin >> v[i]; reverse(v.begin(), v.end()); vector<int> ans(n); for (int i = 0; i < n; i++) { int cnt = 0; int num = 0; for (int j = 0; j < n; j++) { if (cnt == v[i]) { for (int k = j; k < n; k++) { if (p[k + 1]) continue; num = k + 1; break; } break; } if (!p[j + 1]) cnt++; } p[num] = 1; if (!num) { cout << "IMPOSSIBLE" << '\n'; return; } ans[n - 1 - i] = num; } for (int i = 0; i < n; i++) cout << ans[i] << " "; cout << '\n'; } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int tc; cin >> tc; while (tc--) sol(); }
'Study > PS' 카테고리의 다른 글
20230811 업다운 랜디 (2) 2023.08.11 20230808 업다운 랜디 (0) 2023.08.09 20230807 업다운 랜디 (2) 2023.08.07 20230806 업다운 랜디 (0) 2023.08.06