# 2020 Multi-University Training Contest 3

## Contest Info

Solved A B C D E F G H I J K
8 / 11 Ø - Ø O O Ø O O O - -
• O 在比赛中通过
• Ø 赛后通过
• ! 尝试了但是失败了
• - 没有尝试

## Solutions

### A. Tokitsukaze, CSL and Palindrome Game

"掷骰子"类问题有个经典结论，假设我们要得到的序列长度为$$L$$，字符集大小为$$S$$。那么我每次随机在后面添加一个字符，最后得到期望字符串$$t$$的期望次数为：

$\sum_{i=1}^La_iS^i$

Code
// Author : heyuhhh
// Created Time : 2020/07/31 11:10:13
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
void err(int x) {cerr << x;}
void err(long long x) {cerr << x;}
void err(double x) {cerr << x;}
void err(char x) {cerr << '"' << x << '"';}
void err(const string &x) {cerr << '"' << x << '"';}
void _print() {cerr << "]\n";}
template<typename T, typename V>
void err(const pair<T, V> &x) {cerr << '{'; err(x.first); cerr << ','; err(x.second); cerr << '}';}
template<typename T>
void err(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), err(i); cerr << "}";}
template <typename T, typename... V>
void _print(T t, V... v) {err(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifdef Local
#define dbg(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define dbg(x...)
#endif
const int N = 1e5 + 5;

namespace PAM{
int ch[N][26], fail[N], len[N], st[N], cnt[N];
int val[N];
int sz, n, last;
// 0: len=0  1: len=-1
int New(int l, int f) {
memset(ch[++sz], 0, sizeof(ch[sz]));
len[sz] = l, fail[sz] = f;
return sz;
}
void init() {
sz = -1;
New(0, 1); last = New(-1, 0);
st[n = 0] = -1;
memset(cnt, 0, sizeof(cnt));
}
int getf(int x) {
while(st[n - len[x] - 1] != st[n]) x = fail[x];
return x;
}
bool Insert(int c, int i) { //int
st[++n] = c;
int x = getf(last);
bool F = 0;
if(!ch[x][c]) {
F = 1;
int f = getf(fail[x]);
int now;
now = ch[x][c] = New(len[x] + 2, ch[f][c]);
diff[now] = len[now] - len[fail[now]];
}
last = ch[x][c];
val[i] = last;
cnt[last]++;
return F;
}

int f[N][20];
void build() {
for (int i = 0; i <= sz; i++) {
f[i][0] = fail[i];
}
for (int j = 1; j < 20; j++) {
for (int i = 0; i <= sz; i++) {
f[i][j] = f[f[i][j - 1]][j - 1];
}
}
}
int find(int x, int l) {
x = val[x];
for (int i = 19; i >= 0; i--) {
if (len[f[x][i]] >= l) {
x = f[x][i];
}
}
return x;
}
int cmp(int u, int v) {
while (u > 1 && v > 1) {
if (len[u] != len[v]) {
return len[u] > len[v] ? 1 : -1;
}
if (diff[u] != diff[v]) {
return diff[u] < diff[v] ? 1 : -1;
}
return diff[slink[v]] > diff[u] ? 1 : -1;
} else {
return diff[slink[u]] > diff[v] ? -1 : 1;
}
}
}
if (u <= 1 && v <= 1) return 0;
return u > v ? 1 : -1;
}
};

void run() {
PAM::init();
int n;
cin >> n;
string s;
cin >> s;
for (int i = 0; i < n; i++) {
PAM::Insert(s[i] - 'a', i);
}
PAM::build();
int q;
cin >> q;
while (q--) {
int a, b, c, d;
cin >> a >> b >> c >> d;
--a, --b, --c, --d;
a = PAM::find(b, b - a + 1);
b = PAM::find(d, d - c + 1);
int cmp = PAM::cmp(a, b);
if (cmp == -1) {
cout << "sjfnb" << '\n';
} else if (cmp == 1) {
cout << "cslnb" << '\n';
} else {
cout << "draw" << '\n';
}
}
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}


### C. Tokitsukaze and Colorful Tree

