結果
問題 | No.2073 Concon Substrings (Swap Version) |
ユーザー |
![]() |
提出日時 | 2022-09-16 23:17:21 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 18 ms / 2,000 ms |
コード長 | 8,185 bytes |
コンパイル時間 | 2,296 ms |
コンパイル使用メモリ | 219,124 KB |
最終ジャッジ日時 | 2025-02-07 10:37:01 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 37 |
ソースコード
/*** code generated by JHelper* More info: https://github.com/AlexeyDmitriev/JHelper* @author*///@formatter:off#pragma GCC optimize("Ofast")#include <bits/stdc++.h>using namespace std;//@formatter:off#define rep(i, n) for (int i = 0; i < (n); ++i)#define drep(i, n) for (int i = (n)-1; i >= 0; --i)#define srep(i, s, t) for (int i = s; i < t; ++i)#define rng(a) a.begin(), a.end()#define rrng(a) a.rbegin(), a.rend()using ll = long long;using P = pair<ll, ll>;using VI = vector<int>;using VVI = vector<VI>;using VVVI = vector<VVI>;using VVVVI = vector<VVVI>;using VL = vector<ll>;using VVL = vector<VL>;using VVVL = vector<VVL>;using VVVVL = vector<VVVL>;using VP = vector<P>;using VVP = vector<vector<P>>;using VS = vector<string>;using VC = vector<char>;using VVC = vector<vector<char>>;using VD = vector<double>;using VVD = vector<vector<double>>;using VVVD = vector<VVD>;using I_I = pair<int, int>;const int INF = (int)1e9 + 10; // int max > 2*10^9const long long INFL = (ll)2e18 + 10; // ll max > 9*10^18const int JU_5 = 100000;const int JU_6 = 1000000;const ll JU_9 = 1000000000;const ll JU_18 = JU_9*JU_9;#define YES cout << "YES" << endl#define NO cout << "NO" << endl#define Yes cout << "Yes" << endl#define No cout << "No" << endltemplate <typename T, typename C>pair<T,C> operator+(const pair<T,C> &a, const pair<T,C> &b) { return make_pair(a.first + b.first, a.second + b.second); }template <typename T, typename C>pair<T,C> operator-(const pair<T,C> &a, const pair<T,C> &b) { return make_pair(a.first - b.first, a.second - b.second); }template <typename T, typename C>pair<T,C> operator*(const pair<T,C> &a, const pair<T,C> &b) { return make_pair(a.first * b.first, a.second * b.second); }template <typename T, typename C>pair<T,C> operator/(const pair<T,C> &a, const pair<T,C> &b) { return make_pair(a.first / b.first, a.second / b.second); }// #define MOD 1000000007#define MOD 998244353#define pmod(x,y) ((x%y)+y)%y/********** libs **********///@formatter:off// jhelper 用変数ostream *__cout;istream *__cin;void _init_io(std::istream &cin, std::ostream &cout) {// 入出力高速化用ios::sync_with_stdio(false); cin.tie(nullptr);// 少数15桁まで出力cout << std::setprecision(15);// jhelper 用__cout = &cout; __cin = &cin;}//@formatter:off/* デバッグ用 出力 */template<typename T>ostream &operator<<(ostream &os, const deque<T> &vec) { os << "deq["; for (auto v: vec) os << v << ","; os << "]"; return os; }template<typename T>ostream &operator<<(ostream &os, const set<T> &vec) { os << "{"; for (auto v: vec) os << v << ","; os << "}"; return os; }template<typename T>ostream &operator<<(ostream &os, const unordered_set<T> &vec) { os << "{"; for (auto v: vec) os << v << ","; os << "}"; return os; }template<typename T>ostream &operator<<(ostream &os, const multiset<T> &vec) { os << "{"; for (auto v: vec) os << v << ","; os << "}"; return os; }template<typename T>ostream &operator<<(ostream &os, const unordered_multiset<T> &vec) { os << "{"; for (auto v: vec) os << v << ","; os << "}"; return os; }template<typename T1, typename T2>ostream &operator<<(ostream &os, const pair<T1, T2> &pa) { os << "(" << pa.first << "," << pa.second << ")"; return os; }template<typename TK, typename TV>ostream &operator<<(ostream &os, const map<TK, TV> &mp) { os << "{"; for (auto v: mp) os << v.first << "=>" << v.second << ","; os << "}"; return os;}template<typename TK, typename TV>ostream &operator<<(ostream &os, const unordered_map<TK, TV> &mp) { os << "{"; for (auto v: mp) os << v.first << "=>" << v.second << ","; os << "}";return os; }// print like python// src: https://qiita.com/Lily0727K/items/06cb1d6da8a436369eed/////////////////////////////////////////////////////////void print() { *__cout << endl; }template<class Head, class... Tail>void print(Head &&head, Tail &&... tail) { *__cout << head; if (sizeof...(tail) != 0) *__cout << " "; print(forward<Tail>(tail)...); }template<class T>void print(vector<T> &vec) { for (auto &a: vec) { *__cout << a; if (&a != &vec.back()) *__cout << " "; } *__cout << endl; }template<class T>void print(vector<vector<T>> &df) { for (auto &vec: df) { print(vec); } }// endl なしvoid Print() {}template<class Head, class... Tail>void Print(Head &&head, Tail &&... tail) { *__cout << head; if (sizeof...(tail) != 0) *__cout << " "; Print(forward<Tail>(tail)...); }template<class T>void Print(vector<T> &vec) { for (auto &a: vec) { *__cout << a; if (&a != &vec.back()) *__cout << " "; } }//@formatter:off/** org: https://atcoder.jp/contests/abc213/submissions/24901856* jhelper で使用するため, 全部 cin での入力にしている. (現状のレベルでは困らないので)*/template<class T> void scan(T& a){ *__cin >> a; }template<class T> void scan(vector<T>&);template<class T, class L> void scan(pair<T, L>&);template<class T> void scan(vector<T>& a){ for(auto&& i : a) scan(i); }template<class T, class L> void scan(pair<T, L>& p){ scan(p.first); scan(p.second); }template<class T, size_t size> void scan(T (&a)[size]){ for(auto&& i : a) scan(i); }void in(){}template <class... T> void in(T&... a){ (void)initializer_list<int>{ (scan(a), 0)... }; }#define let_v(type,name,...) vector<type>name(__VA_ARGS__)#define let_V(type,name,size) vector<type>name(size);in(name)#define let_vv(type,name,h,...) vector<vector<type>>name(h,vector<type>(__VA_ARGS__))#define let_VV(type,name,h,w) vector<vector<type>>name(h,vector<type>(w));in(name)#define let_vvv(type,name,h,w,...) vector<vector<vector<type>>>name(h,vector<vector<type>>(w,vector<type>(__VA_ARGS__)))/* string 入力を vector<char> で受け取るみたいな */vector<char> let_CharVec() { string s; *__cin >> s; return {s.begin(), s.end()}; }//@formatter:offll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }template <class T, class C>bool chmax(T& a, C b) { if (a < b) { a = b; return true; } return false; }template <class T, class C>bool chmin(T& a, C b) { if (a > b) { a = b; return true; } return false; }template <class T>T sum(const vector<T>& v) { T res = 0; for (size_t i = 0; i < v.size(); ++i) res += v[i]; return res; }template<class T>vector<pair<T, int>> idx_pair(vector<T> &vals) { vector<pair<T, int>> ans; rep(i, vals.size()) { ans.emplace_back(vals[i], i); } return ans; }template <class T, class C>T min(T a, C b) { return a <= b ? a : T(b); }template <class T, class C>T max(T a, C b) { return a >= b ? a : T(b); }// add other source// #include "../library/graph/UnionFind.cpp"// #include "../library/tree/SegmentTree.cpp"// #include "../library/graph/template.cpp"// utils// #include "../library/mint.cpp"// #include "../library/string/utils.cpp"// #include "../library/math/utils.cpp"/**************************/class No2073ConconSubstringsSwapVersion {public:void solve(std::istream &cin, std::ostream &cout) { _init_io(cin, cout); int t = 1;// cin >> t;while (t--) _solve(cin, cout); }//@formatter:onvoid _solve(std::istream &cin, std::ostream &cout) {// codeint n;cin >> n;string s;cin >> s;VVI cnt(3, VI(3, 0));string X = "con";for (int i = 0; i < n * 3; i += 3) {rep(j, 3)if (s[i] == X[j])cnt[0][j]++;}for (int i = 1; i < n * 3; i += 3) {rep(j, 3)if (s[i] == X[j])cnt[1][j]++;}for (int i = 2; i < n * 3; i += 3) {rep(j, 3)if (s[i] == X[j])cnt[2][j]++;}// print(cnt);ll ans = 0;ll aki=n;rep(st, 3) {ll now = INF;rep(j, 3) {chmin(now, cnt[(st + j) % 3][j]);}if(st>0)now=max(0,min(now,aki-1));aki-=now;// print(st,now);ans+=now;}print(ans);}};int main() {No2073ConconSubstringsSwapVersion solver;std::istream& in(std::cin);std::ostream& out(std::cout);solver.solve(in, out);return 0;}