提出 #65065488
ソースコード 拡げる
#pragma GCC optimize("Ofast","unroll-all-loops","fast-math","no-stack-protector")
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
using namespace std;
#define fi first
#define se second
#if 1
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '['; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "]";}
void _print() {cerr << endl << flush;}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#define DEBUG(x...) cerr << "*["<<__LINE__<<"]\t"<< #x << " = "; _print(x)
template<class T>
istream& operator>>(istream& is, vector<T>& v) {
int n; is>>n; v.resize(n);
for(auto &i:v) is>>i;
return is;
}
template<class T1,class T2>
istream& operator>>(istream& is, pair<T1,T2>& p) {
is>>p.fi>>p.se;
return is;
}
template<class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
for(const auto &i:v) os<<i<<' ';
return os;
}
template<class T1,class T2>
ostream& operator<<(ostream& os, const pair<T1,T2>& p) {
os<<p.fi<<' '<<p.se; return os;
}
#endif
#define ll long long
#define mp make_pair
#define pb push_back
#define vi vector<ll>
#define pi pair<int, int>
template<typename T> bool chkmin(T &a, T b){return (b < a) ? a = b, 1 : 0;}
template<typename T> bool chkmax(T &a, T b){return (b > a) ? a = b, 1 : 0;}
const int maxn = 2000005;
char s[maxn];
int a[maxn];
int pref[maxn];
int calc(int x) {
if (x < 0) return (-x + 1 ) / 2;
return 0;
};
vector<pair<ll, int> > xs[2];
const int N = maxn;
ll minsum[N];
const ll inf = 1e18;
ll cont[N];
ll sumgt[N], sumpar[N], sumcnt[N];
ll sufcont[N];
ll seg;
int n, k;
ll total_count(int pos, int k) {
if (seg == 0) return 1ll * k * cont[pos];
ll ans = sufcont[pos];
ll end = pos + 1ll * k * seg;
if (end <= n) ans -= sufcont[end];
return ans;
}
ll final[maxn];
void solve(int kl, int kr, int nl, int nr) {
if (kl > kr) return;
int mid = (kl + kr) / 2;
ll best = inf, bpos = -1;
for (int i = nl; i <= nr; i++) {
ll cur = total_count(i, mid) + minsum[i];
if (cur < best) {
best = cur;
bpos = i;
}
}
final[mid] = best;
solve(kl, mid - 1, nl, bpos);
solve(mid + 1, kr, bpos, nr);
}
int main() {
cin >> n >> k;
n *= 2;
scanf("%s", s + 1);
for (int j = 1; j <= n; j++) {
if (s[j] == 'A') a[j] = 1;
else a[j] = -1;
pref[j] = pref[j - 1] + a[j];
}
seg = pref[n];
for (int j = 0; j < 2; j++) {
ll total = 0;
for (int i = 0; i <= n; i++) {
total += calc(pref[i]);
xs[j].pb({total, -pref[i]});
}
sort(xs[j].begin(), xs[j].end());
// DEBUG(xs[j]);
vector<pair<ll, int> > nx;
int mxj = -1;
for (auto v : xs[j]) {
if (-v.se > mxj) {
nx.pb(mp(v.fi, -v.se));
mxj = max(mxj, -v.se);
}
}
reverse(pref + 1, pref + n + 1);
xs[j] = nx;
}
// DEBUG(xs[0]);
// DEBUG(xs[1]);
for (int i = 0; i < N; i++) minsum[i] = inf;
for (auto u: xs[0])
for (auto v : xs[1])
chkmin(minsum[min(n, v.se + u.se)], u.fi + v.fi);
for (int i = 1; i <= n; i++)
if (pref[i] > 0) {
sumgt[pref[i]] += pref[i],
sumpar[pref[i]] += 1;
sumcnt[pref[i]] += 1;
}
for (int i = n; i >= 0; i--) {
sumgt[i] += sumgt[i + 1];
sumpar[i] += sumpar[i + 2];
sumcnt[i] += sumcnt[i + 1];
}
for (int i = 0; i <= n; i++) {
cont[i] = sumgt[i] - 1ll * i * sumcnt[i] + sumpar[i + 1];
cont[i] /= 2;
}
for (int i = n; i >= 0; i--) {
sufcont[i] = cont[i];
if (i + seg <= n) sufcont[i] += sufcont[i + seg];
}
solve(1, k, 0, n);
for (int i = 1; i <= k; i++)
cout << final[i] << '\n';
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | B - AGC Language |
| ユーザ | newbiedmy |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 1100 |
| コード長 | 4987 Byte |
| 結果 | AC |
| 実行時間 | 647 ms |
| メモリ | 180908 KiB |
コンパイルエラー
Main.cpp: In function ‘int main()’:
Main.cpp:114:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
114 | scanf("%s", s + 1);
| ~~~~~^~~~~~~~~~~~~
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 1100 / 1100 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt |
| All | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 02-25.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 04-01.txt, 04-02.txt, 04-03.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 06-01.txt, 06-02.txt, 06-03.txt, 06-04.txt, 06-05.txt, 06-06.txt, 06-07.txt, 06-08.txt, 06-09.txt, 06-10.txt, 06-11.txt, 06-12.txt, 06-13.txt, 06-14.txt, 06-15.txt, 06-16.txt, 06-17.txt, 06-18.txt, 06-19.txt, 06-20.txt, 06-21.txt, 06-22.txt, 07-01.txt, 07-02.txt, 07-03.txt, 07-04.txt, 07-05.txt, 07-06.txt, 07-07.txt, 07-08.txt, 07-09.txt, 07-10.txt, 07-11.txt, 07-12.txt, 07-13.txt, 07-14.txt, 07-15.txt, 07-16.txt, 08-01.txt, 08-02.txt, 08-03.txt, 08-04.txt, 08-05.txt, 08-06.txt, 08-07.txt, 08-08.txt, 08-09.txt, 08-10.txt, 09-01.txt, 09-02.txt, 09-03.txt, 09-04.txt, 09-05.txt, 09-06.txt, 09-07.txt, 09-08.txt, 09-09.txt, 09-10.txt, 10-01.txt, 10-02.txt, 10-03.txt, 10-04.txt, 10-05.txt, 10-06.txt, 11-01.txt, 11-02.txt, 11-03.txt, 11-04.txt, 12-01.txt, 12-02.txt, 12-03.txt, 12-04.txt, 12-05.txt, 12-06.txt, 12-07.txt, 12-08.txt, 12-09.txt, 12-10.txt, 12-11.txt, 12-12.txt, 12-13.txt, 12-14.txt, 12-15.txt, 12-16.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 01-01.txt | AC | 7 ms | 19180 KiB |
| 01-02.txt | AC | 7 ms | 19484 KiB |
| 01-03.txt | AC | 20 ms | 21636 KiB |
| 01-04.txt | AC | 20 ms | 21680 KiB |
| 01-05.txt | AC | 20 ms | 21516 KiB |
| 01-06.txt | AC | 20 ms | 21836 KiB |
| 01-07.txt | AC | 20 ms | 21636 KiB |
| 01-08.txt | AC | 20 ms | 21716 KiB |
| 01-09.txt | AC | 20 ms | 21520 KiB |
| 01-10.txt | AC | 20 ms | 21828 KiB |
| 02-01.txt | AC | 20 ms | 21716 KiB |
| 02-02.txt | AC | 20 ms | 21676 KiB |
| 02-03.txt | AC | 20 ms | 21544 KiB |
| 02-04.txt | AC | 21 ms | 21548 KiB |
| 02-05.txt | AC | 305 ms | 179492 KiB |
| 02-06.txt | AC | 340 ms | 179660 KiB |
| 02-07.txt | AC | 264 ms | 179560 KiB |
| 02-08.txt | AC | 273 ms | 179572 KiB |
| 02-09.txt | AC | 282 ms | 179472 KiB |
| 02-10.txt | AC | 284 ms | 179460 KiB |
| 02-11.txt | AC | 285 ms | 179468 KiB |
| 02-12.txt | AC | 297 ms | 179544 KiB |
| 02-13.txt | AC | 310 ms | 179448 KiB |
| 02-14.txt | AC | 325 ms | 179412 KiB |
| 02-15.txt | AC | 310 ms | 179560 KiB |
| 02-16.txt | AC | 284 ms | 179744 KiB |
| 02-17.txt | AC | 295 ms | 179764 KiB |
| 02-18.txt | AC | 303 ms | 179796 KiB |
| 02-19.txt | AC | 309 ms | 179420 KiB |
| 02-20.txt | AC | 339 ms | 179684 KiB |
| 02-21.txt | AC | 351 ms | 179584 KiB |
| 02-22.txt | AC | 392 ms | 179836 KiB |
| 02-23.txt | AC | 548 ms | 179608 KiB |
| 02-24.txt | AC | 623 ms | 179592 KiB |
| 02-25.txt | AC | 645 ms | 179780 KiB |
| 03-01.txt | AC | 585 ms | 179480 KiB |
| 03-02.txt | AC | 281 ms | 180648 KiB |
| 03-03.txt | AC | 351 ms | 179512 KiB |
| 03-04.txt | AC | 326 ms | 179440 KiB |
| 03-05.txt | AC | 284 ms | 179540 KiB |
| 04-01.txt | AC | 375 ms | 180660 KiB |
| 04-02.txt | AC | 371 ms | 180680 KiB |
| 04-03.txt | AC | 368 ms | 180656 KiB |
| 05-01.txt | AC | 299 ms | 179636 KiB |
| 05-02.txt | AC | 312 ms | 179628 KiB |
| 05-03.txt | AC | 316 ms | 179476 KiB |
| 05-04.txt | AC | 306 ms | 179448 KiB |
| 05-05.txt | AC | 299 ms | 179452 KiB |
| 05-06.txt | AC | 258 ms | 179464 KiB |
| 05-07.txt | AC | 298 ms | 179516 KiB |
| 05-08.txt | AC | 309 ms | 179576 KiB |
| 06-01.txt | AC | 318 ms | 179492 KiB |
| 06-02.txt | AC | 321 ms | 179656 KiB |
| 06-03.txt | AC | 319 ms | 179564 KiB |
| 06-04.txt | AC | 292 ms | 179724 KiB |
| 06-05.txt | AC | 275 ms | 179972 KiB |
| 06-06.txt | AC | 274 ms | 179732 KiB |
| 06-07.txt | AC | 268 ms | 178496 KiB |
| 06-08.txt | AC | 293 ms | 179564 KiB |
| 06-09.txt | AC | 318 ms | 179544 KiB |
| 06-10.txt | AC | 316 ms | 179544 KiB |
| 06-11.txt | AC | 300 ms | 179656 KiB |
| 06-12.txt | AC | 314 ms | 179412 KiB |
| 06-13.txt | AC | 315 ms | 179560 KiB |
| 06-14.txt | AC | 295 ms | 179544 KiB |
| 06-15.txt | AC | 298 ms | 179556 KiB |
| 06-16.txt | AC | 298 ms | 179640 KiB |
| 06-17.txt | AC | 294 ms | 179468 KiB |
| 06-18.txt | AC | 298 ms | 179452 KiB |
| 06-19.txt | AC | 292 ms | 179524 KiB |
| 06-20.txt | AC | 273 ms | 179472 KiB |
| 06-21.txt | AC | 255 ms | 179540 KiB |
| 06-22.txt | AC | 256 ms | 179476 KiB |
| 07-01.txt | AC | 409 ms | 180652 KiB |
| 07-02.txt | AC | 320 ms | 180404 KiB |
| 07-03.txt | AC | 343 ms | 180316 KiB |
| 07-04.txt | AC | 389 ms | 180680 KiB |
| 07-05.txt | AC | 242 ms | 140152 KiB |
| 07-06.txt | AC | 241 ms | 159984 KiB |
| 07-07.txt | AC | 257 ms | 159656 KiB |
| 07-08.txt | AC | 214 ms | 139748 KiB |
| 07-09.txt | AC | 226 ms | 159784 KiB |
| 07-10.txt | AC | 258 ms | 159528 KiB |
| 07-11.txt | AC | 204 ms | 137548 KiB |
| 07-12.txt | AC | 220 ms | 158228 KiB |
| 07-13.txt | AC | 251 ms | 158176 KiB |
| 07-14.txt | AC | 136 ms | 100168 KiB |
| 07-15.txt | AC | 187 ms | 136788 KiB |
| 07-16.txt | AC | 215 ms | 136800 KiB |
| 08-01.txt | AC | 606 ms | 179648 KiB |
| 08-02.txt | AC | 603 ms | 179696 KiB |
| 08-03.txt | AC | 627 ms | 179728 KiB |
| 08-04.txt | AC | 259 ms | 179564 KiB |
| 08-05.txt | AC | 255 ms | 179544 KiB |
| 08-06.txt | AC | 647 ms | 179628 KiB |
| 08-07.txt | AC | 266 ms | 179468 KiB |
| 08-08.txt | AC | 633 ms | 179564 KiB |
| 08-09.txt | AC | 256 ms | 179456 KiB |
| 08-10.txt | AC | 258 ms | 179492 KiB |
| 09-01.txt | AC | 20 ms | 21780 KiB |
| 09-02.txt | AC | 20 ms | 21632 KiB |
| 09-03.txt | AC | 20 ms | 21648 KiB |
| 09-04.txt | AC | 20 ms | 21512 KiB |
| 09-05.txt | AC | 21 ms | 21828 KiB |
| 09-06.txt | AC | 20 ms | 21708 KiB |
| 09-07.txt | AC | 20 ms | 21636 KiB |
| 09-08.txt | AC | 20 ms | 21636 KiB |
| 09-09.txt | AC | 20 ms | 21632 KiB |
| 09-10.txt | AC | 20 ms | 21680 KiB |
| 10-01.txt | AC | 322 ms | 180352 KiB |
| 10-02.txt | AC | 273 ms | 180020 KiB |
| 10-03.txt | AC | 271 ms | 179648 KiB |
| 10-04.txt | AC | 327 ms | 180404 KiB |
| 10-05.txt | AC | 277 ms | 180044 KiB |
| 10-06.txt | AC | 275 ms | 179520 KiB |
| 11-01.txt | AC | 272 ms | 179572 KiB |
| 11-02.txt | AC | 265 ms | 179632 KiB |
| 11-03.txt | AC | 272 ms | 180280 KiB |
| 11-04.txt | AC | 279 ms | 180908 KiB |
| 12-01.txt | AC | 268 ms | 143936 KiB |
| 12-02.txt | AC | 309 ms | 170612 KiB |
| 12-03.txt | AC | 217 ms | 123196 KiB |
| 12-04.txt | AC | 243 ms | 145712 KiB |
| 12-05.txt | AC | 209 ms | 127488 KiB |
| 12-06.txt | AC | 309 ms | 179744 KiB |
| 12-07.txt | AC | 277 ms | 180384 KiB |
| 12-08.txt | AC | 275 ms | 180348 KiB |
| 12-09.txt | AC | 273 ms | 180396 KiB |
| 12-10.txt | AC | 313 ms | 179744 KiB |
| 12-11.txt | AC | 276 ms | 180404 KiB |
| 12-12.txt | AC | 280 ms | 180312 KiB |
| 12-13.txt | AC | 273 ms | 180384 KiB |
| 12-14.txt | AC | 269 ms | 180396 KiB |
| 12-15.txt | AC | 270 ms | 180420 KiB |
| 12-16.txt | AC | 263 ms | 180408 KiB |
| sample-01.txt | AC | 7 ms | 19288 KiB |
| sample-02.txt | AC | 7 ms | 19276 KiB |
| sample-03.txt | AC | 6 ms | 19492 KiB |
| sample-04.txt | AC | 7 ms | 19236 KiB |
| sample-05.txt | AC | 7 ms | 19308 KiB |