$\sum_{1\leq u<v\leq n,col[u]=col[v],u,v不互为祖先}(val[u]\oplus val[v])$

Code
// Author : heyuhhh
// Created Time : 2020/07/29 15:30:54
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5;
void err(int x) {cerr << x;}
void err(long long x) {cerr << x;}
void err(double x) {cerr << x;}
void err(char x) {cerr << '"' << x << '"';}
void err(const string &x) {cerr << '"' << x << '"';}
void _print() {cerr << "]\n";}
template<typename T, typename V>
void err(const pair<T, V> &x) {cerr << '{'; err(x.first); cerr << ','; err(x.second); cerr << '}';}
template<typename T>
void err(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), err(i); cerr << "}";}
template <typename T, typename... V>
void _print(T t, V... v) {err(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifdef Local
#define dbg(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define dbg(x...)
#endif

#define FO(x) FastIO::write(x)
#define Flush FastIO::Fflush()
namespace FastIO {
const int SIZE = 1 << 16;
char buf[SIZE], obuf[SIZE], str[60];
int bi = SIZE, bn = SIZE, opt;
double D[] = {0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.00000001, 0.000000001, 0.0000000001};
while (bn) {
for (; bi < bn && buf[bi] <= ' '; bi++);
if (bi < bn) break;
bn = fread(buf, 1, SIZE, stdin);
bi = 0;
}
int sn = 0;
while (bn) {
for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];
if (bi < bn) break;
bn = fread(buf, 1, SIZE, stdin);
bi = 0;
}
s[sn] = 0;
return sn;
}
int n = read(str), bf = 0;
if (!n) return 0;
int i = 0; if (str[i] == '-') bf = 1, i++; else if (str[i] == '+') i++;
for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
if (bf) x = -x;
return 1;
}
if (!n) return 0;
int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;
for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
if (bf < 0) x = -x;
return 1;
}
void write(int x) {
if (x == 0) obuf[opt++] = '0';
else {
if (x < 0) obuf[opt++] = '-', x = -x;
int sn = 0;
while (x) str[sn++] = x % 10 + '0', x /= 10;
for (int i = sn - 1; i >= 0; i--) obuf[opt++] = str[i];
}
if (opt >= (SIZE >> 1)) {
fwrite(obuf, 1, opt, stdout);
opt = 0;
}
}
void write(long long x) {
if (x == 0) obuf[opt++] = '0';
else {
if (x < 0) obuf[opt++] = '-', x = -x;
int sn = 0;
while (x) str[sn++] = x % 10 + '0', x /= 10;
for (int i = sn - 1; i >= 0; i--) obuf[opt++] = str[i];
}
if (opt >= (SIZE >> 1)) {
fwrite(obuf, 1, opt, stdout);
opt = 0;
}
}
void write(unsigned long long x) {
if (x == 0) obuf[opt++] = '0';
else {
int sn = 0;
while (x) str[sn++] = x % 10 + '0', x /= 10;
for (int i = sn - 1; i >= 0; i--) obuf[opt++] = str[i];
}
if (opt >= (SIZE >> 1)) {
fwrite(obuf, 1, opt, stdout);
opt = 0;
}
}
void write(char x) {
obuf[opt++] = x;
if (opt >= (SIZE >> 1)) {
fwrite(obuf, 1, opt, stdout);
opt = 0;
}
}
void Fflush() { if (opt) fwrite(obuf, 1, opt, stdout); opt = 0;}
};

struct BIT {
int c[N];
int lowbit(int x) {
return x & (-x);
}
void add(int x, int v) {
for (; x < N; x += lowbit(x)) {
c[x] += v;
}
}
int query(int x) {
int res = 0;
for (;x > 0; x -= lowbit(x)) {
res += c[x];
}
return res;
}
int query(int l, int r) {
return query(r) - query(l - 1);
}
}A[2], B[2];

struct node {
int id, u, val, t;
};

int n;
vector<int> G[N];
vector<node> v[N];
int col[N], val[N];
int in[N], out[N], T;
ll ans[N];

