int n; string ts[55]; vector<string> pre, suf, mid;
voidprase(){ pre.clear(); suf.clear(); mid.clear(); for (int k = 0; k < n; ++k) { string &s = ts[k]; int la = 0; for (int i = 0; i < s.length(); ++i) { if (s[i] == '*') { if (la == 0) pre.emplace_back(s.substr(la, i - la)); else mid.emplace_back(s.substr(la, i - la)); la = i + 1; } } suf.emplace_back(s.substr(la)); } }
boolcheck(string &s){ auto cmp = [&](string &a, string &b) { return a.length() > b.length(); }; sort(pre.begin(), pre.end(), cmp); sort(suf.begin(), suf.end(), cmp); for (int i = 1; i < pre.size(); ++i) { if (pre[0].find(pre[i]) != 0) returntrue; } for (int i = 1; i < suf.size(); ++i) { if (suf[i].empty()) break; if (suf[0].rfind(suf[i]) != suf[0].length() - suf[i].length()) returntrue; } s = pre[0]; for (string &t : mid) { s += t; } s += suf[0]; returnfalse; }
intmain(){ int TT; cin >> TT; for (int cas = 1; cas <= TT; ++cas) { string ans; cin >> n; for (int i = 0; i < n; ++i) cin >> ts[i]; prase(); if (check(ans)) ans = '\*'; printf("Case #%d: %s\n", cas, ans.c_str()); } return0; }
int main() { int TT; cin >> TT; for (int cas = 1; cas <= TT; ++cas) { int n; cin >> n; printf("Case #%d:\n", cas); if (n <= 30) { for (int i = 1; i <= n; ++i) { printf("%d 1\n", i); } } else { int t = n - 30, cc = 30, j = 1, i; for (i = 1; i <= 30; ++i) { if (t >> (i - 1) & 1) { if (j != i) { while (j < i) printf("%d %d\n", i, j++); } else { while (j > 1) printf("%d %d\n", i, j--); } } else --cc; printf("%d %d\n", i, j); if (j == i) ++j; } while (cc--) { printf("%d %d\n", i++,j); if (j == i - 1) ++j; } } } return0; }
#include <bits/stdc++.h> using namespace std; typedef long long ll; const intN = 1e5 + 5;
int x, y; int u[N], d[N], l[N], r[N], v[N], vis[N];
inline int po(int a, int b){ return a * y + b + 1; }
double calc(intt) { vector<int> tp; if (u[t]) tp.emplace_back(v[u[t]]); if (d[t]) tp.emplace_back(v[d[t]]); if (l[t]) tp.emplace_back(v[l[t]]); if (r[t]) tp.emplace_back(v[r[t]]); double ss = 0; for (int k : tp) ss += k; if (tp.empty()) return 0.0; return ss / tp.size(); }
inline void init(intt) { if (i) u[t] = t - y; else u[t] = 0; if (i + 1 < x) d[t] = t+ y; else d[t] = 0; if (j) l[t] = t-1; else l[t] = 0; if (j + 1 < y) r[t] = t + 1; else r[t] = 0; vis[t] = INF32; }
int main() { int TT; cin >> TT; for (int cas = 1; cas <= TT; ++cas) { int cc = 2; ll sum = 0; cin >> x >> y; for (int i = 0; i < x; ++i) { for (int j = 0; j < y; ++j) { intt = po(i, j); init(t); cin >> v[po(i, j)]; sum += v[po(i, j)]; } } ll ans = sum; queue<int> Q; for (int i = 0; i < x; ++i) { for (int j = 0; j < y; ++j) { intt = po(i, j); if (calc(t) > v[t]) { vis[t] = 0; sum -= v[t]; Q.emplace(t); } } } while (++cc) { if (Q.empty()) break; ans += sum; queue<int> q; while (!Q.empty()) { intt = Q.front(); Q.pop(); if (u[t]) d[u[t]] = d[t], q.emplace(u[t]); if (d[t]) u[d[t]] = u[t], q.emplace(d[t]); if (l[t]) r[l[t]] = r[t], q.emplace(l[t]); if (r[t]) l[r[t]] = l[t], q.emplace(r[t]); } while (!q.empty()) { intt = q.front(); q.pop(); if (vis[t] <= cc) continue; if (calc(t) > v[t]) { vis[t] = cc; sum -= v[t]; Q.emplace(t); } } } printf("Case #%d: %lld\n", cas, ans); } return 0; }