QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#457602 | #8832. Daily Disinfection | ucup-team180# | AC ✓ | 4ms | 4452kb | C++17 | 29.9kb | 2024-06-29 13:24:25 | 2024-06-29 13:24:27 |
Judging History
answer
#pragma region Macros
#ifdef noimi
#pragma comment(linker, "/stack:256000000")
#include "my_template.hpp"
#else
// #pragma GCC target("avx2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <immintrin.h>
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfenv>
#include <cfloat>
#include <chrono>
#include <cinttypes>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdarg>
#include <cstddef>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <functional>
#include <immintrin.h>
#include <initializer_list>
#include <iomanip>
#include <ios>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <streambuf>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include <variant>
#ifdef noimi
#define oj_local(a, b) b
#else
#define oj_local(a, b) a
#endif
#define LOCAL if(oj_local(0, 1))
#define OJ if(oj_local(1, 0))
using namespace std;
using ll = long long;
using ull = unsigned long long int;
using i128 = __int128_t;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using ld = long double;
template <typename T> using vc = vector<T>;
template <typename T> using vvc = vector<vc<T>>;
template <typename T> using vvvc = vector<vvc<T>>;
using vi = vc<int>;
using vl = vc<ll>;
using vpi = vc<pii>;
using vpl = vc<pll>;
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
template <typename T> int si(const T &x) { return x.size(); }
template <class T, class S> inline bool chmax(T &a, const S &b) { return (a < b ? a = b, 1 : 0); }
template <class T, class S> inline bool chmin(T &a, const S &b) { return (a > b ? a = b, 1 : 0); }
vi iota(int n) {
vi a(n);
return iota(a.begin(), a.end(), 0), a;
}
template <typename T> vi iota(const vector<T> &a, bool greater = false) {
vi res(a.size());
iota(res.begin(), res.end(), 0);
sort(res.begin(), res.end(), [&](int i, int j) {
if(greater) return a[i] > a[j];
return a[i] < a[j];
});
return res;
}
// macros
#define overload5(a, b, c, d, e, name, ...) name
#define overload4(a, b, c, d, name, ...) name
#define endl '\n'
#define REP0(n) for(ll jidlsjf = 0; jidlsjf < n; ++jidlsjf)
#define REP1(i, n) for(ll i = 0; i < (n); ++i)
#define REP2(i, a, b) for(ll i = (a); i < (b); ++i)
#define REP3(i, a, b, c) for(ll i = (a); i < (b); i += (c))
#define rep(...) overload4(__VA_ARGS__, REP3, REP2, REP1, REP0)(__VA_ARGS__)
#define per0(n) for(int jidlsjf = 0; jidlsjf < (n); ++jidlsjf)
#define per1(i, n) for(ll i = (n)-1; i >= 0; --i)
#define per2(i, a, b) for(ll i = (a)-1; i >= b; --i)
#define per3(i, a, b, c) for(ll i = (a)-1; i >= (b); i -= (c))
#define per(...) overload4(__VA_ARGS__, per3, per2, per1, per0)(__VA_ARGS__)
#define fore0(a) rep(a.size())
#define fore1(i, a) for(auto &&i : a)
#define fore2(a, b, v) for(auto &&[a, b] : v)
#define fore3(a, b, c, v) for(auto &&[a, b, c] : v)
#define fore4(a, b, c, d, v) for(auto &&[a, b, c, d] : v)
#define fore(...) overload5(__VA_ARGS__, fore4, fore3, fore2, fore1, fore0)(__VA_ARGS__)
#define setbits(j, n) for(ll iiiii = (n), j = lowbit(iiiii); iiiii; iiiii ^= 1 << j, j = lowbit(iiiii))
#define perm(v) for(bool permrepflag = true; (permrepflag ? exchange(permrepflag, false) : next_permutation(all(v)));)
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define ppf pop_front
#define eb emplace_back
#define drop(s) cout << #s << endl, exit(0)
#define si(c) (int)(c).size()
#define lb(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define lbg(c, x) distance((c).begin(), lower_bound(all(c), (x), greater{}))
#define ub(c, x) distance((c).begin(), upper_bound(all(c), (x)))
#define ubg(c, x) distance((c).begin(), upper_bound(all(c), (x), greater{}))
#define rng(v, l, r) v.begin() + (l), v.begin() + (r)
#define all(c) begin(c), end(c)
#define rall(c) rbegin(c), rend(c)
#define SORT(v) sort(all(v))
#define REV(v) reverse(all(v))
#define UNIQUE(x) SORT(x), x.erase(unique(all(x)), x.end())
template <typename T = ll, typename S> T SUM(const S &v) { return accumulate(all(v), T(0)); }
#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define overload2(_1, _2, name, ...) name
#define vec(type, name, ...) vector<type> name(__VA_ARGS__)
#define vv(type, name, h, ...) vector<vector<type>> name(h, vector<type>(__VA_ARGS__))
#define vvv(type, name, h, w, ...) vector<vector<vector<type>>> name(h, vector<vector<type>>(w, vector<type>(__VA_ARGS__)))
#define vvvv(type, name, a, b, c, ...) \
vector<vector<vector<vector<type>>>> name(a, vector<vector<vector<type>>>(b, vector<vector<type>>(c, vector<type>(__VA_ARGS__))))
constexpr pii dx4[4] = {pii{1, 0}, pii{0, 1}, pii{-1, 0}, pii{0, -1}};
constexpr pii dx8[8] = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
namespace yesno_impl {
const string YESNO[2] = {"NO", "YES"};
const string YesNo[2] = {"No", "Yes"};
const string yesno[2] = {"no", "yes"};
const string firstsecond[2] = {"second", "first"};
const string FirstSecond[2] = {"Second", "First"};
const string possiblestr[2] = {"impossible", "possible"};
const string Possiblestr[2] = {"Impossible", "Possible"};
void YES(bool t = 1) { cout << YESNO[t] << endl; }
void NO(bool t = 1) { YES(!t); }
void Yes(bool t = 1) { cout << YesNo[t] << endl; }
void No(bool t = 1) { Yes(!t); }
void yes(bool t = 1) { cout << yesno[t] << endl; }
void no(bool t = 1) { yes(!t); }
void first(bool t = 1) { cout << firstsecond[t] << endl; }
void First(bool t = 1) { cout << FirstSecond[t] << endl; }
void possible(bool t = 1) { cout << possiblestr[t] << endl; }
void Possible(bool t = 1) { cout << Possiblestr[t] << endl; }
}; // namespace yesno_impl
using namespace yesno_impl;
#define INT(...) \
int __VA_ARGS__; \
IN(__VA_ARGS__)
#define INTd(...) \
int __VA_ARGS__; \
IN2(__VA_ARGS__)
#define LL(...) \
ll __VA_ARGS__; \
IN(__VA_ARGS__)
#define LLd(...) \
ll __VA_ARGS__; \
IN2(__VA_ARGS__)
#define STR(...) \
string __VA_ARGS__; \
IN(__VA_ARGS__)
#define CHR(...) \
char __VA_ARGS__; \
IN(__VA_ARGS__)
#define DBL(...) \
double __VA_ARGS__; \
IN(__VA_ARGS__)
#define VEC(type, name, size) \
vector<type> name(size); \
IN(name)
#define VECd(type, name, size) \
vector<type> name(size); \
IN2(name)
#define VEC2(type, name1, name2, size) \
vector<type> name1(size), name2(size); \
for(int i = 0; i < size; i++) IN(name1[i], name2[i])
#define VEC2d(type, name1, name2, size) \
vector<type> name1(size), name2(size); \
for(int i = 0; i < size; i++) IN2(name1[i], name2[i])
#define VEC3(type, name1, name2, name3, size) \
vector<type> name1(size), name2(size), name3(size); \
for(int i = 0; i < size; i++) IN(name1[i], name2[i], name3[i])
#define VEC3d(type, name1, name2, name3, size) \
vector<type> name1(size), name2(size), name3(size); \
for(int i = 0; i < size; i++) IN2(name1[i], name2[i], name3[i])
#define VEC4(type, name1, name2, name3, name4, size) \
vector<type> name1(size), name2(size), name3(size), name4(size); \
for(int i = 0; i < size; i++) IN(name1[i], name2[i], name3[i], name4[i]);
#define VEC4d(type, name1, name2, name3, name4, size) \
vector<type> name1(size), name2(size), name3(size), name4(size); \
for(int i = 0; i < size; i++) IN2(name1[i], name2[i], name3[i], name4[i]);
#define VV(type, name, h, w) \
vector<vector<type>> name(h, vector<type>(w)); \
IN(name)
#define VVd(type, name, h, w) \
vector<vector<type>> name(h, vector<type>(w)); \
IN2(name)
int scan() { return getchar(); }
void scan(int &a) { cin >> a; }
void scan(long long &a) { cin >> a; }
void scan(char &a) { cin >> a; }
void scan(double &a) { cin >> a; }
void scan(string &a) { cin >> a; }
template <class T, class S> void scan(pair<T, S> &p) { scan(p.first), scan(p.second); }
template <class T> void scan(vector<T> &);
template <class T> void scan(vector<T> &a) {
for(auto &i : a) scan(i);
}
template <class T> void scan(T &a) { cin >> a; }
void IN() {}
void IN2() {}
template <class Head, class... Tail> void IN(Head &head, Tail &...tail) {
scan(head);
IN(tail...);
}
template <class Head, class... Tail> void IN2(Head &head, Tail &...tail) {
scan(head);
--head;
IN2(tail...);
}
template <int p = -1> void pat() {}
template <int p = -1, class Head, class... Tail> void pat(Head &h, Tail &...tail) {
h += p;
pat<p>(tail...);
}
template <typename T, typename S> T ceil(T x, S y) {
assert(y);
return (y < 0 ? ceil(-x, -y) : (x > 0 ? (x + y - 1) / y : x / y));
}
template <typename T, typename S> T floor(T x, S y) {
assert(y);
return (y < 0 ? floor(-x, -y) : (x > 0 ? x / y : x / y - (x % y == 0 ? 0 : 1)));
}
template <typename T, typename S, typename U> U bigmul(const T &x, const S &y, const U &lim) { // clamp(x * y, -lim, lim)
if(x < 0 and y < 0) return bigmul(-x, -y, lim);
if(x < 0) return -bigmul(-x, y, lim);
if(y < 0) return -bigmul(x, -y, lim);
return y == 0 or x <= lim / y ? x * y : lim;
}
template <class T> T POW(T x, int n) {
T res = 1;
for(; n; n >>= 1, x *= x)
if(n & 1) res *= x;
return res;
}
template <class T, class S> T POW(T x, S n, const ll &mod) {
T res = 1;
x %= mod;
for(; n; n >>= 1, x = x * x % mod)
if(n & 1) res = res * x % mod;
return res;
}
vector<pll> factor(ll x) {
vector<pll> ans;
for(ll i = 2; i * i <= x; i++)
if(x % i == 0) {
ans.push_back({i, 1});
while((x /= i) % i == 0) ans.back().second++;
}
if(x != 1) ans.push_back({x, 1});
return ans;
}
template <class T> vector<T> divisor(T x) {
vector<T> ans;
for(T i = 1; i * i <= x; i++)
if(x % i == 0) {
ans.pb(i);
if(i * i != x) ans.pb(x / i);
}
return ans;
}
template <typename T> void zip(vector<T> &x) {
vector<T> y = x;
UNIQUE(y);
for(int i = 0; i < x.size(); ++i) { x[i] = lb(y, x[i]); }
}
template <class S> void fold_in(vector<S> &v) {}
template <typename Head, typename... Tail, class S> void fold_in(vector<S> &v, Head &&a, Tail &&...tail) {
for(auto e : a) v.emplace_back(e);
fold_in(v, tail...);
}
template <class S> void renumber(vector<S> &v) {}
template <typename Head, typename... Tail, class S> void renumber(vector<S> &v, Head &&a, Tail &&...tail) {
for(auto &&e : a) e = lb(v, e);
renumber(v, tail...);
}
template <class S, class... Args> vector<S> zip(vector<S> &head, Args &&...args) {
vector<S> v;
fold_in(v, head, args...);
sort(all(v)), v.erase(unique(all(v)), v.end());
renumber(v, head, args...);
return v;
}
template <typename S> void rearrange(const vector<S> &id) {}
template <typename S, typename T> void rearrange_exec(const vector<S> &id, vector<T> &v) {
vector<T> w(v.size());
rep(i, si(id)) w[i] = v[id[i]];
v.swap(w);
}
// 並び替える順番, 並び替える vector 達
template <typename S, typename Head, typename... Tail> void rearrange(const vector<S> &id, Head &a, Tail &...tail) {
rearrange_exec(id, a);
rearrange(id, tail...);
}
template <typename T> vector<T> RUI(const vector<T> &v) {
vector<T> res(v.size() + 1);
for(int i = 0; i < v.size(); i++) res[i + 1] = res[i] + v[i];
return res;
}
template <typename T> void zeta_supersetsum(vector<T> &f) {
int n = f.size();
for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b] += f[b | i];
}
template <typename T> void zeta_subsetsum(vector<T> &f) {
int n = f.size();
for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b | i] += f[b];
}
template <typename T> void mobius_subset(vector<T> &f) {
int n = f.size();
for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b] -= f[b | i];
}
template <typename T> void mobius_superset(vector<T> &f) {
int n = f.size();
for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b | i] -= f[b];
}
// 反時計周りに 90 度回転
template <typename T> void rot(vector<vector<T>> &v) {
if(empty(v)) return;
int n = v.size(), m = v[0].size();
vector<vector<T>> res(m, vector<T>(n));
rep(i, n) rep(j, m) res[m - 1 - j][i] = v[i][j];
v.swap(res);
}
vector<int> counter(const vector<int> &v, int max_num = -1) {
if(max_num == -1) max_num = MAX(v);
vector<int> res(max_num + 1);
fore(e, v) res[e]++;
return res;
}
// x in [l, r)
template <class T, class S> bool inc(const T &x, const S &l, const S &r) { return l <= x and x < r; }
template <class T, class S> bool inc(const T &x, const pair<S, S> &p) { return p.first <= x and x < p.second; }
// 便利関数
constexpr ll ten(int n) { return n == 0 ? 1 : ten(n - 1) * 10; }
constexpr ll tri(ll n) { return n * (n + 1) / 2; }
// l + ... + r
constexpr ll tri(ll l, ll r) { return (l + r) * (r - l + 1) / 2; }
ll max(int x, ll y) { return max((ll)x, y); }
ll max(ll x, int y) { return max(x, (ll)y); }
int min(int x, ll y) { return min((ll)x, y); }
int min(ll x, int y) { return min(x, (ll)y); }
// bit 演算系
#define bit(i) (1LL << i) // (1 << i)
#define test(b, i) (b >> i & 1) // b の i bit 目が立っているか
ll pow2(int i) { return 1LL << i; }
int topbit(signed t) { return t == 0 ? -1 : 31 - __builtin_clz(t); }
int topbit(ll t) { return t == 0 ? -1 : 63 - __builtin_clzll(t); }
// int lowbit(signed a) { return a == 0 ? 32 : __builtin_ctz(a); }
int lowbit(ull a) { return a == 0 ? 64 : __builtin_ctzll(a); }
// int allbit(int n) { return (1 << n) - 1; }
constexpr ll mask(int n) { return (1LL << n) - 1; }
// int popcount(signed t) { return __builtin_popcount(t); }
// int popcount(ll t) { return __builtin_popcountll(t); }
int popcount(uint64_t t) { return __builtin_popcountll(t); }
static inline uint64_t popcount64(uint64_t x) {
uint64_t m1 = 0x5555555555555555ll;
uint64_t m2 = 0x3333333333333333ll;
uint64_t m4 = 0x0F0F0F0F0F0F0F0Fll;
uint64_t h01 = 0x0101010101010101ll;
x -= (x >> 1) & m1;
x = (x & m2) + ((x >> 2) & m2);
x = (x + (x >> 4)) & m4;
return (x * h01) >> 56;
}
bool ispow2(int i) { return i && (i & -i) == i; }
ll rnd(ll l, ll r) { //[l, r)
#ifdef noimi
static mt19937_64 gen;
#else
static mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());
#endif
return uniform_int_distribution<ll>(l, r - 1)(gen);
}
ll rnd(ll n) { return rnd(0, n); }
template <class t> void random_shuffle(vc<t> &a) { rep(i, si(a)) swap(a[i], a[rnd(0, i + 1)]); }
int in() {
int x;
cin >> x;
return x;
}
ll lin() {
unsigned long long x;
cin >> x;
return x;
}
template <class T, class S> pair<T, S> operator-(const pair<T, S> &x) { return pair<T, S>(-x.first, -x.second); }
template <class T, class S> pair<T, S> operator-(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi - y.fi, x.se - y.se); }
template <class T, class S> pair<T, S> operator+(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi + y.fi, x.se + y.se); }
template <class T> pair<T, T> operator&(const pair<T, T> &l, const pair<T, T> &r) { return pair<T, T>(max(l.fi, r.fi), min(l.se, r.se)); }
template <class T, class S> pair<T, S> operator+=(pair<T, S> &l, const pair<T, S> &r) { return l = l + r; }
template <class T, class S> pair<T, S> operator-=(pair<T, S> &l, const pair<T, S> &r) { return l = l - r; }
// 開閉
template <class T> bool intersect(const pair<T, T> &l, const pair<T, T> &r) { return (l.se < r.se ? r.fi < l.se : l.fi < r.se); }
template <class T> vector<T> &operator++(vector<T> &v) {
fore(e, v) e++;
return v;
}
template <class T> vector<T> operator++(vector<T> &v, int) {
auto res = v;
fore(e, v) e++;
return res;
}
template <class T> vector<T> &operator--(vector<T> &v) {
fore(e, v) e--;
return v;
}
template <class T> vector<T> operator--(vector<T> &v, int) {
auto res = v;
fore(e, v) e--;
return res;
}
template <class T> void connect(vector<T> &l, const vector<T> &r) { fore(e, r) l.eb(e); }
template <class T> vector<T> operator+(const vector<T> &l, const vector<T> &r) {
vector<T> res(max(si(l), si(r)));
rep(i, si(l)) res[i] += l[i];
rep(i, si(r)) res[i] += r[i];
return res;
}
template <class T> vector<T> operator-(const vector<T> &l, const vector<T> &r) {
vector<T> res(max(si(l), si(r)));
rep(i, si(l)) res[i] += l[i];
rep(i, si(r)) res[i] -= r[i];
return res;
}
template <class T> vector<T> &operator+=(const vector<T> &l, const vector<T> &r) {
if(si(l) < si(r)) l.resize(si(r));
rep(i, si(r)) l[i] += r[i];
return l;
}
template <class T> vector<T> &operator-=(const vector<T> &l, const vector<T> &r) {
if(si(l) < si(r)) l.resize(si(r));
rep(i, si(r)) l[i] -= r[i];
return l;
}
template <class T> vector<T> &operator+=(vector<T> &v, const T &x) {
fore(e, v) e += x;
return v;
}
template <class T> vector<T> &operator-=(vector<T> &v, const T &x) {
fore(e, v) e -= x;
return v;
}
template <typename T> struct edge {
int from, to;
T cost;
int id;
edge(int to, T cost) : from(-1), to(to), cost(cost) {}
edge(int from, int to, T cost) : from(from), to(to), cost(cost) {}
edge(int from, int to, T cost, int id) : from(from), to(to), cost(cost), id(id) {}
constexpr bool operator<(const edge<T> &rhs) const noexcept { return cost < rhs.cost; }
edge &operator=(const int &x) {
to = x;
return *this;
}
operator int() const { return to; }
friend ostream operator<<(ostream &os, const edge &e) { return os << e.to; }
};
template <typename T> using Edges = vector<edge<T>>;
template <typename T = int> Edges<T> read_edges(int m, bool weighted = false) {
Edges<T> res;
res.reserve(m);
for(int i = 0; i < m; i++) {
int u, v, c = 0;
scan(u), scan(v), u--, v--;
if(weighted) scan(c);
res.eb(u, v, c, i);
}
return res;
}
using Tree = vector<vector<int>>;
using Graph = vector<vector<int>>;
template <class T> using Wgraph = vector<vector<edge<T>>>;
Graph getG(int n, int m = -1, bool directed = false, int margin = 1) {
Tree res(n);
if(m == -1) m = n - 1;
while(m--) {
int a, b;
cin >> a >> b;
a -= margin, b -= margin;
res[a].emplace_back(b);
if(!directed) res[b].emplace_back(a);
}
return res;
}
Graph getTreeFromPar(int n, int margin = 1) {
Graph res(n);
for(int i = 1; i < n; i++) {
int a;
cin >> a;
res[a - margin].emplace_back(i);
}
return res;
}
template <class T> Wgraph<T> getWg(int n, int m = -1, bool directed = false, int margin = 1) {
Wgraph<T> res(n);
if(m == -1) m = n - 1;
while(m--) {
int a, b;
T c;
scan(a), scan(b), scan(c);
a -= margin, b -= margin;
res[a].emplace_back(b, c);
if(!directed) res[b].emplace_back(a, c);
}
return res;
}
void add(Graph &G, int x, int y) { G[x].eb(y), G[y].eb(x); }
template <class S, class T> void add(Wgraph<S> &G, int x, int y, T c) { G[x].eb(y, c), G[y].eb(x, c); }
#define TEST \
INT(testcases); \
while(testcases--)
i128 abs(const i128 &x) { return x > 0 ? x : -x; }
istream &operator>>(istream &is, i128 &v) {
string s;
is >> s;
v = 0;
for(int i = 0; i < (int)s.size(); i++) {
if(isdigit(s[i])) { v = v * 10 + s[i] - '0'; }
}
if(s[0] == '-') { v *= -1; }
return is;
}
ostream &operator<<(ostream &os, const i128 &v) {
if(v == 0) { return (os << "0"); }
i128 num = v;
if(v < 0) {
os << '-';
num = -num;
}
string s;
for(; num > 0; num /= 10) { s.push_back((char)(num % 10) + '0'); }
reverse(s.begin(), s.end());
return (os << s);
}
namespace aux {
template <typename T, unsigned N, unsigned L> struct tp {
static void output(std::ostream &os, const T &v) {
os << std::get<N>(v) << (&os == &cerr ? ", " : " ");
tp<T, N + 1, L>::output(os, v);
}
};
template <typename T, unsigned N> struct tp<T, N, N> {
static void output(std::ostream &os, const T &v) { os << std::get<N>(v); }
};
} // namespace aux
template <typename... Ts> std::ostream &operator<<(std::ostream &os, const std::tuple<Ts...> &t) {
if(&os == &cerr) { os << '('; }
aux::tp<std::tuple<Ts...>, 0, sizeof...(Ts) - 1>::output(os, t);
if(&os == &cerr) { os << ')'; }
return os;
}
template <typename T, typename S, typename U> std::ostream &operator<<(std::ostream &os, const priority_queue<T, S, U> &_pq) {
auto pq = _pq;
vector<T> res;
while(!empty(pq)) res.emplace_back(pq.top()), pq.pop();
return os << res;
}
template <class T, class S> ostream &operator<<(ostream &os, const pair<T, S> &p) {
if(&os == &cerr) { return os << "(" << p.first << ", " << p.second << ")"; }
return os << p.first << " " << p.second;
}
template <class Ch, class Tr, class Container> std::basic_ostream<Ch, Tr> &operator<<(std::basic_ostream<Ch, Tr> &os, const Container &x) {
bool f = true;
if(&os == &cerr) os << "[";
for(auto &y : x) {
if(&os == &cerr)
os << (f ? "" : ", ") << y;
else
os << (f ? "" : " ") << y;
f = false;
}
if(&os == &cerr) os << "]";
return os;
}
#define dump(...) static_cast<void>(0)
#define dbg(...) static_cast<void>(0)
void OUT() { cout << endl; }
template <class Head, class... Tail> void OUT(const Head &head, const Tail &...tail) {
cout << head;
if(sizeof...(tail)) cout << ' ';
OUT(tail...);
}
template <typename T> static constexpr T inf = numeric_limits<T>::max() / 2;
template <class T, class S> constexpr pair<T, S> inf<pair<T, S>> = {inf<T>, inf<S>};
template <class T> void OUT2(const T &t, T INF = inf<T>, T res = -1) { OUT(t != INF ? t : res); }
template <class T> void OUT2(vector<T> &v, T INF = inf<T>, T res = -1) {
fore(e, v) if(e == INF) e = res;
OUT(v);
fore(e, v) if(e == res) e = INF;
}
template <class F> struct REC {
F f;
REC(F &&f_) : f(forward<F>(f_)) {}
template <class... Args> auto operator()(Args &&...args) const { return f(*this, forward<Args>(args)...); }
};
template <class S> vector<pair<S, int>> runLength(const vector<S> &v) {
vector<pair<S, int>> res;
for(auto &e : v) {
if(res.empty() or res.back().fi != e)
res.eb(e, 1);
else
res.back().se++;
}
return res;
}
vector<pair<char, int>> runLength(const string &v) {
vector<pair<char, int>> res;
for(auto &e : v) {
if(res.empty() or res.back().fi != e)
res.eb(e, 1);
else
res.back().se++;
}
return res;
}
struct string_converter {
char start = 0;
char type(const char &c) const { return (islower(c) ? 'a' : isupper(c) ? 'A' : isdigit(c) ? '0' : 0); }
int convert(const char &c) {
if(!start) start = type(c);
return c - start;
}
int convert(const char &c, const string &chars) { return chars.find(c); }
template <typename T> auto convert(const T &v) {
vector<decltype(convert(v[0]))> ret;
ret.reserve(size(v));
for(auto &&e : v) ret.emplace_back(convert(e));
return ret;
}
template <typename T> auto convert(const T &v, const string &chars) {
vector<decltype(convert(v[0], chars))> ret;
ret.reserve(size(v));
for(auto &&e : v) ret.emplace_back(convert(e, chars));
return ret;
}
int operator()(const char &v, char s = 0) {
start = s;
return convert(v);
}
int operator()(const char &v, const string &chars) { return convert(v, chars); }
template <typename T> auto operator()(const T &v, char s = 0) {
start = s;
return convert(v);
}
template <typename T> auto operator()(const T &v, const string &chars) { return convert(v, chars); }
} toint;
template <class T, class F> T bin_search(T ok, T ng, const F &f) {
while(abs(ok - ng) > 1) {
T mid = ok + ng >> 1;
(f(mid) ? ok : ng) = mid;
}
return ok;
}
template <class T, class F> T bin_search_double(T ok, T ng, const F &f, int iter = 80) {
while(iter--) {
T mid = (ok + ng) / 2;
(f(mid) ? ok : ng) = mid;
}
return ok;
}
struct Setup_io {
Setup_io() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(11);
}
} setup_io;
#endif
#pragma endregion
int main() {
TEST {
INT(n);
STR(s);
auto p = runLength(s);
int sum = count(all(s), '1');
bool flag = false;
flag |= (p[0].fi == '0' or p.back().fi == '0');
fore(x, y, p) flag |= (x == '0' and y > 1);
if(flag)
OUT(sum);
else {
int mi = inf<int>;
fore(x, y, p) if(x == '1') chmin(mi, y);
OUT(sum + mi);
}
}
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3520kb
input:
3 2 01 5 00110 9 101010101
output:
1 2 6
result:
ok 3 number(s): "1 2 6"
Test #2:
score: 0
Accepted
time: 3ms
memory: 3544kb
input:
10000 15 010111111011011 10 1000101111 10 0011111101 1 0 3 110 4 1000 8 10000111 20 00000101000100001110 13 1101110110110 13 0111100011010 17 00001001111110101 1 0 20 10001010011000111100 11 00100110101 11 10110101000 15 001011110011000 16 1110111110000111 15 011110110110010 1 0 20 10110001101100010...
output:
11 6 7 0 2 1 4 6 9 7 9 0 9 5 5 7 11 9 0 9 8 7 3 6 0 6 2 5 4 8 10 4 6 1 7 2 1 8 1 8 11 9 13 4 11 13 16 6 4 4 5 1 1 7 7 5 3 0 0 11 8 5 6 7 6 4 9 1 4 5 12 0 2 10 4 3 7 7 3 7 4 3 7 9 15 2 6 6 9 8 6 1 2 6 2 11 10 5 0 0 4 7 4 7 0 4 7 9 3 3 10 3 6 11 8 1 8 6 5 2 4 9 7 1 5 7 8 3 5 11 6 10 8 8 9 16 2 7 6 4 3...
result:
ok 10000 numbers
Test #3:
score: 0
Accepted
time: 4ms
memory: 3572kb
input:
10000 15 011000111111100 13 1101010000010 16 0010000011101101 17 00111000100111101 3 101 19 1111101000101001001 13 0011101011111 11 10011100010 12 010101010001 2 01 13 1110010011111 12 101010001000 2 10 19 1010011010011011011 2 01 3 101 8 01001110 5 00111 20 10100010100101111101 15 010110011100010 3...
output:
9 5 7 9 3 10 9 5 5 1 9 4 1 11 1 3 4 3 11 7 1 3 0 4 7 5 4 5 7 11 9 10 3 6 3 12 5 8 10 8 0 5 6 9 4 0 10 4 5 9 8 5 9 4 10 9 11 2 9 9 9 5 5 7 2 3 5 2 10 9 3 12 5 9 4 0 2 8 7 1 11 9 6 2 8 7 6 5 7 7 12 2 7 3 3 11 5 7 2 1 15 1 5 7 8 4 10 7 1 9 2 3 9 7 11 4 4 4 8 5 3 0 8 3 2 2 8 1 3 7 8 7 3 0 6 4 7 0 1 0 5 ...
result:
ok 10000 numbers
Test #4:
score: 0
Accepted
time: 3ms
memory: 3524kb
input:
10000 3 101 11 11101111011 7 1111001 2 01 8 10101010 20 11010101000011101010 2 10 9 000000000 15 010010100001110 20 01000000111101010010 19 0110001000100000000 17 01011011011100001 17 11010011000101000 18 001110110101011101 11 01010110011 4 1001 13 0011011101101 12 110010100011 18 001111011101110001...
output:
3 11 5 1 4 10 1 0 6 8 4 9 7 11 6 2 8 6 11 7 2 6 4 6 4 7 4 3 9 0 12 0 1 2 10 6 5 1 10 3 7 6 7 6 10 1 0 5 4 8 4 1 8 5 5 1 4 12 4 4 2 3 7 9 8 4 10 3 1 0 1 6 2 7 3 9 8 2 5 2 3 6 12 2 5 6 2 0 3 4 7 5 1 0 2 4 6 3 7 0 2 0 7 1 4 1 5 4 2 1 0 4 4 10 9 0 2 7 5 5 1 6 7 12 9 10 5 5 6 4 2 12 6 1 4 3 4 7 2 1 6 1 7...
result:
ok 10000 numbers
Test #5:
score: 0
Accepted
time: 3ms
memory: 3576kb
input:
10000 11 10001110000 9 000101000 5 10000 6 110001 3 101 11 00000100000 5 01011 3 010 11 11011010101 16 0111000001110000 17 11111001011100001 15 010010000101000 19 0000010100011000010 2 10 11 01111000001 13 0000011011011 8 01101111 8 10110000 8 10011000 20 01010000001010001111 9 100110000 6 100011 12...
output:
4 2 1 3 3 1 3 1 8 6 10 4 5 1 5 6 6 3 3 8 3 3 8 7 1 11 7 9 6 0 13 6 1 5 2 7 10 7 7 3 12 1 5 8 3 0 10 3 2 6 1 2 6 6 8 3 13 0 6 1 6 1 5 5 5 3 7 6 5 3 5 9 6 4 4 4 4 4 7 8 5 4 6 2 7 4 3 3 5 3 6 2 1 3 8 7 3 6 7 9 4 4 2 0 4 11 5 7 2 6 4 6 2 7 16 0 15 7 1 5 9 2 7 1 3 0 2 7 9 5 7 7 6 8 12 0 2 10 8 4 2 9 6 4 ...
result:
ok 10000 numbers
Test #6:
score: 0
Accepted
time: 2ms
memory: 3436kb
input:
1000 148 1010100100101111011110111111011100111001010010011011110011001000011000111100000011110101001011001111111101100101111011001110100010110010111001001001 116 10001011000010111110001100110001100000100000011111000111110011110101001001111000001010000101111110010111000010100100 132 00100000011011011...
output:
83 54 67 52 51 56 52 86 106 72 54 68 77 78 54 77 78 69 85 61 51 74 72 87 85 54 86 92 87 88 52 94 73 57 81 46 54 58 54 86 80 65 49 98 84 79 77 72 43 98 52 100 71 79 61 88 78 95 60 47 78 58 76 62 72 70 88 84 60 76 94 89 69 54 91 45 56 50 90 54 90 58 76 57 75 87 99 66 49 110 96 50 60 90 63 71 74 69 52 ...
result:
ok 1000 numbers
Test #7:
score: 0
Accepted
time: 2ms
memory: 3668kb
input:
1000 194 10110101010110010100010010010110011101001011000101101111001101011101011010101100111001011010000011111000000000111100111001101010001010110000101011100100110110010000000100010001010000101100010011 175 11100110100010011110110101110000011011001100110010001000111110010000001011111011101110101011...
output:
90 96 85 72 61 55 91 83 105 56 62 71 73 95 78 99 54 57 65 59 50 81 55 79 90 83 47 75 67 86 80 87 89 65 63 76 88 71 97 81 100 91 58 55 55 86 87 86 68 79 88 92 87 98 89 78 97 71 65 87 68 66 63 70 101 85 98 68 91 55 55 64 100 60 96 65 70 97 107 96 73 71 99 104 67 72 67 52 114 71 55 108 73 59 74 56 43 5...
result:
ok 1000 numbers
Test #8:
score: 0
Accepted
time: 2ms
memory: 3432kb
input:
1000 139 1001100011010110010000111100010110101111111101011100011111101001000000010010000110010010100111000110111000111011011100110100001000100101111 191 011110110101000100010110000111111111110011001111101111111010100101000111011011111010101011101011010100101000011101010011010000011010000100000111110...
output:
70 103 63 99 71 74 94 55 95 82 51 85 100 94 65 89 88 83 81 72 106 94 76 73 86 60 79 41 105 71 89 60 95 85 68 55 66 60 58 109 99 86 55 58 91 69 102 60 90 89 66 67 96 71 45 51 83 50 72 54 99 59 57 52 72 60 99 73 72 98 80 92 71 94 66 74 65 81 78 59 86 66 95 84 78 69 83 109 80 99 97 43 80 85 102 74 87 1...
result:
ok 1000 numbers
Test #9:
score: 0
Accepted
time: 2ms
memory: 3700kb
input:
100 1953 000011010101001001100101111111011100000011000101001011001000111110000010000100011011011101101100110111110010111011100010011001011011100110100000001011100001101100101001111101001101100010000110111101001101011110011110101000111001001000010011001001001100110010000110011001001001001101001101011...
output:
958 970 973 973 985 956 983 1025 976 967 914 988 941 980 1009 1006 986 960 962 971 999 986 980 960 963 976 972 1008 967 1006 966 920 981 941 1007 998 947 993 943 956 963 976 957 955 954 986 943 973 1052 961 1031 940 944 1024 963 987 955 949 961 954 1001 997 945 1007 979 913 977 982 961 997 964 993 9...
result:
ok 100 numbers
Test #10:
score: 0
Accepted
time: 2ms
memory: 3696kb
input:
100 1966 000100000110010100010010100111001000111000101101001101010110001001010111010111011000011111110001010010010100100001010110010011010011100001001111000111111101101001010101111111100111011011110010011011110011000111001001101101111001100010011011110111111011011110011100011000111111100100100101100...
output:
956 973 990 941 970 973 1011 950 958 986 1029 986 923 972 1015 972 1006 981 976 975 1010 968 959 955 1010 949 955 934 980 982 985 930 968 959 944 944 1012 965 931 960 1007 957 982 972 1029 933 997 973 996 1013 995 1006 986 993 1009 989 983 971 997 999 948 984 985 994 950 972 969 938 938 986 938 957 ...
result:
ok 100 numbers
Test #11:
score: 0
Accepted
time: 2ms
memory: 3616kb
input:
100 1944 000111001010101100110101111111111100111101111101101100011011111101000010110101001101010111001011111111100011001001111111100011100011011110101010110011110100011001010111000000100011100010101101101011010111010010000110111001100100100001001100111100100001111001001000001101101001110100001001100...
output:
981 968 975 940 957 975 955 958 1018 915 956 955 988 996 954 955 927 973 964 976 1009 1003 1001 1005 967 983 1004 970 946 981 958 978 967 1010 945 1010 973 913 982 961 991 999 972 991 962 959 992 969 974 927 969 986 942 998 1054 992 982 939 985 995 968 1002 974 959 995 958 1026 984 956 997 955 931 9...
result:
ok 100 numbers
Test #12:
score: 0
Accepted
time: 0ms
memory: 3708kb
input:
10 19948 110101100011011100011101001011001010100111011010100010100010011110000000111010110110101101111010100110110010110001111011000011100000001001011010101000000001100010010000110110010000110011100011011001001000011001110110010000100000010010000110001110011100000001101101101001101111100101100011000...
output:
10080 9830 9978 10115 9897 9923 10103 9978 9797 10109
result:
ok 10 numbers
Test #13:
score: 0
Accepted
time: 2ms
memory: 3520kb
input:
10 19961 111110110011100100001010010001111111100010101110110110011010111001010011110001110001100101001111100011010101011001010110101011000000101110111110001001011001011110111100110101100000101010101101001000110110001000110001100101101000100001001110100100111010101101110001111001111001110101101000000...
output:
10032 9922 9984 10055 9879 9974 10013 9951 9938 10033
result:
ok 10 numbers
Test #14:
score: 0
Accepted
time: 2ms
memory: 3704kb
input:
10 19939 001011111011011000100101101101111011011001110110010010000111001000000110100010100000100111010011001110100010100011100110101010001000100000000001010101111101011001101110001011101000010010011000101010010010010100111100100010110100101011110001011010100100000100000111101000101101001001000100001...
output:
9922 10118 9938 9870 10122 10012 9797 10032 10131 9871
result:
ok 10 numbers
Test #15:
score: 0
Accepted
time: 2ms
memory: 4316kb
input:
1 199978 100101000010100110000010001110101101000110011001000001100000110000001101000100111100101001010111010000010001100011011110001000100001011111100000010110101001111100001011001011110011111011100001000010010001001000111000010011100000111110101111110111111011111000100011111000101111110011001110010...
output:
99976
result:
ok 1 number(s): "99976"
Test #16:
score: 0
Accepted
time: 2ms
memory: 4276kb
input:
1 199956 101010000010011011100001110110111000100001111001100001001100000010111000001111111011100011011001111101110111001001110010111000100000101001001100001110100001111011010100101001011011000111110110110000110001011001110001000100101110011101100110111001101001000101110101111001011101001111100110010...
output:
100014
result:
ok 1 number(s): "100014"
Test #17:
score: 0
Accepted
time: 0ms
memory: 4452kb
input:
1 199901 011011010100000001011110101100000100001100100101000101010001110101111111111100101010101011100101111000000000110001000101111010110000000100100011000010101101011111010100110110000011111110001100100000011111000101110110100000110110000101110000000001110101101101101101101100001011011110111101010...
output:
99999
result:
ok 1 number(s): "99999"
Test #18:
score: 0
Accepted
time: 0ms
memory: 4344kb
input:
1 199947 011101000100111001101001110001010000110111110101110011101110000000101011101011110011101101111001011101100011110011101101010011010100101011100100010110110001011110101010010100000001100100111001000010101011110000100001111111111011100011011001001010000011000000101011111101011101110010010101011...
output:
99997
result:
ok 1 number(s): "99997"
Test #19:
score: 0
Accepted
time: 2ms
memory: 4372kb
input:
1 199993 110110001101000101101010101001000010010010001001110111110010110111011110101000110110000111000100111000000101001011111000110011011111111000001011011011111000011011100000101011101101011101100110110111000101101101101110111010100001100001010101110100000001100111110101111100101011100010111000001...
output:
100016
result:
ok 1 number(s): "100016"
Test #20:
score: 0
Accepted
time: 2ms
memory: 4348kb
input:
1 199971 100001011011111101011111000011111111001101001001011011101111011000001001110011100111000101001100010001110010100001010010110111001111010111100111100011110100111011110100101001101101100101010010011111111011111000101001001111101101001010000111011111011111101111100101101101111101011110010010000...
output:
99947
result:
ok 1 number(s): "99947"
Test #21:
score: 0
Accepted
time: 2ms
memory: 4352kb
input:
1 199916 101011011011101001110000011111101011100001111001111001000010001001011000000000100110011001110010010110010100011111110111000111101111111000000000111111110000101100011010011110110101011100001101001101011111000101111110010000111101001100001010000001101001000010110011101100001011011110111010000...
output:
100003
result:
ok 1 number(s): "100003"
Extra Test:
score: 0
Extra Test Passed