void init() {
for (int i = 1; i <= n; i++) {
G[i].clear();
v[i].clear();
}
T = 0;
}

void dfs(int u, int fa) {
in[u] = ++T;
for (auto v : G[u]) {
if (v != fa) {
dfs(v, u);
}
}
out[u] = T;
}

void work(int color) {
for (int bit = 0; bit < 20; bit++) {
for (auto it : v[color]) {
int u = it.u, id = it.id;
int b = (it.val >> bit & 1);
vector<int> num(2);
num[0] = A[0].query(1, n) - (A[0].query(in[u], out[u]) + B[0].query(in[u]));
num[1] = A[1].query(1, n) - (A[1].query(in[u], out[u]) + B[1].query(in[u]));
// dbg(color, bit, num[0], num[1]);
ans[id] += 1ll * num[b ^ 1] * (1 << bit) * it.t;
}
}
}

void run() {
FI(n);
init();
for (int i = 1; i <= n; i++) {
FI(col[i]);
}
for (int i = 1; i <= n; i++) {
FI(val[i]);
}
for (int i = 1; i <= n; i++) {
v[col[i]].emplace_back(node{0, i, val[i], 1});
}
for (int i = 1; i < n; i++) {
int u, v;
FI(u), FI(v);
G[u].emplace_back(v);
G[v].emplace_back(u);
}
dfs(1, 0);
int q; FI(q);
for (int i = 1; i <= q; i++) {
int op, x, y;
FI(op), FI(x), FI(y);
v[col[x]].emplace_back(node{i, x, val[x], -1});
if (op == 1) {
val[x] = y;
} else {
col[x] = y;
}
v[col[x]].emplace_back(node{i, x, val[x], 1});
}
for (int i = 1; i <= n; i++) {
v[col[i]].emplace_back(node{q + 1, i, val[i], -1});
}
for (int i = 1; i <= n; i++) {
work(i);
}
for (int i = 1; i <= q; i++) {
ans[i] += ans[i - 1];
}
for (int i = 0; i <= q; i++) {
FO(ans[i]), FO('\n');
ans[i] = 0;
}
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; FI(T); while(T--)
run();
Flush;
return 0;
}


### D. Tokitsukaze and Multiple

Code
// Author : heyuhhh
// Created Time : 2020/07/28 12:10:14
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5;
void run() {
int n, p;
cin >> n >> p;
vector<int> a(n + 1);
vector<int> sum(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i] %= p;
}
for (int i = 1; i <= n; i++) {
sum[i] = (sum[i - 1] + a[i]) % p;
}
vector<int> f(n + 1);
vector<int> last(p, -1);
last[0] = 0;
for (int i = 1; i <= n; i++) {
f[i] = f[i - 1];
if (last[sum[i]] != -1) {
f[i] = max(f[i], f[last[sum[i]]] + 1);
}
last[sum[i]] = i;
}
cout << f[n] << '\n';
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}


### E. Little W and Contest

Code
// Author : heyuhhh
// Created Time : 2020/07/28 14:04:45
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5;
void run() {
string s;
cin >> s;
int n = s.length();
int sum = 0;
int Min = n + 1;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
Min = min(Min, sum);
}
if (Min < 0) {
for (int i = 0; i < n && Min < 0; i++) {
if (s[i] == '*') {
s[i] = '(';
++Min;
}
}
}
if (Min < 0) {
cout << "No solution!" << '\n';
return;
}

sum = 0;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
}
for (int i = n - 1; i >= 0 && sum > 0; i--) {
if (s[i] == '*') {
s[i] = ')';
--sum;
}
}
sum = 0;
Min = n + 1;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
Min = min(Min, sum);
}
if (sum != 0 || Min < 0) {
cout << "No solution!" << '\n';
return;
}
string res = "";
for (int i = 0; i < n; i++) {
if (s[i] != '*') res += s[i];
}
cout << res << '\n';
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}


### F. X Number

$$1\leq T\leq 1000,0\leq d\leq9$$

Code
// Author : heyuhhh
// Created Time : 2020/07/28 18:32:04
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
void err(int x) {cerr << x;}
void err(long long x) {cerr << x;}
void err(double x) {cerr << x;}
void err(char x) {cerr << '"' << x << '"';}
void err(const string &x) {cerr << '"' << x << '"';}
void _print() {cerr << "]\n";}
template<typename T, typename V>
void err(const pair<T, V> &x) {cerr << '{'; err(x.first); cerr << ','; err(x.second); cerr << '}';}
template<typename T>
void err(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), err(i); cerr << "}";}
template <typename T, typename... V>
void _print(T t, V... v) {err(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifdef Local
#define dbg(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define dbg(x...)
#endif
const int N = 20;

int a[N], tot;
ll C[N][N];

void init() {
C[0][0] = 1;
for (int i = 1; i < N; i++) {
C[i][0] = 1;
for (int j = 1; j <= i; j++) {
C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
}
}
}

ll calc(int s, vector<int>& cnt, int d, int lim, int t = tot) {
if (lim) {
if (s > t) return 0;
ll res = 0;
for (int i = 1; i < 10; i++) {
++cnt[i];
res += calc(s + 1, cnt, d, 0);
--cnt[i];
}
return res;
}

int now = cnt[d];
int Max = 0;
for (int i = 0; i < 10; i++) {
if (i != d) Max = max(Max, cnt[i]);
}

int len = t - s + 1;
if (len <= 0) {
return Max < now;
}

ll res = 0;
for (int x = max(now, Max + 1); x <= tot; x++) {
vector<ll> f(len + 1);
int t = x - now;
if (t > len) continue;
f[t] = C[len][t];
for (int k = 0; k < 10; k++) {
if (k == d) continue;
for (int i = len; i > t; i--) {
for (int j = t; j < i; j++) if (f[j] != 0) {
if (cnt[k] + i - j >= x) continue;
f[i] += C[len - j][i - j] * f[j];
}
}
}
res += f[len];
}
return res;
}

ll calc(ll x, int d) {
tot = 0;
ll t = x;
while (t) {
a[++tot] = t % 10;
t /= 10;
}
reverse(a + 1, a + tot + 1);
ll res = 0;
for (int i = 1; i <= tot; i++) {
vector<int> cnt(10);
for (int j = 1; j < i; j++) {
++cnt[a[j]];
}
// 1 ~ i - 1匹配
if (i == 1) {
// 前导0
for (int k = i + 1; k <= tot; k++) {
res += calc(k, cnt, d, 1);
}
}
int down = (i == 1 ? 1 : 0);
int up = (i == tot ? 0 : 1);
for (int j = down; j <= a[i] - up; j++) {
++cnt[j];
res += calc(i + 1, cnt, d, 0);
--cnt[j];
}
}
return res;
}

void run() {
ll l, r;
int d;
cin >> l >> r >> d;
ll ans = calc(r, d) - calc(l - 1, d);
cout << ans << '\n';
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
init();
int T; cin >> T; while(T--)
run();
return 0;
}


### G. Tokitsukaze and Rescue

Code
#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXN 57
typedef pair<int,int> pii;
int n,k;
int G[MAXN][MAXN];
int d[MAXN];
bool boom[MAXN][MAXN];
bool v[MAXN];
int fa[MAXN];
const int o=1, t=n;
memset(d,0x3f,sizeof d);
memset(v,0,sizeof v);
d[o]=0; fa[o]=-1;
for(int i=1; i<n; i++) {
int x=-1;
for(int j=1; j<=n; j++) {
if(!v[j] && (x==-1 || d[j]<d[x])) x=j;
}
v[x]=1;
for(int y=1; y<=n; y++) if(!boom[x][y]) {
int nd=d[x]+G[x][y];
if(nd<d[y]) {
d[y]=nd;
fa[y]=x;
}
}
}
int cnt=0;
for(int i=t; ~fa[i]; i=fa[i], cnt++, road++) {
}
}
int ans;
void dfs(int di) {
if(di==k) {
ans=max(ans, d[n]);
return;
}
dfs(di+1);
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout<<fixed<<setprecision(10);
int T; cin>>T;
while(0<T--) {
memset(boom,0,sizeof boom);
ans=0;
cin>>n>>k;
for(int i=0; i<n; i++) {
for(int j=i+1; j<n; j++) {
int u,v,w; cin>>u>>v>>w;
G[u][v]=G[v][u]=w;
}
}
dfs(0);
cout<<ans<<'\n';
}
}


### H. Triangle Collision

Code
#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
using namespace std;
inline long double cross(long double x1, long double x2, long double y1, long double y2) {
return x1*y2-x2*y1;
}
#define EPS 1e-6
int dcmp(long double x) {return (x>EPS)-(x<-EPS);}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout<<fixed<<setprecision(10);
int T; cin>>T;
while(0<T--) {
int L,vx,vy;
long double x,y,L3,xx,yy,zz,vxx,vyy,vzz,t1,t2,t3,dt1,dt2,dt3;
int k;
cin>>L>>x>>y>>vx>>vy>>k;
x+=L/2.0l;
L3=L/sqrtl(2.0l);

xx=x-1.0l/sqrtl(3.0l)*y, yy=2.0l/sqrtl(3.0l)*y;
zz=cross(-xx,L-yy,L-xx,-yy)/L3/2;

vxx=vx-1.0l/sqrtl(3.0l)*vy, vyy=2.0l/sqrtl(3.0l)*vy;
vzz=cross(vxx,vyy,-1,1)/sqrtl(2.0l);

t1=abs(L/vyy), t2=abs(L/vxx), t3=abs(L3/vzz);
#define vx none
#define vy none
#define vz none
if(dcmp(vxx)<0) dt2=xx/-vxx;
else if(dcmp(vxx)>0) dt2=(L-xx)/vxx;

if(dcmp(vyy)<0) dt1=yy/-vyy;
else if(dcmp(vyy)>0) dt1=(L-yy)/vyy;

if(dcmp(vzz)<0) dt3=(L3+zz)/-vzz;
else if(dcmp(vzz)>0) dt3=-zz/vzz;
long double L=0, R=1e11;
while((R-L)>1e-5) {
long double M=L+(R-L)/2;
long long cnt=0;
if(dcmp(vyy)!=0 && dcmp(M-dt1)>=0) {
cnt++;
cnt+=(long long)(floor((M-dt1)/t1)+0.1);
}
if(dcmp(vxx)!=0 && dcmp(M-dt2)>=0) {
cnt++;
cnt+=(long long)(floor((M-dt2)/t2)+0.1);
}
if(dcmp(vzz)!=0 && dcmp(M-dt3)>=0) {
cnt++;
cnt+=(long long)(floor((M-dt3)/t3)+0.1);
}
if(cnt>=k) R=M;
else L=M;
}
cout<<L<<'\n';

}
}


### I. Parentheses Matching

Code
// Author : heyuhhh
// Created Time : 2020/07/28 14:04:45
#include<bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5;
void run() {
string s;
cin >> s;
int n = s.length();
int sum = 0;
int Min = n + 1;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
Min = min(Min, sum);
}
if (Min < 0) {
for (int i = 0; i < n && Min < 0; i++) {
if (s[i] == '*') {
s[i] = '(';
++Min;
}
}
}
if (Min < 0) {
cout << "No solution!" << '\n';
return;
}

sum = 0;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
}
for (int i = n - 1; i >= 0 && sum > 0; i--) {
if (s[i] == '*') {
s[i] = ')';
--sum;
}
}
sum = 0;
Min = n + 1;
for (int i = 0; i < n; i++) {
if (s[i] == ')') --sum;
if (s[i] == '(') ++sum;
Min = min(Min, sum);
}
if (sum != 0 || Min < 0) {
cout << "No solution!" << '\n';
return;
}
string res = "";
for (int i = 0; i < n; i++) {
if (s[i] != '*') res += s[i];
}
cout << res << '\n';
}
int main() {
#ifdef Local
freopen("input.in", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}

posted @ 2020-08-09 14:58  heyuhhh  阅读(216)  评论(0编辑  收藏  举报