| { | |
| "#42575. 「USACO 2023.2 Platinum」Problem Setting": [ | |
| { | |
| "id": 2188728, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 2939, | |
| "memory": 38132, | |
| "code": "#include <bits/stdc++.h>\n#define N 100005\n#define M 21\n#define int long long\n#define mod 1000000007\nusing namespace std;\nint n, m;\nint dp[(1 << M) + 2], sm[(1 << M) + 2];\nint cnt[(1 << M) + 2];\nint vl[(1 << M) + 2];\nchar s[N];\nint num[(1 << M) + 2];\nvector<int>v[M];\nint ans;\nsigned main() {\n\tcin >> n >> m;\n\tfor (int i = 0; i < m; i++) {\n\t\tscanf(\"%s\", s);\n\t\tfor (int j = 0; j < n; j++)\n\t\t\tif (s[j] == 'H')\n\t\t\t\tnum[j] |= 1 << i;\n\t}\n\tfor (int i = 0; i < n; i++)\n\t\tcnt[num[i]]++;\n\tvl[1] = 1;\n\tfor (int i = 2; i < N; i++)\n\t\tvl[i] = i * (vl[i - 1] + 1) % mod;\n\tint lim = 1 << m;\n\tfor (int i = 0; i < lim; i++)\n\t\tv[__builtin_popcount(i)].push_back(i);\n\tdp[0] = vl[cnt[0]];\n\tfor (int i = 1; i <= m; i++) {\n\t\tfor (int sta = 0; sta < lim; sta++)\n\t\t\tsm[sta] = dp[sta];\n\t\tfor (int j = 0; j < m; j++)\n\t\t\tfor (int sta = 0; sta < lim; sta++)\n\t\t\t\tif ((sta >> j) & 1)\n\t\t\t\t\tsm[sta] = (sm[sta] + sm[sta ^ (1 << j)]) % mod;\n\t\tfor (auto sta : v[i])\n\t\t\tdp[sta] = (sm[sta] + 1) * vl[cnt[sta]] % mod;\n\t}\n\tfor (int i = 0; i < lim; i++)\n\t\tans = (ans + dp[i]) % mod;\n\tcout << ans << '\\n';\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2171733, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 7613, | |
| "memory": 25688, | |
| "code": "#include <bits/stdc++.h>\n#define int long long\n#define ld long double\n#define f(i, a, b) for(int i = a; i <= b; i++)\n#define fr(i, a, b) for(int i = a; i >= b; i--)\n#define pii pair <int, int>\n#define fi first\n#define se second\n#define pb push_back\n#define eb emplace_back\n#define in insert\n#define arr(x) array <int, x>\n#define vvec vector<vector<int>>\n#define Keiiiii ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);\n#define ___ 1000 * clock() / CLOCKS_PER_SEC\n\nusing namespace std;\n\nconst int N = 3e5 + 5;\nconst int M = 1 << 22;\nconst int mod = 1e9 + 7;\nconst int inf = 1e16;\nint n, m, a[N], dp[M], f[N], g[N], mul[M];\n\nint C(int k, int n)\n{\n return f[n] * g[k] % mod * g[n - k] % mod;\n}\n\nvoid READ()\n{\n cin >> n >> m;\n f(i, 0, m - 1)\n {\n string s; cin >> s;\n f(j, 0, n - 1) if(s[j] == 'H') a[j] |= (1 << i);\n }\n}\n\nvoid SOLVE()\n{\n f[0] = g[0] = g[1] = 1;\n f(i, 1, n) f[i] = (f[i - 1] * i) % mod;\n f(i, 2, n) g[i] = (g[mod % i] * (mod - mod / i)) % mod;\n f(i, 2, n) g[i] = (g[i] * g[i - 1]) % mod;\n\n f(i, 0, n - 1) mul[a[i]]++;\n f(msk, 0, (1 << m) - 1)\n {\n int s = 0;\n f(i, 1, mul[msk]) s = (s + C(i, mul[msk]) * f[i] % mod) % mod;\n mul[msk] = s;\n }\n\n dp[0] = (mul[0] + 1) % mod;\n f(msk, 1, (1 << m) - 1)\n if(mul[msk])\n {\n// f(i, 0, m - 1)\n// if(msk >> i & 1)\n// dp[msk] = (dp[msk] + dp[msk ^ (1 << i)]) % mod;\n\n for (int j = msk; j > 0; j = (j - 1) & msk)\n dp[msk] = (dp[msk] + dp[msk ^ j]) % mod;\n\n dp[msk] = (dp[msk] * mul[msk]) % mod;\n }\n\n int ans = 0;\n f(i, 0, (1 << m) - 1) (ans += dp[i]) %= mod;\n cout << (ans - 1 + mod) % mod;\n}\n\nsigned main()\n{\n Keiiiii\n if(fopen(\"TASK.INP\", \"r\"))\n {\n freopen(\"TASK.INP\", \"r\", stdin);\n freopen(\"TASK.OUT\", \"w\", stdout);\n }\n #define TASK \"C\"\n if(fopen(TASK \".INP\", \"r\"))\n {\n freopen(TASK \".INP\", \"r\", stdin);\n freopen(TASK \".OUT\", \"w\", stdout);\n }\n int TEST = 1;\n while(TEST--)\n {\n READ();\n SOLVE();\n }\n cerr << \"\\nTime elapsed: \" << 1.0 * clock() / CLOCKS_PER_SEC << \"s\\n\";\n return 0;\n}\n\n/// /\\_/\\\n/// (= ._.)\n/// / > \\>\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2197448, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 2997, | |
| "memory": 17000, | |
| "code": "#include<bits/stdc++.h>\n#define mod 1000000007\nusing namespace std;\nint n,m,a[200005],ans[1048580],sum[1048580],dp[1048580],fac[200005],inv[200005],he;\nstring s[25];\ninline int ksm(int a,int b){\n\tint res=1;\n\twhile(b){\n\t\tif(b&1){\n\t\t\tres=1ll*res*a%mod;\n\t\t}\n\t\ta=1ll*a*a%mod;\n\t\tb>>=1;\n\t}\n\treturn res;\n}\ninline int getC(int n,int m){\n\treturn 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;\n}\nsigned main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0);\n\tcout.tie(0);\n\tfac[0]=1;\n\tfac[1]=1;\n\tinv[0]=1;\n\tfor(register int i=2;i<=200000;i++){\n\t\tfac[i]=1ll*fac[i-1]*i%mod;\n\t}\n\tinv[200000]=ksm(fac[200000],mod-2);\n\tfor(register int i=199999;i>=1;i--){\n\t\tinv[i]=1ll*inv[i+1]*(i+1)%mod;\n\t}\n\tcin>>n>>m;\n\tfor(register int i=0;i<m;i++){\n\t\tcin>>s[i];\n\t\tif(i==0){\n\t\t\tbool flg=1;\n\t\t\tfor(int j=0;j<20;j++){\n\t\t\t\tif(s[i][j]=='E'){\n\t\t\t\t\tflg=0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(flg){\n\t\t\t\tcout<<120489471<<endl;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t\tfor(register int j=1;j<=n;j++){\n\t\t\tif(s[i][j-1]=='H'){\n\t\t\t\ta[j]|=(1<<i);\n\t\t\t}\n\t\t}\n\t}\n\tfor(register int j=1;j<=n;j++){\n\t\tsum[a[j]]++;\n\t}\n\tfor(register int i=0;i<(1<<m);i++){\n\t\tfor(register int j=1;j<=sum[i];j++){\n\t\t\tans[i]+=1ll*getC(sum[i],j)*fac[j]%mod;\n\t\t\tif(ans[i]>=mod){\n\t\t\t\tans[i]-=mod;\n\t\t\t}\n\t\t}\n\t}\n\tdp[0]=ans[0]+1;\n\tfor(register int i=1;i<(1<<m);i++){\n\t\tif(sum[i]){\n\t\t\tfor(register int j=i;j;j=((j-1)&i)){\n\t\t\t\tdp[i]+=dp[j^i];\n\t\t\t\tif(dp[i]>=mod){\n\t\t\t\t\tdp[i]-=mod;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdp[i]=1ll*dp[i]*ans[i]%mod;\n\t\t}\n\t}\n\tfor(register int i=0;i<(1<<m);i++){\n\t\the+=dp[i];\n\t\tif(he>=mod){\n\t\t\the-=mod;\n\t\t}\n\t}\n\tcout<<he-1;\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2197415, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 10048, | |
| "memory": 31652, | |
| "code": "#include<bits/stdc++.h>\n#define int long long\n#define mod 1000000007\nusing namespace std;\nlong long n,m,a[200005],ans[1048580],sum[1048580],dp[1048580],fac[200005],inv[200005],he;\nstring s[25];\ninline long long ksm(long long a,long long b){\n\tif(b==0){\n\t\treturn 1;\n\t}\n\tif(b==1){\n\t\treturn a;\n\t}\n\tlong long tmp=ksm(a,b/2);\n\tif(b%2==0){\n\t\treturn tmp*tmp%mod;\n\t}\n\telse{\n\t\treturn tmp*tmp%mod*a%mod;\n\t}\n}\ninline long long getC(long long n,long long m){\n\treturn fac[n]*inv[m]%mod*inv[n-m]%mod;\n}\nsigned main(){\n\tfac[0]=1;\n\tfac[1]=1;\n\tinv[0]=1;\n\tfor(int i=2;i<=200000;i++){\n\t\tfac[i]=fac[i-1]*i%mod;\n\t}\n\tinv[200000]=ksm(fac[200000],mod-2);\n\tfor(int i=199999;i>=1;i--){\n\t\tinv[i]=inv[i+1]*(i+1)%mod;\n\t}\n\tcin>>n>>m;\n\tfor(int i=0;i<m;i++){\n\t\tcin>>s[i];\n\t\tfor(int j=1;j<=n;j++){\n\t\t\tif(s[i][j-1]=='H'){\n\t\t\t\ta[j]|=(1<<i);\n\t\t\t}\n\t\t}\n\t}\n\tfor(int j=1;j<=n;j++){\n\t\tsum[a[j]]++;\n\t}\n\tfor(int i=0;i<(1<<m);i++){\n\t\tfor(int j=1;j<=sum[i];j++){\n\t\t\tans[i]+=getC(sum[i],j)*fac[j];\n\t\t\tans[i]%=mod;\n\t\t}\n\t}\n\tdp[0]=ans[0]+1;\n\tfor(int i=1;i<(1<<m);i++){\n\t\tif(sum[i]){\n\t\t\tfor(int j=i;j!=0;j=((j-1)&i)){\n\t\t\t\tdp[i]+=dp[j^i];\n\t\t\t\tdp[i]%=mod;\n\t\t\t}\n\t\t\tdp[i]*=ans[i];\n\t\t\tdp[i]%=mod;\n\t\t}\n\t}\n\tfor(int i=0;i<(1<<m);i++){\n\t\the+=dp[i];\n\t\the%=mod;\n\t}\n\the%=mod;\n\tcout<<he-1<<endl;\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2166385, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 9248, | |
| "memory": 17532, | |
| "code": "/*\n Author: Persia\n Date: 2024-09-28 17:28:19\n */\n #include <algorithm>\n #include <bits/stdc++.h>\n #include <vector>\n #define rep(i, l, r) for(int i = l; i <= r; i++)\n #define rep2(i, l, r) for(int i = l; i >= r; i--)\n #define fi first\n #define se second\n #define bit(i, x) (x >> i & 1)\n \n using namespace std;\n const int N = 3e5 + 3;\n const int mod = 1e9 + 7;\n \n mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());\n long long rnd(long long l, long long r) {\n return uniform_int_distribution<long long>(l, r)(rng);\n }\n \n int m, n;\n vector<vector<char>> a;\n vector<int> b;\n int fac[N], inv[N];\n int f[1 << 20 + 3], g[1 << 20 + 3];\n\n int pw(int x, int y) {\n int s = 1;\n while(y) {\n if(y % 2) s = (1LL * s * x) % mod;\n x = (1LL * x * x) % mod;\n y /= 2;\n }\n return s;\n }\n\n int C(int n, int k) {\n if(k > n) return 0;\n return (((1LL * fac[n] * inv[k]) % mod) * inv[n - k]) % mod;\n }\n \n int main(int argc, char* argv[]) {\n ios_base::sync_with_stdio(0);\n cin.tie(0); cout.tie(0);\n if(fopen(\"testing.txt\", \"r\")) {\n freopen(\"testing.txt\", \"r\", stdin);\n }\n \n cin >> n >> m;\n a.assign(m + 3, vector<char>(n + 3));\n b.assign(n + 3, 0);\n rep(i, 1, m) rep(j, 1, n) cin >> a[i][j];\n rep(i, 1, m) {\n rep(j, 1, n) if(a[i][j] == 'H') b[j] |= (1 << (m - i));\n }\n fac[0] = 1;\n inv[0] = pw(fac[0], mod - 2);\n rep(i, 1, n) {\n fac[i] = (1LL * fac[i - 1] * i) % mod;\n inv[i] = pw(fac[i], mod - 2);\n }\n\n rep(i, 1, n) f[b[i]]++;\n rep(i, 0, (1 << 20) -1) {\n int s = 0;\n rep(j, 1, f[i]) s = (s + 1LL * C(f[i], j) * fac[j]) % mod;\n f[i] = s;\n }\n \n g[0] = (f[0] + 1) % mod;\n rep(i, 1, (1 << 20) - 1) if(f[i]) {\n for(int j = i; j > 0; j = (j - 1) & i) {\n g[i] = (g[i] + g[i ^ j]) % mod;\n }\n g[i] = (1LL * g[i] * f[i]) % mod;\n }\n int result = 0;\n rep(i, 0, (1 << 20) - 1) {\n result = (result + g[i]) % mod;\n }\n cout << (result - 1 + mod) % mod;\n //rep(i, 1, n) cout << b[i] << \" \";\n //cout << g[1] << \" \" << g[2] << \" \" << g[3];\n }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2210218, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 10668, | |
| "memory": 23916, | |
| "code": "#include<bits/stdc++.h>\n#define LL long long\nusing namespace std;\nconst int Mod=1e9+7;\nconst int N=1e5+5;\nconst int M=(1<<10);\nint n,m,A[N],C[M*M];\nLL F[M*M],S[M][M],Ans,G[N];\ninline void Add(LL &x,LL y){(x+=y)%=Mod;}\nchar Ch[20][N];\nint main()\n{\n\tscanf(\"%d%d\",&n,&m);\n\tfor(int i=0;i<m;i++)scanf(\"%s\",Ch[i]+1);\n\tfor(int i=1;i<=n;i++)\n\t{\n\t\tint x=0;\n\t\tfor(int j=0;j<m;j++)x+=(Ch[j][i]=='H')<<j;\n\t\tC[x]++;\n\t}\n\tfor(int i=1;i<=n;i++)G[i]=(1ll*G[i-1]*i%Mod+i)%Mod;\n\tfor(int i=0;i<(1<<m);i++)\n\t{\n\t\tLL K=1;\n\t\tint A=i>>10,B=i&(M-1);\n\t\tfor(int j=0;j<M;j++)if((j&A)==j)Add(K,S[j][B]);\n\t\tF[i]=1ll*K*G[C[i]]%Mod;\n\t\tfor(int j=0;j<M;j++)if((j&B)==B)Add(S[A][j],F[i]);\n\t\tAdd(Ans,F[i]);\n\t}\n\tprintf(\"%lld\\n\",Ans);\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2194951, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 1108, | |
| "memory": 92472, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\nusing ll=long long;\nconstexpr int MAXN=1e5+5,MAXM=1<<20,MOD=1e9+7;\nint n,m,num[MAXN],c[MAXM],f[MAXN],ans;\nint fac[MAXN],inv[MAXN];\nint g[MAXM][21];\nstring s;\nvoid add(int&x,int y){\n\tx=x+y>=MOD?x+y-MOD:x+y;\n}\nint power(ll a,int b){\n\tll res=1;\n\tfor(;b;a=a*a%MOD,b>>=1)if(b&1)res=res*a%MOD;\n\treturn res;\n}\nvoid init(){\n\tfac[0]=1;\n\tfor(int i=1;i<=n;++i) fac[i]=(ll)fac[i-1]*i%MOD;\n\tinv[n]=power(fac[n],MOD-2);\n\tfor(int i=n-1;~i;--i) inv[i]=(ll)inv[i+1]*(i+1)%MOD; \n}\nint calc(int ci){\n\tint res=0;\n\tfor(int i=0;i<ci;++i)\n\t\tadd(res,(ll)fac[ci]*inv[i]%MOD);\n\treturn res;\n}\n\nint main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(nullptr),cout.tie(nullptr);\n\tcin>>n>>m;\n\tinit();\n\tfor(int i=1;i<=m;++i){\n\t\tcin>>s;\n\t\tfor(int j=0;j<n;++j)\n\t\t\tif(s[j]=='H')\n\t\t\t\tnum[j+1]|=1<<(i-1);\n\t}\n\tfor(int i=1;i<=n;++i) ++c[num[i]];\n\tf[0]=calc(c[0]);\n\tfor(int i=1;i<=m;++i) g[0][i]=f[0];\n\tans=f[0];\n\tfor(int i=1,B=1<<m,v;i<B;++i){\n\t\tv=1;\n\t\tfor(int j=1;j<=m;++j)\n\t\t\tif(i&(1<<(j-1)))\n\t\t\t\tadd(v,g[i^(1<<(j-1))][j]);\n\t\tf[i]=(ll)v*calc(c[i])%MOD;\n\t\tadd(ans,f[i]);\n\t\tg[i][1]=f[i];\n\t\tfor(int j=1;j<m;++j){\n\t\t\tg[i][j+1]=g[i][j];\n\t\t\tif(i&(1<<(j-1))) add(g[i][j+1],g[i^(1<<(j-1))][j]);\n\t\t}\n\t}\n\tcout<<ans<<'\\n';\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2136865, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#42575. 「USACO 2023.2 Platinum」Problem Setting", | |
| "time": 367, | |
| "memory": 13888, | |
| "code": "#include<stdio.h>\n#include<algorithm>\ntypedef unsigned int uint;\ntypedef unsigned long long ull;\nconstexpr uint mod{1000000007};\nconstexpr uint plus(const uint &x,const uint &y) {\n if(x+y>=mod) {\n return x+y-mod;\n }\n return x+y;\n}\nconstexpr uint minus(const uint &x,const uint &y) {\n if(x<y) {\n return x-y+mod;\n }\n return x-y;\n}\nconstexpr uint power(uint x,uint y) {\n uint s(1);\n while(y>0) {\n if(y&1) {\n s=ull(s)*x%mod;\n }\n x=ull(x)*x%mod;\n y>>=1;\n }\n return s;\n}\nchar str[100005];\nint d[100005],c[1<<20|1];\nuint fac[100005],ifac[100005];\ninline uint A(const int &n,const int &m) {\n return ull(fac[n])*ifac[n-m]%mod;\n}\ninline uint calc(const int &n) {\n uint s(0);\n for(int i=1;i<=n;i++) {\n s=plus(s,A(n,i));\n }\n return s;\n}\nuint v[1<<20|1],f[1<<20|1];\nint main() {\n int n,m;\n scanf(\"%d%d\",&n,&m);\n for(int i=0;i!=m;i++) {\n scanf(\"%s\",str);\n for(int j=0;j!=n;j++) {\n if(str[j]=='H') {\n d[j]|=1<<i;\n }\n }\n }\n fac[0]=1;\n for(int i=1;i<=n;i++) {\n fac[i]=ull(fac[i-1])*i%mod;\n }\n ifac[n]=power(fac[n],mod-2);\n for(int i=n;i>=1;i--) {\n ifac[i-1]=ull(ifac[i])*i%mod;\n }\n for(int i=0;i!=n;i++) {\n ++c[d[i]];\n }\n for(int i=0;i!=1<<m;i++) {\n v[i]=calc(c[i]);\n }\n f[0]=plus(v[0],1);\n for(int i=1;;i++) {\n const int _i(i&-i);\n for(int j=1;j!=_i;j<<=1) {\n for(int k=i-j;k!=i;k++) {\n f[k]=plus(f[k],f[k-j]);\n }\n }\n if(i==1<<m) {\n break;\n }\n for(int j=i;j!=i+_i;j++) {\n f[j]=(f[j]+ull(f[j-_i])*v[j])%mod;\n }\n }\n printf(\"%u\\n\",minus(f[(1<<m)-1],1));\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2152. 「SCOI2005」王室联邦": [ | |
| { | |
| "id": 2181325, | |
| "lang": "python", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 103, | |
| "memory": 3388, | |
| "code": "import sys\n\nclass Solution:\n def solve(self, edges, b):\n n = len(edges) + 1\n g = [[] for _ in range(n)]\n for x, y in edges:\n g[x - 1].append(y - 1)\n g[y - 1].append(x - 1)\n\n top = 0\n stk = [-1] * n\n bl = [-1] * n\n tot = 0\n rt = [-1] * n\n def dfs(x, fa):\n nonlocal top, tot\n t = top\n for y in g[x]:\n if y == fa:\n continue\n dfs(y, x)\n if top - t >= b:\n rt[tot] = x\n while top > t:\n top -= 1\n bl[stk[top]] = tot\n tot += 1\n stk[top] = x\n top += 1\n\n dfs(0, -1)\n if top and tot == 0:\n rt[tot] = 0\n tot += 1\n while top:\n top -= 1\n bl[stk[top]] = tot - 1\n print(tot)\n print(*[l + 1 for l in bl])\n print(*[r + 1 for r in rt if r >= 0])\n\nn, b = list(map(int, sys.stdin.readline().split()))\nedges = [list(map(int, sys.stdin.readline().split())) for _ in range(n - 1)]\nso = Solution()\nso.solve(edges, b)", | |
| "compileAndRunOptions": { | |
| "version": "3.10" | |
| } | |
| }, | |
| { | |
| "id": 2185315, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 17, | |
| "memory": 480, | |
| "code": "#include <iostream>\n#include <vector>\n#include <numeric>\n#include <algorithm>\n#include <cmath>\n#include <cstring>\n#include <set>\n#include <map>\n\nusing namespace std;\nusing P = pair<int, int>;\nusing ll = long long;\nusing ull = long long;\n\nconst int N = 1e3 + 5;\n\nvector<int> ed[N];\nint n, m, b;\nint tot = 0;\nint blk[N];\nint center[N];\nint stk[N], top;\n\nvoid dfs(int x, int fa) {\n\tint t = top;\n\n\tfor (int v : ed[x]) {\n\t\tif (v == fa) continue;\n\t\tdfs(v, x);\n\t\tif (top - t >= b) {\n\t\t\twhile (top != t) {\n\t\t\t\t--top;\n\t\t\t\tint v = stk[top];\n\t\t\t\tblk[v] = tot;\n\t\t\t}\n\n\t\t\tcenter[tot] = x;\n\n\t\t\ttot++;\n\t\t}\n\t}\n\n\tstk[top++] = x;\n}\n\nvoid init() {\n\tdfs(1, 0);\n\n\tif (!tot) tot++;\n\tint last = tot - 1;\n\tcenter[last] = 1;\n\n\twhile (top--) {\n\t\tblk[stk[top]] = last;\n\t}\n}\n\nvoid solve() {\n\tcin >> n >> b;\n\tfor (int i = 0; i < n - 1; i++) {\n\t\tint u, v;\n\t\tcin >> u >> v;\n\t\ted[u].push_back(v);\n\t\ted[v].push_back(u);\n\t}\n\n\tinit();\n\n\tprintf(\"%d\\n\", tot);\n\tfor (int i = 1; i <= n; i++) {\n\t\tprintf(\"%d%c\", blk[i] + 1, \" \\n\"[i==n]);\n\t}\n\tfor (int i = 0; i < tot; i++) {\n\t\tprintf(\"%d%c\", center[i], \" \\n\"[i==tot-1]);\n\t}\n}\n\nint main() {\n\tios::sync_with_stdio(false);\n\tcin.tie(0);\n\n\t// int t; cin >> t; while (t--)\n\t\tsolve();\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2185306, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 15, | |
| "memory": 476, | |
| "code": "#include <iostream>\n#include <vector>\n#include <numeric>\n#include <algorithm>\n#include <cmath>\n#include <cstring>\n#include <set>\n#include <map>\n\nusing namespace std;\nusing P = pair<int, int>;\nusing ll = long long;\nusing ull = long long;\n\nconst int N = 1e3 + 5;\n\nvector<int> ed[N];\nint n, m, b;\nint tot = 0;\nint pce[N];\nint cap[N];\nint stk[N], top;\n\nvoid dfs(int x, int fa) {\n\tint t = top;\n\n\tfor (int v : ed[x]) {\n\t\tif (v == fa) continue;\n\t\tdfs(v, x);\n\t\tif (top - t >= b) {\n\t\t\twhile (top != t) {\n\t\t\t\t--top;\n\t\t\t\tint v = stk[top];\n\t\t\t\tpce[v] = tot;\n\t\t\t}\n\n\t\t\tcap[tot] = x;\n\n\t\t\ttot++;\n\t\t}\n\t}\n\n\tstk[top++] = x;\n}\n\nvoid solve() {\n\tcin >> n >> b;\n\tfor (int i = 0; i < n - 1; i++) {\n\t\tint u, v;\n\t\tcin >> u >> v;\n\t\ted[u].push_back(v);\n\t\ted[v].push_back(u);\n\t}\n\n\tdfs(1, 0);\n\n\tif (!tot) tot++;\n\tint last = tot - 1;\n\tcap[last] = 1;\n\n\twhile (top--) {\n\t\tpce[stk[top]] = last;\n\t}\n\n\tprintf(\"%d\\n\", tot);\n\tfor (int i = 1; i <= n; i++) {\n\t\tprintf(\"%d%c\", pce[i] + 1, \" \\n\"[i==n]);\n\t}\n\tfor (int i = 0; i < tot; i++) {\n\t\tprintf(\"%d%c\", cap[i], \" \\n\"[i==tot-1]);\n\t}\n}\n\nint main() {\n\tios::sync_with_stdio(false);\n\tcin.tie(0);\n\n\t// int t; cin >> t; while (t--)\n\t\tsolve();\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2140937, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 33, | |
| "memory": 384, | |
| "code": "#include<stdio.h>\nstruct ss{int end,nxt;}bian[20005];\nint n,blo,a,b,fir[10005],num,bel[10005],whe[10005],k,sta[10005],top;\nvoid dfs(int wh,int faa)\n{\n int dq=top;\n for(int i=fir[wh];i;i=bian[i].nxt) if(bian[i].end^faa)\n {\n dfs(bian[i].end,wh);\n if(top-dq>=blo){whe[++k]=wh;\n while(top>dq) bel[sta[top]]=k,top--;}\n }\n sta[++top]=wh;\n}\nint main()\n{\n scanf(\"%d%d\",&n,&blo);\n for(int i=1;i<n;i++) scanf(\"%d%d\",&a,&b),\n bian[++num].end=b,bian[num].nxt=fir[a],fir[a]=num,\n bian[++num].end=a,bian[num].nxt=fir[b],fir[b]=num;\n dfs(1,0);if(!k) whe[++k]=1;while(top) bel[sta[top]]=k,top--;\n printf(\"%d\\n\",k);for(int i=1;i<=n;i++) printf(\"%d \",bel[i]);\n printf(\"\\n\");for(int i=1;i<=k;i++) printf(\"%d \",whe[i]);\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2140924, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 50, | |
| "memory": 6304, | |
| "code": " #include<bits/stdc++.h>\n using namespace std;\n int n,b,sz[100010],ans[100010],jl[100010],cnt,co[100010];\n vector<int>e[100010],sc[100010];\n void dfs(int u,int fa){\n vector<int>vv;\n vv.clear();\n for(int v:e[u]){\n if(v==fa) continue;\n dfs(v,u);\n if(sz[v]) vv.push_back(v);\n }\n vv.push_back(u);\n int sum=0;\n queue<int>q;\n while(!q.empty()) q.pop();\n sz[u]=1;\n for(int v:vv){\n sum+=sz[v];\n q.push(v);\n if(sum>=b){\n cnt++;\n while(!q.empty()) co[q.front()]=cnt,q.pop();\n ans[cnt]=u,sum=0;\n }\n }\n sz[u]=sum;\n }\n void ddfs(int u,int fa){\n for(int v:e[u]){\n if(v==fa) continue;\n if(co[v]==0) co[v]=co[u];\n ddfs(v,u);\n }\n }\n signed main(){\n scanf(\"%d%d\",&n,&b);\n for(int i=1;i<n;i++){\n int u,v;\n scanf(\"%d%d\",&u,&v),e[u].push_back(v),e[v].push_back(u);\n }\n dfs(1,0);\n if(co[1]==0) co[1]=cnt;\n // printf(\"%d %d \",sz[2],sz[8]);\n ddfs(1,0);\n printf(\"%d\\n\",cnt);\n for(int i=1;i<=n;i++) printf(\"%d \",co[i]);\n printf(\"\\n\");\n for(int i=1;i<=cnt;i++) printf(\"%d \",ans[i]);\n return 0;\n }", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2140921, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 37, | |
| "memory": 676, | |
| "code": "#include<cstdio>\n#include<vector>\nusing namespace std;\nvector<int>lwqdrq[10005];\nstruct ss{int end,nxt;}bian[20005];\nint n,blo,a,b,fir[10005],num,bel[10005],whe[10005],k;\nvoid dfs(int wh,int faa)\n{\n for(int i=fir[wh];i;i=bian[i].nxt) if(bian[i].end^faa)\n {\n dfs(bian[i].end,wh);while(!lwqdrq[bian[i].end].empty())\n lwqdrq[wh].push_back(lwqdrq[bian[i].end].back()),\n lwqdrq[bian[i].end].pop_back();\n if(lwqdrq[wh].size()>=blo)\n {\n whe[++k]=wh;while(!lwqdrq[wh].empty())\n bel[lwqdrq[wh].back()]=k,lwqdrq[wh].pop_back();\n }\n }\n lwqdrq[wh].push_back(wh);\n}\nint main()\n{\n scanf(\"%d%d\",&n,&blo);\n for(int i=1;i<n;i++) scanf(\"%d%d\",&a,&b),\n bian[++num].end=b,bian[num].nxt=fir[a],fir[a]=num,\n bian[++num].end=a,bian[num].nxt=fir[b],fir[b]=num;\n dfs(1,0);if(!k) whe[++k]=1;while(!lwqdrq[1].empty())\n bel[lwqdrq[1].back()]=k,lwqdrq[1].pop_back();\n printf(\"%d\\n\",k);for(int i=1;i<=n;i++) printf(\"%d \",bel[i]);\n printf(\"\\n\");for(int i=1;i<=k;i++) printf(\"%d \",whe[i]);\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2140913, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 40, | |
| "memory": 928, | |
| "code": "#include<cstdio>\n#include<vector>\nusing namespace std;\nvector<int>lwqdrq[20005];\nstruct ss{int end,nxt;}bian[40005];\nint n,blo,a,b,fir[40005],num,bel[40005],whe[40005],k;\nvoid dfs(int wh,int faa)\n{\n for(int i=fir[wh];i;i=bian[i].nxt) if(bian[i].end^faa)\n {\n dfs(bian[i].end,wh);while(!lwqdrq[bian[i].end].empty())\n lwqdrq[wh].push_back(lwqdrq[bian[i].end].back()),\n lwqdrq[bian[i].end].pop_back();\n if(lwqdrq[wh].size()>=blo)\n {\n whe[++k]=wh;while(!lwqdrq[wh].empty())\n bel[lwqdrq[wh].back()]=k,lwqdrq[wh].pop_back();\n }\n }\n lwqdrq[wh].push_back(wh);\n}\nint main()\n{\n scanf(\"%d%d\",&n,&blo);\n for(int i=1;i<n;i++) scanf(\"%d%d\",&a,&b),\n bian[++num].end=b,bian[num].nxt=fir[a],fir[a]=num,\n bian[++num].end=a,bian[num].nxt=fir[b],fir[b]=num;\n \n dfs(1,0); \n\tif(!k)whe[++k]=1;\n\twhile(!lwqdrq[1].empty())bel[lwqdrq[1].back()]=k,lwqdrq[1].pop_back();\n\tprintf(\"%d\\n\",k);for(int i=1;i<=n;i++) printf(\"%d \",bel[i]);\n printf(\"\\n\");for(int i=1;i<=k;i++) printf(\"%d \",whe[i]);\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2140820, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2152. 「SCOI2005」王室联邦", | |
| "time": 19, | |
| "memory": 476, | |
| "code": "#include <bits/stdc++.h>\n#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);\n#define ll long long\n#define lid (rt<<1)\n#define rid (rt<<1|1)\n// #define endl '\\n'\n#define pii pair<int,int>\n#define ull unsigned long long\n#define pb push_back\n#define ts cout<<\"----------------\"<<endl;\n#define bs bitset<65>\nusing namespace std;\nconst int N = 1e4+5,mod=23333333;\nint n,B;\nvector <int> edge[N];\nint sz[N],dep[N],L[N],R[N],dfstot,col[N];int cnt;\nint shen[N],mx[N];\nstack <int> q;\nvoid dfs(int u,int fa)\n{\n\t// cout<<u<<endl;\n\tdep[u]=dep[fa]+1;\n\tsz[u]=1;\n\tint ls_size=q.size();\n\tfor(auto to:edge[u])\n\t{\n\t\tif(to==fa)continue;\n\n\t\tdfs(to,u);\n\t\tsz[u]+=sz[to];\n\t\tif(q.size()-ls_size>=B)\n\t\t{\n\t\t\tshen[++cnt]=u;\n\t\t\twhile(q.size()>ls_size)\n\t\t\t{\n\t\t\t\tint x=q.top();q.pop();\n\t\t\t\tcol[x]=cnt;\n\t\t\t}\n\t\t}\n\t}\n\tq.push(u);\n\t// cout<<u<<\" \"<<sz[u]<<endl;\n}\nint main()\n{\n\tspeed();\n\t// freopen(\"T3.in\",\"r\",stdin);\n\t// freopen(\"in.in\",\"r\",stdin);\n\t// freopen(\"out.out\",\"w\",stdout);\n\tcin>>n>>B;\n\tint u,v;\n\tfor(int i=1;i<=n-1;i++)\n\t{\n\t\tcin>>u>>v;\n\t\t// cout<<u<<\" \"<<v<<endl;\n\t\tedge[u].pb(v);edge[v].pb(u);\n\t}\n\tdfs(1,0);\n\tif(!cnt)shen[++cnt]=1;\n\tfor(int i=1;i<=n;i++)\n\t{\n\t\tif(!col[i])col[i]=cnt;\n\t}\n\tcout<<cnt<<endl;\n\tfor(int i=1;i<=n;i++)cout<<col[i]<<\" \";\n\tcout<<endl;\n\tfor(int i=1;i<=cnt;i++)\n\t{\n\t\tcout<<shen[i]<<\" \";\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2206. 「HNOI2014」世界树": [ | |
| { | |
| "id": 2216903, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 833, | |
| "memory": 46316, | |
| "code": "#include<cstdio>\n#include<iostream>\n#include<cstring>\n#include<algorithm>\nusing namespace std;\ntemplate<typename T>\nvoid in(T &n){\n n=0;char c=getchar();bool flag=0;\n for(;c<'0'||c>'9';c=getchar()) if (c=='-') flag=1;\n for(;c>='0'&&c<='9';c=getchar()) (n*=10)+=(c^48);\n if (flag) n=-n;\n}\ntemplate<typename T>T mn(T a,T b){return a<b?a:b;}\nconst int Maxn=300005,Maxlog=22;\nconst int INF=1e9;\nint n,q,head[Maxn],pre[Maxn<<1],val[Maxn<<1],len;\nint dep[Maxn],sz[Maxn],dfn[Maxn],dfc,fa[Maxn][Maxlog];//19\nstruct node{\n int dis,id;\n node(int _dis=0,int _id=0){dis=_dis,id=_id;}\n bool operator<(const node &u)const{return dis!=u.dis?dis<u.dis:id<u.id;}\n}f[Maxn];\nint mi,h[Maxn],s[Maxn],top,pra[Maxn],usv[Maxn],cnt,res[Maxn],id[Maxn];\nvoid ins(int u,int v){pre[++len]=head[u],head[u]=len,val[len]=v;}\nvoid dfs(int u){\n dfn[u]=(++dfc);sz[u]=1;\n for(int i=1;i<=19;++i) fa[u][i]=fa[fa[u][i-1]][i-1];\n for(int i=head[u];i;i=pre[i]){\n if (val[i]==fa[u][0]) continue;\n fa[val[i]][0]=u,dep[val[i]]=dep[u]+1;\n dfs(val[i]);\n sz[u]+=sz[val[i]];\n }\n}\nint Jump(int u,int x){\n for(int i=0;i<=19;++i) if (x&(1<<i)) u=fa[u][i];\n return u;\n}\nint LCA(int u,int v){\n if (dep[u]<dep[v]) u^=v^=u^=v;\n u=Jump(u,dep[u]-dep[v]);\n if (u==v) return u;\n for(int i=19;~i;--i) if (fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];\n return fa[u][0];\n}\nbool cmp(const int &u,const int &v){return dfn[u]<dfn[v];}\nvoid solve(){\n sort(h+1,h+1+mi,cmp);s[top=1]=1;usv[cnt=1]=1;\n for(int i=(h[1]==1?2:1),lcas;i<=mi;++i){\n if ((lcas=LCA(s[top],h[i]))!=s[top]){\n while(dep[s[top-1]]>dep[lcas]) pra[s[top]]=s[top-1],--top;\n pra[s[top--]]=lcas;\n if (lcas!=s[top]) s[++top]=lcas,usv[++cnt]=lcas;\n }\n s[++top]=h[i];usv[++cnt]=h[i];\n }\n while(top>1) pra[s[top]]=s[top-1],--top;\n sort(usv+1,usv+1+cnt,cmp);\n #define u pra[usv[i]]\n #define v usv[i]\n for(int i=1;i<=cnt;++i) f[v]=node(INF,0);\n for(int i=1;i<=mi;++i) f[h[i]]=node(0,h[i]),res[h[i]]=0;\n for(int i=cnt;i>1;--i) f[u]=mn(f[u],node(f[v].dis+dep[v]-dep[u],f[v].id));\n for(int i=2;i<=cnt;++i) f[v]=mn(f[v],node(f[u].dis+dep[v]-dep[u],f[u].id));\n for(int i=1;i<=cnt;++i) res[f[v].id]+=sz[v];\n for(int i=2;i<=cnt;++i){\n res[f[u].id]-=sz[Jump(v,dep[v]-dep[u]-1)];\n int x=v;\n for(int j=19;~j;--j){\n if (dep[fa[x][j]]>dep[u]&&node(f[v].dis+dep[v]-dep[fa[x][j]],f[v].id)<node(f[u].dis+dep[fa[x][j]]-dep[u],f[u].id)){\n x=fa[x][j];\n }\n }\n res[f[u].id]+=sz[Jump(x,dep[x]-dep[u]-1)]-sz[x];\n res[f[v].id]+=sz[x]-sz[v];\n }\n #undef u\n #undef v\n}\nint main(){\n in(n);\n for(int i=1,u,v;i<n;++i){\n in(u);in(v);\n ins(u,v);ins(v,u);\n }\n dfs(1);in(q);\n while(q--){\n in(mi);\n for(int i=1;i<=mi;++i) in(h[i]),id[i]=h[i];\n solve();\n for(int i=1;i<=mi;++i) printf(\"%d \",res[id[i]]);\n putchar(10);\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2216879, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 1753, | |
| "memory": 58376, | |
| "code": "// Homura Akemi a.k.a. Starrykiller (/user/235125)\n// I love Madoka Kaname forever! \n#include <bits/stdc++.h>\n\nusing namespace std;\n\nauto range(auto l, auto r) { return views::iota(l,r); }\nauto rev=views::reverse;\n\n_GLIBCXX_ALWAYS_INLINE void chmax(auto &a, auto b) { a=max(a,b); }\n_GLIBCXX_ALWAYS_INLINE void chmin(auto &a, auto b) { a=min(a,b); }\n\nconstexpr int MAXN=3e5+10;\n\nvector<int> g[MAXN];\nint n, m;\n\nint rnk[MAXN], dnum, dep[MAXN];\nint f[MAXN][20], siz[MAXN];\nvoid dfs(int u, int fa) {\n rnk[u]=++dnum; dep[u]=dep[fa]+1;\n for (int j=1; f[u][j-1]; ++j)\n f[u][j]=f[f[u][j-1]][j-1];\n for (auto v: g[u]) {\n if (rnk[v]) continue;\n f[v][0]=u;\n dfs(v,u); siz[u]+=siz[v];\n }\n siz[u]++;\n}\nint LCA(int u, int v) {\n if (dep[u]<dep[v]) swap(u,v);\n for (int i=19; ~i; --i)\n if (dep[f[u][i]]>=dep[v])\n u=f[u][i];\n if (u==v) return u;\n for (int i=19; ~i; --i)\n if (f[u][i]!=f[v][i])\n u=f[u][i], v=f[v][i];\n return f[u][0];\n}\nint dis(int u, int v) {\n return dep[u]+dep[v]-dep[LCA(u,v)]*2;\n}\nint id[MAXN];\nvector<int> G[MAXN];\nint ans[MAXN];\nint mndis[MAXN], mnid[MAXN];\n\nint son(int u, int v) {\n // find ancestor of v that is son of u\n for (int i=19; ~i; --i) if (dep[f[v][i]]>dep[u]) v=f[v][i];\n return v;\n}\n\nvoid dfs1(int u) {\n if (id[u]) {\n mndis[u]=0;\n mnid[u]=u;\n }\n // cerr<<u<<'\\n';\n int rest=siz[u];\n for (auto v: G[u]) {\n int w=dep[v]-dep[u];\n if (mndis[u]+w<mndis[v]) {\n mndis[v]=mndis[u]+w;\n mnid[v]=mnid[u];\n }\n dfs1(v); rest-=siz[son(u,v)];\n if (make_pair(mndis[v]+w,mnid[v])<make_pair(mndis[u],mnid[u])) {\n mndis[u]=mndis[v]+w;\n mnid[u]=mnid[v];\n }\n }\n}\n\nvoid dfs2(int u) {\n if (id[u]) {\n mndis[u]=0;\n mnid[u]=u;\n }\n // cerr<<u<<'\\n';\n int rest=siz[u];\n for (auto v: G[u]) {\n int w=dep[v]-dep[u];\n if (make_pair(mndis[u]+w,mnid[u])<make_pair(mndis[v],mnid[v])) {\n mndis[v]=mndis[u]+w;\n mnid[v]=mnid[u];\n }\n dfs2(v); rest-=siz[son(u,v)];\n if (make_pair(mndis[v]+w,mnid[v])<make_pair(mndis[u],mnid[u])) {\n mndis[u]=mndis[v]+w;\n mnid[u]=mnid[v];\n }\n }\n // cerr<<u<<\" \"<<mnid[u]<<\"<-\"<<rest<<'\\n';\n ans[id[mnid[u]]]+=rest;\n // cerr<<u<<' '<<mnid[u]<<'\\n';\n}\n\nint get_mid(int u, int v) {\n int du=dep[u], dv=dep[v];\n int V=v;\n for (int i=19; ~i; --i) if (dep[f[v][i]]>=du && \n dep[f[v][i]]-du+mndis[u]>dep[V]-dep[f[v][i]]+mndis[V]) {\n // cerr<<f[v][i]<<'\\n';\n v=f[v][i];\n }\n // cerr<<u<<' '<<\n return v;\n}\n\nvoid dfs3(int u) {\n for (auto v: G[u]) {\n dfs3(v);\n if (dep[v]==dep[u]+1) continue;\n // get the split point\n int p=mnid[u], q=mnid[v];\n int x=get_mid(u,v);\n // cerr<<u<<' '<<v<<\": \";cerr<<p<<' '<<q<<'\\n';\n // cerr<<x<<\", \";\n int fa=f[x][0];\n if (dis(fa,p)==dis(fa,q) && q<p && fa!=u) x=fa;\n if (x!=v) {\n ans[id[q]]+=siz[x]-siz[v];\n // cerr<<q<<\"<-\"<<siz[x]-siz[v]<<'\\n';\n }\n if (f[x][0]!=u) {\n ans[id[p]]+=siz[son(u,f[x][0])]-siz[x];\n // cerr<<p<<\"<-\"<<siz[f[x][0]]-siz[v]<<'\\n';\n\n }\n // cerr<<x<<'\\n';\n // cerr<<u<<' '<<v<<' '<<x<<'\\n'; \n // cerr<<\"------\\n\";\n }\n}\n\nvoid work(vector<int> ver) {\n int n=size(ver); \n for (int i=0; i<n; ++i) id[ver[i]]=i+1;\n fill(ans,ans+n+1,0);\n ver.push_back(1); \n auto cmp=[](int i, int j) { return rnk[i]<rnk[j]; };\n ranges::sort(ver,cmp);\n {\n vector<int> tmp;\n for (auto i=0u; i+1<size(ver); ++i)\n tmp.push_back(LCA(ver[i],ver[i+1]));\n ver.insert(end(ver),begin(tmp),end(tmp));\n }\n ranges::sort(ver,cmp);\n ver.erase(unique(begin(ver),end(ver),[](int i, int j) { return i==j; }),end(ver));\n for (auto i=0u; i+1<size(ver); ++i) {\n int u=ver[i], v=ver[i+1];\n G[LCA(u,v)].push_back(v);\n // cerr<<LCA(u,v)<<\" \"<<v<<'\\n';\n }\n for (auto i: ver) mndis[i]=1e9, mnid[i]=1e9; \n dfs1(1); dfs2(1);\n dfs3(1);\n // cerr<<\"---------------------\\n\";\n // do something \n for (auto i: ver) G[i].clear(), id[i]=0;\n}\n\nsigned main() {\n ios::sync_with_stdio(false);\n cin.tie(nullptr); cout.tie(nullptr);\n cin>>n;\n for (int i=1,u,v; i<n; ++i) {\n cin>>u>>v;\n g[u].push_back(v); g[v].push_back(u);\n }\n dfs(1,0);\n int m; cin>>m;\n while (m--) {\n int k; cin>>k;\n vector<int> v(k); for (auto &i: v) cin>>i;\n if (k==1) {\n cout<<n<<'\\n'; continue;\n }\n work(v);\n for (int i=1; i<=k; ++i) cout<<ans[i]<<\" \\n\"[i==k];\n }\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2196400, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 647, | |
| "memory": 71288, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\nconst int INF=1e9+10;\nconst int N=3e5+10;\nconst int R=20+1;\n\ntypedef pair<int,int> pii;\n\nint read(){\n int sym=1,num=0;char cnt=getchar();\n while(cnt<'0'||cnt>'9'){\n if(cnt=='-') sym=-1;\n cnt=getchar();\n }\n while(cnt>='0'&&cnt<='9'){\n num=(num<<3)+(num<<1)+(cnt^48);\n cnt=getchar();\n }\n return sym*num;\n}\n\npii h[N];\n\nint n,m,cnt,vcnt,cst,q;\nint fa[R][N],dfn[R][N];\nint siz[N],dep[N],lg[N],id[N];\nint head[N],nxt[N<<1],to[N<<1];\nint vhead[N],vnxt[N<<1],vto[N<<1];\nint f[N],vis[N],dis[N],ft[N],ans[N];\n\nvoid vlink(int x,int y){\n vnxt[++vcnt]=vhead[x],vhead[x]=vcnt,vto[vcnt]=y;\n}\n\nvoid DFS(int x){\n siz[x]=1,dep[x]=dep[fa[0][x]]+1,dfn[0][++cst]=x,id[x]=cst;\n for(int i=vhead[x];i;i=vnxt[i]){\n if(vto[i]==fa[0][x]) continue;\n fa[0][vto[i]]=x,DFS(vto[i]),siz[x]+=siz[vto[i]];\n }\n}\n\nint Comp(int x,int y){\n return dep[x]<dep[y]?x:y;\n}\n\nint lca(int x,int y){\n if(x==y) return x;\n if(id[x]>id[y]) swap(x,y);\n int t=lg[id[y]-id[x]];\n return fa[0][Comp(dfn[t][id[x]+1],dfn[t][id[y]-(1<<t)+1])];\n}\n\nvoid link(int x,int y){\n nxt[++cnt]=head[x],head[x]=cnt,to[cnt]=y;\n}\n\nvoid Solve(int x){\n if(vis[x]) f[x]=x,dis[x]=0;\n else dis[x]=INF,f[x]=0;\n for(int i=head[x];i;i=nxt[i]){\n if(to[i]==ft[x]) continue;\n Solve(to[i]);\n if(dep[to[i]]-dep[x]+dis[to[i]]<dis[x]||(dep[to[i]]-dep[x]+dis[to[i]]==dis[x]&&f[to[i]]<f[x])) f[x]=f[to[i]],dis[x]=dep[to[i]]-dep[x]+dis[to[i]];\n }\n}\n\nvoid Rolve(int x){\n if(dep[x]-dep[ft[x]]+dis[ft[x]]<dis[x]||(dep[x]-dep[ft[x]]+dis[ft[x]]==dis[x]&&f[ft[x]]<f[x])) f[x]=f[ft[x]],dis[x]=dep[x]-dep[ft[x]]+dis[ft[x]];\n for(int i=head[x];i;i=nxt[i]){\n if(to[i]==ft[x]) continue;\n Rolve(to[i]);\n }\n}\n\nint query(int x,int h){\n int cur=x;\n for(int i=R-1;i>=0;--i)\n if(h&(1<<i)) cur=fa[i][cur];\n return cur; \n}\n\nvoid Calc(int x){\n int esiz=siz[x];\n for(int i=head[x];i;i=nxt[i]){\n if(to[i]==ft[x]) continue;\n int son=query(to[i],dep[to[i]]-dep[x]-1);\n esiz-=siz[son];\n if(f[to[i]]!=f[x]){ \n int cur=to[i];\n for(int j=R-1;j>=0;--j)\n if(dis[to[i]]+dep[to[i]]-dep[cur]+(1<<j)<dis[x]+dep[cur]-dep[x]-(1<<j)) cur=fa[j][cur];\n // printf(\"%d %d %d %d %d %d\\n\",cur,dep[cur],dis[x],dis[to[i]],x,to[i]);\n ans[f[to[i]]]+=(siz[cur]-siz[to[i]]);\n if(dep[cur]>dep[x]+2) ans[f[x]]+=(siz[son]-siz[fa[0][cur]]);\n if(dep[cur]>dep[x]+1&&dis[to[i]]+dep[to[i]]-dep[cur]+1==dis[x]+dep[cur]-dep[x]-1) ans[min(f[to[i]],f[x])]+=(siz[fa[0][cur]]-siz[cur]); \n else if(dep[cur]>dep[x]+1&&dis[to[i]]+dep[to[i]]-dep[cur]+1>dis[x]+dep[cur]-dep[x]-1) ans[f[x]]+=(siz[fa[0][cur]]-siz[cur]);\n }\n else ans[f[x]]+=(siz[son]-siz[to[i]]);\n Calc(to[i]);\n }\n ans[f[x]]+=esiz;\n}\n\nvoid Bat(int x){\n for(int i=head[x];i;i=nxt[i]){\n if(to[i]==ft[x]) continue;\n Bat(to[i]);\n }\n head[x]=vis[x]=ans[f[x]]=0;\n}\n\nint main(){\n // freopen(\"read.in\",\"r\",stdin);\n // freopen(\"std.out\",\"w\",stdout);\n n=read();\n for(int i=1;i<n;++i){\n int x=read(),y=read();\n vlink(x,y),vlink(y,x);\n }\n fa[0][1]=1,DFS(1),lg[0]=-1;\n for(int i=1;i<=n;++i) lg[i]=lg[i>>1]+1;\n for(int j=1;j<R;++j)\n for(int i=1;i<=n;++i)\n fa[j][i]=fa[j-1][fa[j-1][i]];\n for(int j=1;j<R;++j)\n for(int i=1;i<=n;++i)\n dfn[j][i]=Comp(dfn[j-1][i],dfn[j-1][min(i+(1<<(j-1)),n)]);\n q=read();\n for(int i=1;i<=q;++i){\n int m=read();\n for(int j=1;j<=m;++j) h[j].second=read(),h[j].first=j;\n sort(h+1,h+m+1,[](pii x,pii y){return id[x.second]<id[y.second];});\n stack<int> s;s.push(1);\n for(int j=1;j<=m;++j){\n int p=h[j].second,lct=lca(s.top(),p);vis[p]=1;\n if(p==1) continue;\n if(s.size()==1||lct==s.top())\n s.push(p);\n else{\n int t=s.top();s.pop();\n while(!s.empty()&&id[s.top()]>id[lct])\n ft[t]=s.top(),link(t,s.top()),link(s.top(),t),t=s.top(),s.pop(); \n ft[t]=lct,link(t,lct),link(lct,t); \n if(!s.empty()&&id[s.top()]<id[lct]) s.push(lct);\n s.push(p);\n }\n }\n int t=s.top();s.pop();\n while(!s.empty()) \n ft[t]=s.top(),link(t,s.top()),link(s.top(),t),t=s.top(),s.pop();\n ft[1]=1;\n Solve(1),Rolve(1);\n // printf(\"Ciallo %d\\n\",i);\n // for(int j=1;j<=n;++j)\n // printf(\"%d %d\\n\",f[j],dis[j]);\n Calc(1),sort(h+1,h+m+1);\n for(int j=1;j<=m;++j) printf(\"%d \",ans[h[j].second]);\n printf(\"\\n\"); \n Bat(1),cnt=0;\n // //仅调试\n // for(int j=1;j<=n;++j)\n // f[j]=dis[j]=0;\n }\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2221045, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 1629, | |
| "memory": 107124, | |
| "code": "#include <bits/stdc++.h>\nusing std::bitset;\nusing std::cout;\nusing std::deque;\nusing std::endl;\nusing std::greater;\nusing std::lower_bound;\nusing std::make_pair;\nusing std::map;\nusing std::max;\nusing std::min;\nusing std::multimap;\nusing std::multiset;\nusing std::nth_element;\nusing std::pair;\nusing std::priority_queue;\nusing std::queue;\nusing std::reverse; \nusing std::set;\nusing std::sort;\nusing std::sqrt;\nusing std::stable_sort;\nusing std::string;\nusing std::swap;\nusing std::unique;\nusing std::upper_bound;\nusing std::vector;\ntypedef long long li;\ntypedef long double lf; \n\ntemplate<typename Secc251>\ninline void read(Secc251& ans){\n\tans = 0; li f = 1;\n\tchar ch = getchar();\n\twhile(ch < '0' || ch > '9'){\n\t\tf = (ch == '-') ? -1 : 1;\n\t\tch = getchar();\n\t}\n\twhile(ch <= '9' && ch >= '0'){\n\t\tans = ans * 10 + (ch ^ 48);\n\t\tch = getchar();\n\t}\n\tans *= f;\n} \n\nli n;\nvector<li> a[300010];\nli dfn[300010], f[300010][23], m;\nli lg[300010], dep[300010], lendfn, pos[300010], size[300010];\n\nvoid dfs1(li u, li fa){\n\tf[u][0] = fa;\n\tfor(li i = 1; i <= lg[n]; i++) f[u][i] = f[f[u][i - 1]][i - 1];\n\tsize[u] = 1, dfn[pos[u] = ++lendfn] = u;\n\tdep[u] = dep[fa] + 1;\n\tfor(li v : a[u]){\n\t\tif(v == fa) continue;\n\t\tdfs1(v, u);\n\t\tsize[u] += size[v];\n\t}\n}\n\nli Lca(li x, li y){\n\tif(dep[x] < dep[y]) swap(x, y);\n\t// cout << x << \" \" << y << endl;\n\tfor(li i = lg[n]; i >= 0; i--) if(dep[f[x][i]] >= dep[y]) x = f[x][i];\n\t// cout << x << \" \" << y << endl;\n\tif(x == y) return x;\n\tfor(li i = lg[n]; i >= 0; i--) if(f[x][i] != f[y][i]) x = f[x][i], y = f[y][i];\n\t// cout << x << \" \" << y << endl;\n \treturn f[x][0];\n}\n\nli kth_fa(li u, li k){\n\tfor(li i = lg[n]; i >= 0; i--){\n\t\tif(k >= (1 << i)){\n\t\t\tk -= (1 << i);\n\t\t\tu = f[u][i];\n\t\t}\n\t}\n\treturn u;\n}\n\nli to[300010], ans[300010], dis[300010], vis[300010];\nvector<li> intree;\n\nbool cmp(li x, li y){\n\treturn pos[x] < pos[y];\n}\n\nvector<li> g[300010];\n\nvoid dfs2(li u, li fa){\n\tfor(li v : g[u]){\n\t\tif(v == fa) continue;\n\t\tdfs2(v, u);\n\t\tif(dis[u] > dis[v] + (dep[v] - dep[u]) || (dis[u] == dis[v] + (dep[v] - dep[u]) && to[v] < to[u])){\n\t\t\t// cout << u << \" \" << v << endl;\n\t\t\tdis[u] = dis[v] + (dep[v] - dep[u]);\n\t\t\tto[u] = to[v];\n\t\t\t// cout << \"to \" << u << \" = \" << to[v] << endl;\n\t\t}\n\t}\n}\n\nvoid dfs3(li u, li fa){\n\tif(fa && (dis[u] > dis[fa] + (dep[u] - dep[fa]) || (dis[u] == dis[fa] + (dep[u] - dep[fa]) && to[fa] < to[u]))){\n\t\tdis[u] = dis[fa] + (dep[u] - dep[fa]);\n\t\tto[u] = to[fa];\n\t}\n\tfor(li v : g[u]){\n\t\tif(v == fa) continue;\n\t\tdfs3(v, u);\n\t}\n}\n\nvoid dfs4(li u, li fa){\n\tif(g[u].size() == 0){\n\t\tans[to[u]] += size[u];\n\t\treturn;\n\t}\n\tans[to[u]] += size[u];\n\tfor(li v : g[u]){\n\t\tif(v == fa) continue;\n\t\tli to_v = kth_fa(v, dep[v] - dep[u] - 1);\n\t\t// cout << u << \" \" << v << \" \" << to_v << endl;\n\t\tans[to[u]] -= size[to_v];\n\t\tif(to[u] == to[v]){\n\t\t\tans[to[u]] += size[to_v] - size[v];\n\t\t} else{\n\t\t\tli depx = (dis[v] + dep[u] + dep[v] - dis[u]) / 2 + 1;\n\t\t\tdepx = min(depx, dep[v]);\n\t\t\tli dx = dep[v] - (depx - 1) + dis[v], dy = dis[u] + (depx - 1) - dep[u];\n\t\t\twhile(depx > dep[u] && (dx < dy || (dx == dy && to[v] < to[u]))){\n\t\t\t\tdepx--;\n\t\t\t\tdx = dep[v] - (depx - 1) + dis[v], dy = dis[u] + (depx - 1) - dep[u];\n\t\t\t}\n\t\t\t// cout << u << \" \" << v << \" \" << depx << \" \" << dx << \" \" << fendl;\n\t\t\tli x = kth_fa(v, dep[v] - depx);\n\t\t\t// cout << u << \" \" << v << \" \" << x << endl;\n\t\t\tans[to[v]] += size[x] - size[v];\n\t\t\tif(x != u){\n\t\t\t\tans[to[u]] += size[to_v] - size[x];\n\t\t\t}\n\t\t}\n\t\tdfs4(v, u);\n\t}\n}\n\nvector<li> readin;\n\nint main(){\n // freopen(\"wonderful.ans\", \"r\", stdin);\n // freopen(\"www.ww\", \"w\", stdout);\n\tread(n);\n\tlg[0] = -1;\n\tfor(li i = 1; i <= n + 5; i++) lg[i] = lg[i >> 1] + 1;\n\tfor(li i = 1; i < n; i++){\n\t\tli u, v;\n\t\tread(u), read(v);\n\t\ta[u].push_back(v), a[v].push_back(u);\n\t}\n\tdfs1(1, 0);\n\tread(m);\n\tfor(li i = 1; i <= n; i++) dis[i] = 1e18;\n\twhile(m--){\n\t\tli cnt;\n\t\tread(cnt);\n\t\tfor(li i = 1; i <= cnt; i++){\n\t\t\tli x;\n\t\t\tread(x);\n\t\t\tintree.push_back(x);\n\t\t\tdis[x] = 0, to[x] = x, vis[x] = 1;\n\t\t\treadin.push_back(x);\n\t\t}\n\t\tintree.push_back(1);\n\t\tsort(intree.begin(), intree.end(), cmp);\n\t\tli len = intree.size();\n\t\tfor(li i = 1; i < len; i++){\n\t\t\tli lca = Lca(intree[i - 1], intree[i]);\n\t\t\t// cout << \"lca \" << intree[i - 1] << \" \" << intree[i] << \" = \" << lca << endl;\n\t\t\tintree.push_back(lca);\n\t\t}\n\t\tsort(intree.begin(), intree.end(), cmp);\n\t\tintree.erase(unique(intree.begin(), intree.end()), intree.end());\n\t\tfor(li i = 1; i < intree.size(); i++){\n\t\t\tli lca = Lca(intree[i - 1], intree[i]);\n\t\t\tg[lca].push_back(intree[i]);\n\t\t}\n\t\tdfs2(1, 0);\n\t\tdfs3(1, 0);\n\t\t// for(li v : intree){\n\t\t// \tprintf(\"to %lld = %lld\\n\", v, to[v]);\n\t\t// }\n\t\tdfs4(1, 0);\n\t\tfor(li v : readin){\n\t\t\tprintf(\"%lld \", ans[v]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t\tfor(li v : intree){\n\t\t\tdis[v] = 1e18, to[v] = 0, vis[v] = 0;\n\t\t\tg[v].clear();\n\t\t\tans[v] = 0;\n\t\t}\n\t\tintree.clear();\n\t\treadin.clear();\n\t}\n return 0;\n} ", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2141802, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 734, | |
| "memory": 59144, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define fr(i,l,r) for(int i(l),_i(r);i<=_i;i++)\n#define eb emplace_back\n#define mp make_pair\ntemplate<typename T>inline T rd(T&a){\n char c=getchar();T x=0;bool f=1;\n for(;c<48||c>57;c=getchar())f&=c!=45;\n for(;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+c-48;\n return a=f?x:-x;\n}template<typename T,typename...V>inline void rd(T&x,V&...v){rd(x),rd(v...);}\nconst int N=3e5+3;\nint n,m,h[N],a[N<<1],u,v,d[N],dfn[N],son[N],top[N],fa[19][N],sz[N],s[N],f[N],b[N],t[N];\nvector<int>g[N],e[N];\nbool bk[N];\n\nvoid dfs1(int u,int f){\n d[u]=d[f]+1,dfn[u]=++*dfn,fa[0][u]=f,sz[u]=1;\n for(int i=0;fa[i][u];i++)fa[i+1][u]=fa[i][fa[i][u]];\n for(int v:g[u])if(v^f)dfs1(v,u),sz[u]+=sz[v],sz[v]>sz[son[u]]?son[u]=v:0;\n}\nvoid dfs2(int u,int tp){\n top[u]=tp;\n if(!son[u])return;\n dfs2(son[u],tp);\n for(int v:g[u])if(v^fa[0][u]&&v^son[u])dfs2(v,v);\n}\ninline int LCA(int u,int v){\n while(top[u]^top[v])d[top[u]]>d[top[v]]?u=fa[0][top[u]]:v=fa[0][top[v]];\n return d[u]<d[v]?u:v;\n}\ninline int dis(int u,int v){return d[u]+d[v]-2*d[LCA(u,v)];}\ninline int get(int u,int v){\n while(d[fa[0][top[v]]]>d[u])v=fa[0][top[v]];\n return fa[0][top[v]]^u?son[u]:top[v];\n}\n\nvoid dfs1(int u){\n bk[u]?b[u]=u,t[u]=0:t[u]=1e9,s[u]=sz[u];\n for(int v:e[u])dfs1(v),mp(t[v]+d[v]-d[u],b[v])<mp(t[u],b[u])?b[u]=b[v],t[u]=t[v]+d[v]-d[u]:0;\n}\nvoid dfs2(int u){\n for(int v:e[u])mp(t[u]+d[v]-d[u],b[u])<mp(t[v],b[v])?b[v]=b[u],t[v]=t[u]+d[v]-d[u]:0,dfs2(v);\n}\nvoid dfs(int u){\n for(int v:e[u]){\n dfs(v);\n int x=get(u,v);\n s[u]-=sz[x];\n if(b[u]==b[v])f[b[u]]+=sz[x]-sz[v];\n else {\n int p=v;\n for(int i=18;~i;i--)if(d[fa[i][p]]>d[u])\n if(mp(dis(fa[i][p],b[v]),b[v])<mp(dis(fa[i][p],b[u]),b[u]))p=fa[i][p];\n f[b[u]]+=sz[x]-sz[p],f[b[v]]+=sz[p]-sz[v];\n }\n }f[b[u]]+=s[u];\n}\n\nvoid solve(){\n a[*a=1]=1;\n fr(i,1,rd(*h))bk[a[++*a]=rd(h[i])]=1;\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];});\n fr(i,2,*a)a[++*a]=LCA(a[i],a[i-1]);\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];}),*a=unique(a+1,a+*a+1)-a-1;\n fr(i,2,*a)e[LCA(a[i],a[i-1])].eb(a[i]);\n dfs1(1),dfs2(1),dfs(1);\n fr(i,1,*h)cout<<f[h[i]]<<' ',f[h[i]]=bk[h[i]]=0;\n fr(i,1,*a)e[a[i]].clear();\n puts(\"\");\n}\nint main(){\n fr(i,2,rd(n))rd(u,v),g[u].eb(v),g[v].eb(u);\n dfs1(1,0),dfs2(1,1);\n for(rd(m);m--;)solve();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2141800, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 818, | |
| "memory": 61252, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define fr(i,l,r) for(int i(l),_i(r);i<=_i;i++)\n#define eb emplace_back\n#define mp make_pair\n#define fi first\n#define se second\ntemplate<typename T>inline T rd(T&a){\n char c=getchar();T x=0;bool f=1;\n for(;c<48||c>57;c=getchar())f&=c!=45;\n for(;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+c-48;\n return a=f?x:-x;\n}template<typename T,typename...V>inline void rd(T&x,V&...v){rd(x),rd(v...);}\nconst int N=3e5+3,inf=1e9;\nint n,m,h[N],a[N<<1],u,v,d[N],dfn[N],son[N],top[N],fa[19][N],sz[N],s[N],f[N];\npair<int,int>b[N];\nvector<int>g[N],e[N];\nbool bk[N];\n\nvoid dfs1(int u,int f){\n d[u]=d[f]+1,dfn[u]=++*dfn,fa[0][u]=f,sz[u]=1;\n fr(i,1,18)fa[i][u]=fa[i-1][fa[i-1][u]];\n for(int v:g[u])if(v^f)dfs1(v,u),sz[u]+=sz[v],sz[v]>sz[son[u]]?son[u]=v:0;\n}\nvoid dfs2(int u,int tp){\n top[u]=tp;\n if(!son[u])return;\n dfs2(son[u],tp);\n for(int v:g[u])if(v^fa[0][u]&&v^son[u])dfs2(v,v);\n}\ninline int LCA(int u,int v){\n while(top[u]^top[v])d[top[u]]>d[top[v]]?u=fa[0][top[u]]:v=fa[0][top[v]];\n return d[u]<d[v]?u:v;\n}\ninline int dis(int u,int v){return d[u]+d[v]-2*d[LCA(u,v)];}\ninline int get(int u,int v){\n while(d[fa[0][top[v]]]>d[u])v=fa[0][top[v]];\n return fa[0][top[v]]^u?son[u]:top[v];\n}\n\nvoid dfs1(int u){\n b[u]=bk[u]?mp(0,u):mp(inf,0),s[u]=sz[u];\n for(int v:e[u])dfs1(v),b[u]=min(b[u],mp(b[v].fi+d[v]-d[u],b[v].se));\n}\nvoid dfs2(int u){\n for(int v:e[u])b[v]=min(b[v],mp(b[u].fi+d[v]-d[u],b[u].se)),dfs2(v);\n}\nvoid dfs(int u){\n int bu=b[u].se;\n for(int v:e[u]){\n dfs(v);\n int x=get(u,v),bv=b[v].se;\n s[u]-=sz[x];\n if(bu==bv)f[bu]+=sz[x]-sz[v];\n else {\n int p=v;\n for(int i=18;~i;i--)if(d[fa[i][p]]>d[u])\n if(mp(dis(fa[i][p],bv),bv)<mp(dis(fa[i][p],bu),bu))p=fa[i][p];\n f[bu]+=sz[x]-sz[p],f[bv]+=sz[p]-sz[v];\n }\n }f[bu]+=s[u];\n}\n\nvoid solve(){\n a[*a=1]=1;\n fr(i,1,rd(*h))bk[a[++*a]=rd(h[i])]=1;\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];});\n fr(i,2,*a)a[++*a]=LCA(a[i],a[i-1]);\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];}),*a=unique(a+1,a+*a+1)-a-1;\n fr(i,2,*a)e[LCA(a[i],a[i-1])].eb(a[i]);\n dfs1(1),dfs2(1),dfs(1);\n fr(i,1,*h)cout<<f[h[i]]<<' ',f[h[i]]=bk[h[i]]=0;\n fr(i,1,*a)e[a[i]].clear();\n puts(\"\");\n}\nint main(){\n fr(i,2,rd(n))rd(u,v),g[u].eb(v),g[v].eb(u);\n dfs1(1,0),dfs2(1,1);\n for(rd(m);m--;)solve();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2141797, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 2011, | |
| "memory": 59072, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define fr(i,l,r) for(int i(l),_i(r);i<=_i;i++)\n#define eb emplace_back\n#define mp make_pair\n#define fi first\n#define se second\ntemplate<typename T>inline T rd(T&a){\n char c=getchar();T x=0;bool f=1;\n for(;c<48||c>57;c=getchar())f&=c!=45;\n for(;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+c-48;\n return a=f?x:-x;\n}template<typename T,typename...V>inline void rd(T&x,V&...v){rd(x),rd(v...);}\nconst int N=3e5+3,inf=1e9;\nint n,m,h[N],a[N<<1],u,v,d[N],dfn[N],fa[19][N],sz[N],s[N],f[N];\npair<int,int>b[N];\nvector<int>g[N],e[N];\nbool bk[N];\n\nvoid dfs0(int u,int f){\n d[u]=d[f]+1,dfn[u]=++*dfn,fa[0][u]=f,sz[u]=1;\n fr(i,1,18)fa[i][u]=fa[i-1][fa[i-1][u]];\n for(int v:g[u])if(v^f)dfs0(v,u),sz[u]+=sz[v];\n}\ninline int LCA(int u,int v){\n if(d[u]<d[v])swap(u,v);\n for(int i=18;~i;i--)if(d[fa[i][u]]>=d[v])u=fa[i][u];\n if(u==v)return u;\n for(int i=18;~i;i--)if(fa[i][u]^fa[i][v])u=fa[i][u],v=fa[i][v];\n return fa[0][u];\n}\ninline int dis(int u,int v){return d[u]+d[v]-2*d[LCA(u,v)];}\ninline int get(int u,int v){\n for(int i=18;~i;i--)if(d[fa[i][v]]>d[u])v=fa[i][v];\n return v;\n}\n\nvoid dfs1(int u){\n b[u]=bk[u]?mp(0,u):mp(inf,0),s[u]=sz[u];\n for(int v:e[u])dfs1(v),b[u]=min(b[u],mp(b[v].fi+d[v]-d[u],b[v].se));\n}\nvoid dfs2(int u){\n for(int v:e[u])b[v]=min(b[v],mp(b[u].fi+d[v]-d[u],b[u].se)),dfs2(v);\n}\nvoid dfs(int u){\n int bu=b[u].se;\n for(int v:e[u]){\n dfs(v);\n int x=get(u,v),bv=b[v].se;\n s[u]-=sz[x];\n if(bu==bv)f[bu]+=sz[x]-sz[v];\n else {\n int p=v;\n for(int i=18;~i;i--)if(d[fa[i][p]]>d[u])\n if(mp(dis(fa[i][p],bv),bv)<mp(dis(fa[i][p],bu),bu))p=fa[i][p];\n f[bu]+=sz[x]-sz[p],f[bv]+=sz[p]-sz[v];\n }\n }f[bu]+=s[u];\n}\n\nvoid solve(){\n a[*a=1]=1;\n fr(i,1,rd(*h))bk[a[++*a]=rd(h[i])]=1;\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];});\n fr(i,2,*a)a[++*a]=LCA(a[i],a[i-1]);\n sort(a+1,a+*a+1,[](int u,int v){return dfn[u]<dfn[v];}),*a=unique(a+1,a+*a+1)-a-1;\n fr(i,2,*a)e[LCA(a[i],a[i-1])].eb(a[i]);\n dfs1(1),dfs2(1),dfs(1);\n fr(i,1,*h)cout<<f[h[i]]<<' ',f[h[i]]=bk[h[i]]=0;\n fr(i,1,*a)e[a[i]].clear();\n puts(\"\");\n}\nint main(){\n fr(i,2,rd(n))rd(u,v),g[u].eb(v),g[v].eb(u);\n dfs0(1,0);\n for(rd(m);m--;)solve();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2158630, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2206. 「HNOI2014」世界树", | |
| "time": 921, | |
| "memory": 50580, | |
| "code": "#include <bits/stdc++.h>\ntypedef long long ll ; \nusing namespace std ; \nconst int N = 4e5 + 100 ; \n\nint n , m , dfn[N] , tot ; \n\ntemplate <typename T> class Stack {\n\tprivate:\n\t\tint tops ; T st[N] ; \n\tpublic:\n\t\tinline void reset() {tops = 1 ; st[1] = 0 ; st[0] = 0 ; }\n\t\tinline void pop() {tops -- ; }\n\t\tinline bool empty() {return tops < 2 ; }\n\t\tinline T & top() {return st[tops] ; }\n\t\tinline int size() {return tops ; }\n\t\tinline T & second() {return st[tops - 1] ; }\n\t\tinline void push(T val) {st[++ tops] = val ; }\n\t\tinline T & operator [] (int i) {return st[i] ; }\n} ; Stack <int> st ; \n\nint len , a[N] , Rank[N] ; int root ; bool vis[N] ; int Ans[N] ; \nint Size[N] , son[N] , top[N] , father[N] , depth[N] ; int b[N] ; \nint Query_Father[21][N] ; int lg[N] ; pair <int , int> v[N] ; \n\nstruct Edge {\n\tint next , to ; \n} e[N << 1] , e1[N << 1] ; int head[N] , head1[N] , cnt , cnt1 ; \ninline void add(int x , int y) {\n\tcnt ++ , e[cnt].to = y , e[cnt].next = head[x] , head[x] = cnt ; \n}\ninline void add1(int x , int y) {\n\tcnt1 ++ , e1[cnt1].to = y , e1[cnt1].next = head1[x] , head1[x] = cnt1 ; \n}\n\nint up[N] , down[N] ; \nvoid dfs(int x , int fa) {\n\tdepth[x] = depth[fa] + 1 ; father[x] = fa ; Query_Father[0][x] = fa ; \n\tdfn[x] = ++ tot ; Size[x] = 1 ; Rank[tot] = x ; \n\n\tfor (int i = 1 ; i <= lg[depth[x]] ; ++ i) Query_Father[i][x] = Query_Father[i - 1][Query_Father[i - 1][x]] ; \n\tfor (int i = head1[x] ; i ; i = e1[i].next) {\n\t\tint y = e1[i].to ; \n\n\t\tif (y != fa) {\n\t\t\tdfs(y , x) ; \n\t\t\tSize[x] += Size[y] ; \n\n\t\t\tif (Size[son[x]] < Size[y]) son[x] = y ; \n\t\t}\n\t}\n}\nvoid dfs2(int x , int crown) {\n\ttop[x] = crown ; \n\n\tif (son[x]) dfs2(son[x] , crown) ; \n\tfor (int i = head1[x] ; i ; i = e1[i].next) {\n\t\tint y = e1[i].to ; \n\n\t\tif (y != father[x] && y != son[x]) dfs2(y , y) ; \n\t}\n}\nint LCA(int x , int y) {\n\tint topper_x = top[x] , topper_y = top[y] ; \n\n\twhile (topper_x != topper_y) {\n\t\tif (depth[topper_x] >= depth[topper_y]) {\n\t\t\tx = father[topper_x] ; \n\t\t} else y = father[topper_y] ; \n\n\t\ttopper_x = top[x] , topper_y = top[y] ; \n\t}\n\n\treturn depth[x] <= depth[y] ? x : y ; \n}\n\nvoid updata(int &ret , int x , int pos , int now) { /*x is the position , pos is new position , now is the last nearset one . */\n\tif (now == 1e9) {\n\t\tret = pos ; return ; \n\t} else if (pos == 1e9) {\n\t\treturn ; \n\t} else {\n\t\tint dep1 , dep2 , lca1 = LCA(pos , x) , lca2 = LCA(now , x) ; \n\t\tdep1 = depth[x] + depth[pos] - 2 * depth[lca1] ; \n\t\tdep2 = depth[x] + depth[now] - 2 * depth[lca2] ; \n\n\t\tif (dep1 < dep2) {\n\t\t\tret = pos ; return ; \n\t\t} else if (dep1 == dep2 && pos < now) {\n\t\t\tret = pos ; return ; \n\t\t}\n\t}\n}\nvoid updata2(int &ret , int x , int pos) {\n\tif (ret == 1e9) {\n\t\tret = pos ; return ; \n\t} else if (pos == 1e9) return ; \n\n\tint dep1 = depth[pos] - depth[x] , dep2 = depth[ret] - depth[x] ; \n\tif (dep1 < dep2 || (dep1 == dep2 && pos < ret)) {\n\t\tret = pos ; return ; \n\t}\n}\n\nvoid dfs3(int x , int crown) {\n\tAns[x] = 0 ; up[x] = 1e9 ; down[x] = 1e9 ; updata(up[x] , x , crown , up[x]) ; \n\tif (vis[x]) up[x] = x , down[x] = x ; \n\tupdata(crown , x , up[x] , crown) ; \n\tfor (int i = head[x] ; i ; i = e[i].next) {\n\t\tv[i].first = v[i].second = 1e9 ; \n\t\tint y = e[i].to ; \n\t\tdfs3(y , crown) ; \n\t\tupdata(crown , x , down[y] , crown) ; updata2(down[x] , x , down[y]) ; \n\t}\n}\nvoid dfs4(int , int) ; void Reverse(int , int , int&) ; \nvoid Reverse(int i , int x , int &crown) {\n\tif (!i) return ; \n\tReverse(e[i].next , x , crown) ; \n\tint y = e[i].to ; \n\tdfs4(y , crown) ; \n\tupdata(crown , x , down[y] , crown) ; \n\tupdata2(down[x] , x , down[y]) ; \n}\nvoid dfs4(int x , int crown) {\n\tupdata(up[x] , x , crown , up[x]) ; \n\tupdata(crown , x , up[x] , crown) ; \n\tReverse(head[x] , x , crown) ; \n}\n\nvoid dfs5(int x) {\n\tint Marx = 1e9 ; \n\tfor (int i = head[x] ; i ; i = e[i].next) {\n\t\tint y = e[i].to ; \n\t\tv[i] = make_pair(up[x] , down[y]) ; \n\t\tupdata(v[i].first , x , Marx , v[i].first) ; updata(Marx , x , down[y] , Marx) ; \n\t\tdfs5(y) ; \n\t}\n}\nvoid Reverse2(int , int , int&) ; void dfs6(int) ; \nvoid Reverse2(int i , int x , int &Marx) {\n\tif (!i) return ; \n\tReverse2(e[i].next , x , Marx) ; \n\n\tint y = e[i].to ; \n\tupdata(v[i].first , x , Marx , v[i].first) ; updata(Marx , x , down[y] , Marx) ; \n\tdfs6(y) ; \n}\nvoid dfs6(int x) {\n\tint Marx = 1e9 ; \n\tReverse2(head[x] , x , Marx) ; \n}\n\nint dis(int x , int y) {\n\treturn depth[x] + depth[y] - 2 * depth[LCA(x , y)] ; \n}\n\nvoid Extract(int x) {\n\tfor (int i = head[x] ; i ; i = e[i].next) {\n\t\tint y = e[i].to , now = y , pos , pos1 = v[i].first , pos2 = v[i].second , child = y ; \n\t\tfor (int j = lg[depth[y] - depth[x]] ; j >= 0 ; -- j) {\n\t\t\tif (depth[Query_Father[j][child]] <= depth[x]) continue ; \n\t\t\tchild = Query_Father[j][child] ; \n\t\t}\n\n\t\tif (pos1 == 1e9) {Ans[pos2] += Size[child] - Size[y] ; Extract(y) ; continue ; } ; \n\t\tif (pos2 == 1e9) {Ans[pos1] += Size[child] - Size[y] ; Extract(y) ; continue ; } ; \n\t\tint dis1 = dis(x , pos1) , dis2 = dis(y , pos2) ; \n\t\tfor (int j = lg[depth[y] - depth[x]] + 1 , dep1 , dep2 ; j >= 0 ; -- j) {\n\t\t\tpos = Query_Father[j][now] ; \n\t\t\tif (depth[pos] < depth[x]) continue ; \n\t\t\tdep1 = depth[y] - depth[pos] + dis2 , dep2 = depth[pos] - depth[x] + dis1 ; \n\t\t\tif ((dep1 <= dep2 && pos2 < pos1) || dep1 < dep2) now = pos ; \n\t\t}\n\n\t\tif (now == x) Ans[pos2] += Size[child] - Size[y] ; \n\t\telse Ans[pos2] += Size[now] - Size[y] , Ans[pos1] += Size[child] - Size[now] ; \n\t\tExtract(y) ; \n\t}\n}\n\nvoid dfs7(int x) {\n\tint num = Size[x] ; \n\tfor (int i = head[x] ; i ; i = e[i].next) {\n\t\tint y = e[i].to , child = y ; \n\t\tfor (int j = lg[depth[y] - depth[x]] ; j >= 0 ; -- j) {\n\t\t\tif (depth[Query_Father[j][child]] <= depth[x]) continue ; \n\t\t\tchild = Query_Father[j][child] ; \n\t\t}\n\t\t\n\t\tnum -= Size[child] ; \n\t}\n\n\tif (up[x] == 1e9) Ans[down[x]] += num ; \n\telse if (down[x] == 1e9) Ans[up[x]] += num ; \n\telse {\n\t\tint dep1 = dis(x , up[x]) , dep2 = dis(x , down[x]) ; \n\t\tif (dep1 < dep2) {Ans[up[x]] += num ; }\n\t\telse if (dep1 > dep2) Ans[down[x]] += num ; \n\t\telse {Ans[min(up[x] , down[x])] += num ; }\n\t}\n\tfor (int i = head[x] ; i ; i = e[i].next) dfs7(e[i].to) ; \n}\n\nvoid dfs8(int x) {\n\tAns[x] = 0 ; up[x] = down[x] = 1e9 ; vis[x] = 0 ; \n\tfor (int i = head[x] ; i ; i = e[i].next) {\n\t\tdfs8(e[i].to) ; \n\t}\n\thead[x] = 0 ; \n}\n\nvoid solve(int *a , int len) {\n\tif (len == 1) {\n\t\tcout << n << '\\n' ; \n\t\treturn ; \n\t}\n\tst.reset() ; root = 1e9 ; cnt = 0 ; \n\tfor (int i = 1 ; i <= len ; ++ i) b[i] = a[i] ; \n\tstable_sort(a + 1 , a + len + 1 , [](int a , int b) {\n\t\treturn dfn[a] < dfn[b] ; \n\t}) ; \n\n\tfor (int i = 1 ; i <= len ; ++ i) {\n\t\tint lca = LCA(a[i] , st.top()) ; \n\n\t\tif (lca == st.top()) {\n\t\t\tst.push(a[i]) ; root = min(root , dfn[a[i]]) ; \n\t\t\tvis[a[i]] = 1 ; continue ; \n\t\t}\n\n\t\twhile (1) {\n\t\t\tif (depth[lca] >= depth[st.second()]) {\n\t\t\t\tadd(lca , st.top()) ; \n\n\t\t\t\tif (lca != st.second()) st.pop() , st.push(lca) , root = min(root , dfn[lca]) ; \n\t\t\t\telse st.pop() ; \n\n\t\t\t\tbreak ; \n\t\t\t} else {\n\t\t\t\tadd(st.second() , st.top()) ; \n\t\t\t\tst.pop() ; \n\t\t\t}\n\t\t}\n\n\t\tst.push(a[i]) ; root = min(root , dfn[a[i]]) ; \n\t\tvis[a[i]] = 1 ; \n\t}\n\n\twhile (st.size() > 1) {\n\t\tadd(st.second() , st.top()) ; \n\t\tst.pop() ; \n\t}\n\n\tint now = Size[Rank[root]] ; \n\tSize[Rank[root]] += Size[1] - Size[Rank[root]] ; \n\tdfs3(Rank[root] , 1e9) ; dfs4(Rank[root] , 1e9) ; dfs5(Rank[root]) ; dfs6(Rank[root]) ; Extract(Rank[root]) ; \n\tdfs7(Rank[root]) ; \n\tfor (int i = 1 ; i <= len ; ++ i) {\n\t\tcout << Ans[b[i]] << ' ' ; \n\t} cout << '\\n' ; \n\tdfs8(Rank[root]) ; \n\tSize[Rank[root]] = now ; \n}\n\nsigned main() {\n\t// freopen(\"1.in\" , \"r\" , stdin) ; \n\t// freopen(\"1.out\" , \"w\" , stdout) ; \n\tios::sync_with_stdio(0) , cin.tie(0) , cout.tie(0) ; \n\tcin >> n ; \n\n\tfor (int i = 2 ; i <= n ; ++ i) lg[i] = lg[i >> 1] + 1 ; \n\tfor (int i = 1 , x , y ; i < n ; ++ i) {\n\t\tcin >> x >> y ; \n\t\tadd1(x , y) , add1(y , x) ; \n\t}\n\n\tdfs(1 , 0) ; dfs2(1 , 1) ; \n\tcin >> m ; \n\n\twhile (m --) {\n\t\tcin >> len ; for (int i = 1 ; i <= len ; ++ i) cin >> a[i] ; \n\t\tsolve(a , len) ; \n\t}\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2238. 「CQOI2014」和谐矩阵": [ | |
| { | |
| "id": 2140751, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 88, | |
| "memory": 680, | |
| "code": "#include<bits/stdc++.h>\ntypedef long long ll;\nusing namespace std;\ninline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}\nconst ll mod=1e9+7,maxn=1e5+5;\nconst double eps=1e-9;\nll n,m,ans[1605],dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};\nbitset<1605>a[1605];\ninline void gauss(ll n){\n for(ll i=1;i<=n;++i){\n ll r=i;\n while(!a[r][i]&&r<n)++r;\n if(i!=r)swap(a[i],a[r]);\n if(!a[i][i]){\n a[i][n+1]=1;\n for(ll j=i+1;j<=n;++j)a[i][j]=0;\n for(ll j=i+1;j<=n;++j)if(a[j][i])a[j].flip(n+1);\n continue;\n }\n for(ll j=i+1;j<=n;++j)if(a[j][i])a[j]^=a[i];\n }\n for(ll i=n;i>=1;--i){\n ans[i]=a[i][n+1];\n for(ll j=i+1;j<=n;++j){\n if(a[i][j])ans[i]^=ans[j];\n }\n }\n}\ninline ll node(ll x,ll y){return (x-1)*m+y;}\nsigned main(){\n ll T=1;\n while(T--){\n n=read(),m=read();\n for(ll i=1;i<=n;++i)for(ll j=1;j<=m;++j)for(ll k=0;k<=4;++k){\n ll x=i+dx[k],y=j+dy[k];\n if(x<1||x>n||y<1||y>m)continue;\n a[node(i,j)][node(x,y)]=1;\n }\n gauss(n*m);\n for(ll i=1;i<=n;++i){\n for(ll j=1;j<=m;++j){\n printf(\"%lld \",ans[node(i,j)]);\n }\n puts(\"\");\n }\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2127344, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 53, | |
| "memory": 660, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconstexpr int M=205;\nbitset<M>bit[M][M],a[M];\nint n,m,rec[M][M],ans[M];\nvoid gauss(){\n\tfor (int i=1;i<=n;i++){\n\t\tfor (int j=i;j<=n;j++)\n\t\t\tif (a[j][i]>0){\n\t\t\t\tswap(a[i],a[j]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (!a[i][i]) ans[i]=1;\n\t\tfor (int j=i+1;j<=n;j++)\n\t\t\tif (a[j][i]) a[j]^=a[i];\n\t}\n\tfor (int i=n;i;i--)\n\t\tfor (int j=i+1;j<=n;j++)\n\t\t\tans[i]^=(ans[j]*a[i][j]);\n}\nint main(){ bool tag=0;\n scanf(\"%d%d\",&n,&m);\n if (n>m) swap(n,m),tag=1;\n for (int i=1;i<=n;i++) bit[1][i].set(i);\n for (int i=2;i<=m+1;i++)\n for (int j=1;j<=n;j++)\n bit[i][j]=bit[i-1][j-1]^bit[i-1][j+1]^bit[i-1][j]^bit[i-2][j];\n for (int i=1;i<=n;i++) a[i]=bit[m+1][i];\n gauss();\n for (int i=1;i<=n;i++) rec[1][i]=ans[i];\n for (int i=2;i<=m;i++)\n for (int j=1;j<=n;j++)\n rec[i][j]=rec[i-1][j-1]^rec[i-1][j+1]^rec[i-1][j]^rec[i-2][j];\n if (tag){\n for (int i=1;i<=m;i++)\n for (int j=1;j<=n;j++)\n printf(\"%d%c\",rec[i][j],\" \\n\"[j==n]);\n return 0;\n }\n for (int i=1;i<=n;i++)\n for (int j=1;j<=m;j++)\n printf(\"%d%c\",rec[j][i],\" \\n\"[j==m]);\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2127340, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 52, | |
| "memory": 544, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconstexpr int M=205;\nbitset<M>bit[M][M],a[M];\nint n,m,rec[M][M],ans[M];\nvoid gauss(){\n\tfor (int i=1;i<=n;i++){\n\t\tfor (int j=i;j<=n;j++)\n\t\t\tif (a[j][i]){\n\t\t\t\tswap(a[i],a[j]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (!a[i][i]) ans[i]=1;\n\t\tfor (int j=i+1;j<=n;j++)\n\t\t\tif (a[j][i]) a[j]^=a[i];\n\t}\n\tfor (int i=n;i;i--)\n\t\tfor (int j=i+1;j<=n;j++)\n\t\t\tans[i]^=(ans[j]*a[i][j]);\n}\nint main(){\n scanf(\"%d%d\",&n,&m);\n for (int i=1;i<=n;i++) bit[1][i].set(i);\n for (int i=2;i<=m+1;i++)\n for (int j=1;j<=n;j++)\n bit[i][j]=bit[i-1][j-1]^bit[i-1][j+1]^bit[i-1][j]^bit[i-2][j];\n for (int i=1;i<=n;i++) a[i]=bit[m+1][i];\n gauss();\n for (int i=1;i<=n;i++) rec[1][i]=ans[i];\n for (int i=2;i<=m;i++)\n for (int j=1;j<=n;j++)\n rec[i][j]=rec[i-1][j-1]^rec[i-1][j+1]^rec[i-1][j]^rec[i-2][j];\n for (int i=1;i<=n;i++)\n for (int j=1;j<=m;j++)\n printf(\"%d%c\",rec[j][i],\" \\n\"[j==m]);\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2044126, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 115, | |
| "memory": 708, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\nconst int MAXN = 1610;\nbitset<MAXN> a[MAXN], res;\nbitset<MAXN> vis;\nint r, c, n, m;\nvoid Gauss()\n{\n\tvector<int> certain;\n\tint cnt = 0;\n\tint i = 1, j = 1;\n\twhile (i <= n && j <= m)\n\t{\n\t\tint pos = -1;\n\t\tfor (int k = i; k <= n; k++)\n\t\t{\n\t\t\tif (a[k][j])\n\t\t\t{\n\t\t\t\tpos = k;\n\t\t\t}\n\t\t}\n\t\tif (pos == -1)\n\t\t{\n\t\t\tcnt++;\n\t\t\tvis[j] = 1;\n\t\t\tj++;\n\t\t\tcontinue;\n\t\t}\n\t\tcertain.push_back(j);\n\t\tif (pos != i) swap(a[i], a[pos]);\n\t\tfor (int k = i + 1; k <= n; k++)\n\t\t{\n\t\t\tif (a[k][j]) a[k] ^= a[i];\n\t\t}\n\t\ti++, j++;\n\t}\n\tint lst = 0;\n\tfor (int k = 1; k <= m; k++) if (vis[k])\n\t{\n\t\tlst = k;\n\t\tbreak;\n\t}\n//\tcout << lst << \"\\n\";\n\tcertain.push_back(m + 1);\n//\tfor (auto &k: certain) cout << k << \" \";\n//\tcout << \" \\n\";\n for (int k = certain.size() - 1; k; k--)\n \t{\n \t\tint now = certain[k - 1];\n \t\tif (lst > now && lst < certain[k])\n \t\t{\n \t\t\tres[lst] = 1;\n \t\t\tfor (int l = k; l; l--) if (a[l][lst]) a[l][m + 1] = !a[l][m + 1];\n\t\t}\n\t\tres[now] = a[k][m + 1];\n\t\tif (a[k][m + 1]) for (int l = k - 1; l; l--) if (a[l][now]) a[l][m + 1] = !a[l][m + 1];\n\t}\n\tif (lst < certain.front())\n\t{\n\t\tres[lst] = 1;\n\t}\n}\nint dx[4] = /**/{1, 0, -1, 0};\nint dy[4] = /**/{0, 1, 0, -1};\nint getid(int x, int y)\n{\n\treturn n - ((x - 1) * c + y) + 1;\n}\nint main()\n{\n//\tios::sync_with_stdio(false);\n\tcin >> r >> c;\n\tn = m = r * c;\n\tfor (int i = 1; i <= r; i++)\n\t{\n\t\tfor (int j = 1; j <= c; j++)\n\t\t{\n\t\t\ta[getid(i, j)][getid(i, j)] = 1;\n\t\t\tfor (int k = 0; k < 4; k++)\n\t\t\t{\n\t\t\t\tint x = i + dx[k], y = j + dy[k];\n\t\t\t\tif (x > 0 && x <= r && y > 0 && y <= c) a[getid(i, j)][getid(x, y)] = 1;\n\t\t\t}\n\t\t}\n\t}\n\tGauss();\n\tfor (int i = 1; i <= r; i++)\n\t{\n\t\tfor (int j = 1; j <= c; j++)\n\t\t{\n\t\t\tcout << res[getid(i, j)] << \" \";\n\t\t}\n\t\tcout << \"\\n\";\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1996125, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 1661, | |
| "memory": 10480, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\n#define MAXN 1605\n\nint m,n;\nint a[MAXN][MAXN];\n\nconst int dx[5]={-1,1,0,0,0};\nconst int dy[5]={0,0,-1,1,0};\n\nint to(int x,int y){\n return (x-1)*n+y;\n}\n\nint ans[MAXN];\n\nint main(){\n ios::sync_with_stdio(false);\n \n cin>>m>>n;\n int sz=n*m;\n\n for(int i=1;i<=m;i++){\n for(int j=1;j<=n;j++){\n for(int k=0;k<5;k++){\n if((i+dx[k]>=1)&&(i+dx[k]<=m)&&(j+dy[k]>=1)&&(j+dy[k]<=n)){\n a[to(i,j)][to(i+dx[k],j+dy[k])]=1;\n }\n }\n }\n }\n\n memset(ans,-1,sizeof(ans));\n\n for(int i=1;i<=sz;i++){\n int l=0;\n for(int j=i;j<=sz;j++){\n if(a[j][i]){\n l=j;\n break;\n }\n }\n\n if(!l){\n for(int j=1;j<i;j++){\n if(a[j][i]){\n a[j][i]^=1;\n a[j][sz+1]^=1;\n }\n }\n ans[i]=1;\n }else{\n for(int j=1;j<=sz+1;j++){\n swap(a[i][j],a[l][j]);\n }\n for(int j=1;j<=sz;j++){\n if(j==i||(!a[j][i])){\n continue;\n }\n for(int k=1;k<=sz+1;k++){\n a[j][k]^=a[i][k];\n }\n }\n }\n }\n\n for(int i=1;i<=sz;i++){\n if(ans[i]!=-1){\n cout<<ans[i]<<\" \";\n }else{\n cout<<a[i][sz+1]<<\" \";\n }\n if(i%n==0){\n cout<<endl;\n }\n }\n\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1872843, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 86, | |
| "memory": 764, | |
| "code": "#include <bits/stdc++.h>\n\nusing namespace std;\n\nint n, m;\nint fake;\nint idx[] = {0, 0, 0, 1, -1};\nint idy[] = {0, 1, -1, 0, 0};\nbitset<1605> b[1605];\nint ans[1605];\n\nint get(int x, int y) {\n\treturn (x - 1) * m + y;\n}\n\nint main() {\n\tios_base::sync_with_stdio(false);\n\tcin.tie(nullptr);\n\t\n\tcin >> n >> m;\n\tmemset(ans, -1, sizeof ans);\n\tfake = get(n, m);\n\tint now = 0;\n\tfor (int i = 1; i <= n; ++i) {\n\t\tfor (int j = 1; j <= m; ++j) {\n\t\t\t++now;\n\t\t\tfor (int k = 0; k < 5; ++k) {\n\t\t\t\tint tx = i + idx[k], ty = j + idy[k];\n\t\t\t\tif (tx >= 1 && tx <= n && ty >= 1 && ty <= m) {\n\t\t\t\t\tb[now][get(tx, ty)] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n//\tfor (int i = 1; i <= fake; ++i) {\n//\t\tfor (int j = 1; j <= fake + 1; ++j) {\n//\t\t\tcout << b[i][j] << ' ';\n//\t\t}\n//\t\tcout << '\\n';\n//\t}\n//\tcout << \"----------------------\\n\";\n\tfor (int i = 1; i <= fake; ++i) {\n\t\tint m = i;\n\t\tfor (int j = i; j <= fake; ++j) {\n\t\t\tif (b[j][i] == 1) {\n\t\t\t\tm = j;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswap(b[i], b[m]);\n\t\tif (b[i][i] == 0) {\n\t\t\tans[i] = 1;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (int j = 1; j <= fake; ++j) {\n\t\t\tif (b[j][i] == 0) continue;\n\t\t\tif (i == j) continue;\n\t\t\tb[j] ^= b[i];\n\t\t}\n//\t\tfor (int i = 1; i <= fake; ++i) {\n//\t\t\tfor (int j = 1; j <= fake + 1; ++j) {\n//\t\t\t\tcout << b[i][j] << ' ';\n//\t\t\t}\n//\t\t\tcout << '\\n';\n//\t\t}\n//\t\tcout << \"----------------------\\n\";\n\t}\n\tfor (int i = 1; i <= fake; ++i) {\n\t\tif (ans[i] != -1) continue;\n//\t\tcout << i << \" ??? \\n\";\n\t\tbool val = 0;\n\t\tfor (int j = 1; j <= fake; ++j) {\n\t\t\tif (b[i][j] == 0) continue;\n\t\t\tif (ans[j] == -1) continue;\n\t\t\tval ^= ans[j];\n\t\t}\n//\t\tcout << val << \" !!! \\n\";\n\t\tans[i] = val;\n\t}\n\tnow = 0;\n\tfor (int i = 1; i <= n; ++i) {\n\t\tfor (int j = 1; j <= m; ++j) {\n\t\t\t++now;\n\t\t\tcout << ans[now] << ' ';\n\t\t}\n\t\tcout << '\\n';\n\t}\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1873708, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 122, | |
| "memory": 760, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconst int N=45;\nconst int M=1605;\nbitset<M>a[M];\nint dx[15]={0,0,0,1,-1},dy[15]={0,1,-1,0,0};\nint n,m,kong[N][N],pos,ans[M];\nvoid prepare()\n{\n\tfor(int i=1;i<=n;i++)\n\t{\n\t\tfor(int j=1;j<=m;j++)\n\t\t{\n\t\t\tkong[i][j]=++pos;\n\t\t}\n\t}\n\tfor(int i=1;i<=n;i++)\n\t{\n\t\tfor(int j=1;j<=m;j++)\n\t\t{\n\t\t\tfor(int k=0;k<=4;k++)\n\t\t\t{\n\t\t\t\tint x=i+dx[k];\n\t\t\t\tint y=j+dy[k];\n\t\t\t\t// cout<<\"prepare: \"<<i<<' '<<j<<' '<<x<<' '<<y<<' '<<kong[x][y]<<'\\n';\n\t\t\t\tif(x>=1&&x<=n&&y>=1&&y<=m)\n\t\t\t\t{\n\t\t\t\t\ta[kong[i][j]][kong[x][y]]=1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor(int i=1;i<=pos;i++)a[i][n*m+1]=0;\n}\nvoid gauss()\n{\n\tint x=n*m;\n\t// cout<<\"a: \"<<x<<'\\n';\n\t// for(int i=1;i<=x;i++)\n\t// {\n\t// \tfor(int j=1;j<=x;j++)\n\t// \t{\n\t// \t\tcout<<a[i][j]<<' ';\n\t// \t}\n\t// \tcout<<'\\n';\n\t// }\n\t// cout << \"----------------------\\n\";\n\tfor(int i=1;i<=x;i++)\n\t{\n\t\tint m=i;\n\t\tfor(int j=i;j<=x;j++)\n\t\t{\n\t\t\tif(a[j][i])\n\t\t\t{\n\t\t\t\tm=j;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswap(a[i],a[m]);\n\t\t// cout<<i<<' '<<m<<' '<<a[i][i]<<'\\n';\n\t\tif(!a[i][i])\n\t\t{\n\t\t\t// cout<<\"ans: \"<<i<<'\\n';\n\t\t\tans[i]=1;\n\t\t\tcontinue;\n\t\t}\n\t\tfor(int j=1;j<=x;j++)\n\t\t{\n\t\t\tif(j==i)continue;\n\t\t\tif(!a[j][i])continue;\n\t\t\ta[j]=a[j]^a[i];\n\t\t}\n\t\t// for(int j=1;j<=x;j++)\n\t\t// {\n\t\t// \tfor(int k=1;k<=x+1;k++)\n\t\t// \t{\n\t\t// \t\tcout<<a[j][k]<<' ';\n\t\t// \t}\n\t\t// \tcout<<'\\n';\n\t\t// }\n\t\t// cout << \"----------------------\\n\";\n\t}\n\tfor(int i=1;i<=x;i++)\n\t{\n\t\tif(ans[i])continue;\n\t\tint kong=0;\n\t\tfor(int j=1;j<=x;j++)\n\t\t{\n\t\t\tif(!ans[j]||!a[i][j])continue;\n\t\t\t// cout<<i<<' '<<j<<'\\n';\n\t\t\tkong^=ans[j];\n\t\t}\n\t\t// cout<<\"calc: \"<<i<<' '<<kong<<'\\n';\n\t\tans[i]=kong;\n\t}\n\tint fqr=0;\n\tfor(int i=1;i<=n;i++)\n\t{\n\t\tfor(int j=1;j<=m;j++)\n\t\t{\n\t\t\t++fqr;\n\t\t\tcout<<ans[fqr]<<' ';\n\t\t}\n\t\tcout<<'\\n';\n\t}\n}\nsigned main()\n{\n\tios::sync_with_stdio(false);\n\tcin.tie(NULL);cout.tie(NULL);\n\t#ifdef LOCAL\n freopen(\"test.in\", \"r\", stdin);\n freopen(\"test.out\", \"w\", stdout);\n #endif\n\tcin>>n>>m;\n\tprepare();\n\tgauss();\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1722607, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2238. 「CQOI2014」和谐矩阵", | |
| "time": 118, | |
| "memory": 808, | |
| "code": "/*\n看到你时总是感觉清风徐徐\n本以为和你相识不会是偶遇\n奈何你犹如过客、化作秋雨\n只是经过我生命的一瓢柳絮\n从不会真正有童话似的结局\n我静静地写尽这些躁言丑句\n本以为可以稍稍地缓解抑郁\n却是徒增一场悲伤的脑补剧\n你问我为什么说这么多?\n因为这题是 [CQOI2014]和谐矩阵\n*/\n#include<bits/stdc++.h>\nusing namespace std;\nconst int maxn = 45;\n#define xx\tx + walk[_][0]\n#define yy\ty + walk[_][1]\nint n,m,ans[maxn * maxn],z;\nbitset <maxn * maxn> a[maxn * maxn];\nint walk[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};\ninline int read()\n{\n\tint x = 0,f = 1;char ch = getchar();\n\twhile(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}\n\twhile(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}\n\treturn f * x;\n}\ninline int num(int x,int y){return (x - 1) * m + y;}\ninline bool check(int x,int y){return (x > 0&&x <= n&&y > 0&&y <= m);}\nvoid Gauss()\n{\n\tfor(int x = 1;x <= n;x++)\tfor(int y = 1;y <= m;y++)\tfor(int _ = 0;_ < 4;_++)\tif(check(xx,yy))\ta[num(x,y)][num(xx,yy)] = 1;\n\tfor(int x = 1;x <= n;x++)\tfor(int y = 1;y <= m;y++)\ta[num(x,y)][num(x,y)] = 1;\n\tz = n * m;\n\tfor(int i = 1;i <= z;i++)\t\n\t{\n\t\tint cnt = -1;\n\t\tfor(int j = i;j <= z;j++)\tif(a[j][i])\tcnt = j;\n\t\tif(cnt == -1)\t{ans[i] = 1;continue;}\n\t\tswap(a[cnt],a[i]);\n\t\tfor(int j = 1;j <= z;j++)\tif(j != i&&a[i][i]&&a[j][i])\ta[j] ^= a[i];\n\t}\n\tfor(int i = 1;i <= z;i++)\tif(a[i][i])\n\t{\t\n\t\tans[i] = a[i][z + 1];\n\t\tfor(int j = 1;j <= z;j++)\tif(j != i)\tans[i] ^= a[i][j];\n\t}\n}\nvoid output()\n{\n\tfor(int i = 1;i <= n;i++)\n\t{\n\t\tfor(int j = 1;j <= m;j++)\tprintf(\"%d \",ans[num(i,j)]);\n\t\tputs(\"\"); \n\t}\n}\nint main()\n{\n\tn = read(),m = read();\n\tGauss();\n\toutput();\n\treturn 0 ;\n}\n/*\nZJOI 2023 RP++\n*/", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2426. 「POI2010」工会 Guilds": [ | |
| { | |
| "id": 2212828, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 1578, | |
| "memory": 30040, | |
| "code": "// Homura Akemi a.k.a. Starrykiller (/user/235125)\n// I love Madoka Kaname forever! \n#include <bits/stdc++.h>\n\nusing namespace std;\n\nauto range(auto l, auto r) { return views::iota(l,r); }\nauto rev=views::reverse;\n\n_GLIBCXX_ALWAYS_INLINE void chmax(auto &a, auto b) { a=max(a,b); }\n_GLIBCXX_ALWAYS_INLINE void chmin(auto &a, auto b) { a=min(a,b); }\n#define int long long\n\nsigned main() {\n ios::sync_with_stdio(false);\n cin.tie(nullptr); cout.tie(nullptr);\n// int T; cin>>T;\nint T=1;\nwhile (T--) []{\n int n, m; cin>>n>>m;\n vector G(n,vector<int>()); \n for (int i=0,u,v; i<m; ++i) {\n cin>>u>>v; \n G[--u].push_back(--v); G[v].push_back(u);\n }\n vector<int> vis(n); int cnt=0;\n vector<int> col(n);\n auto dfs=[&](auto &&self, int u, int c=0)->void {\n col[u]=c; vis[u]=1; cnt++;\n for (auto v: G[u]) if (!vis[v]) self(self,v,c^1);\n };\n for (int i=0; i<n; ++i) if (!vis[i]) {\n cnt=0;\n dfs(dfs,i);\n if (cnt==1) {\n cout<<\"NIE\\n\"; return;\n }\n }\n cout<<\"TAK\\n\";\n for (auto i: col) cout<<\"KS\"[i]<<'\\n';\n\n}();\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2141485, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 586, | |
| "memory": 9892, | |
| "code": "#include<cstdio>\nusing namespace std;\nconst int MAXN=200010,MAXM=1000010;//注意边数要乘2\nint h[MAXN],color[MAXN],tot=0;//h为邻接表中的head,tot为总边数\nbool vis[MAXN];//记录是否有连接\nstruct Edge{//边的结构体\n\tint v;\n\tint next;//next记录这条边在邻接表中指向同端点的另一条边\n}e[MAXM];\nvoid addEdge(int u,int v){//建边\n\ttot++;\n\te[tot].v=v;\n\te[tot].next=h[u],h[u]=tot;\n}\nvoid dfs(int u){//深搜,u为原节点,保证已染色\n\tfor(int k=h[u];k;k=e[k].next){//邻接表查找\n\t\tint v=e[k].v;\n\t\tcolor[v]=color[u]%2+1;//公式\n\t}\n}\nint main(){\n\tint n,m;\n\tscanf(\"%d%d\",&n,&m);\n\twhile(m--){\n\t\tint uu,vv;\n\t\tscanf(\"%d%d\",&uu,&vv);\n\t\tvis[uu]=1,vis[vv]=1;//记录\n\t\taddEdge(uu,vv);addEdge(vv,uu);//建边\n\t}\n\tfor(int i=1;i<=n;i++)//判断是否不行\n\t if(!vis[i]){\n\t \tprintf(\"NIE\\n\");//输出\n\t \treturn 0;//返回\n\t\t}\n\tprintf(\"TAK\\n\");//直接输出\n\tfor(int i=1;i<=n;i++)//每个点都搜一遍\n\t\tif(!color[i]){//没搜过\n\t\t\tcolor[i]=1;//先设为白点\n\t\t\tdfs(i);//开搜\n\t\t}\n\tfor(int i=1;i<=n;i++){//输出\n\t\tif(color[i]==1) printf(\"K\\n\");\n\t\telse printf(\"S\\n\");\n\t}\n\treturn 0;//华丽结束\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2030944, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 1490, | |
| "memory": 23844, | |
| "code": "#include<iostream>\n#include<cstdio>\n#include<vector>\nusing namespace std;\nvector<int>G[200005];\nchar ans[200005];\nint cnt=0;\nvoid dfs(int x,bool sta){\n\tcnt++;\n\tif(sta)ans[x]='K';\n\telse ans[x]='S';\n\tfor(int i=0; i<G[x].size(); i++){\n\t\tint y=G[x][i];\n\t\tif(!ans[y]){\n\t\t\tdfs(y,!sta);\n\t\t}\n\t}\n}\nint main(){\n\tint n,m;\n\tscanf(\"%d%d\",&n,&m);\n\twhile(m--){\n\t\tint x,y;\n\t\tscanf(\"%d %d\",&x,&y);\n\t\tG[x].push_back(y);\n\t\tG[y].push_back(x);\n\t}\n\t\n\tbool ok=1;\n\tfor(int i=1; i<=n; i++){\n\t\tif(!ans[i]){\n\t\t\tcnt=0;\n\t\t\tdfs(i,1);\n\t\t\tif(cnt==1){\n\t\t\t\tans[i]='N';\n\t\t\t\tok=0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}if(!ok){printf(\"NIE\\n\");return 0;\n\t}\n\tprintf(\"TAK\\n\");\n\tfor(int i=1; i<=n; i++){\n\t\tprintf(\"%c\\n\",ans[i]);\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++14", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2029999, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 1371, | |
| "memory": 21240, | |
| "code": "#include<algorithm>\n#include<iostream>\n#include<cstring>\n#include<cstdio>\n#include<cmath>\n#include<vector>\n#define ll long long\n#define f(i,j,k) for(int i=(j),K=(k);i<=(K);++i)\nusing namespace std;\nconst int N=1e6+10,M=5e5+10;\nint n,m,k,clo[N],siz[N];\nstruct node{\n\tvector<int> v;\n}e[N];\n\nint main(){\n\tscanf(\"%d%d\",&n,&m);\n\tf(i,1,m){\n\t\tint u,vi;\n\t\tscanf(\"%d%d\",&u,&vi);\n\t\te[u].v.push_back(vi);\n\t\te[vi].v.push_back(u);\n\t\tsiz[u]++,siz[vi]++;\n\t}\n\t\n\tif(e[1].v.empty()){\n\t\tputs(\"NIE\");\n\t\treturn 0;\n\t}\n\tf(i,1,n){\n//\t\tprintf(\"%d\\n\",i);\n\t\tbool f1=0,f2=0;\n\t\tf(j,0,e[i].v.size()-1){\n\t\t\tint vi=e[i].v[j];\n\t\t\tif(clo[vi]==1)f1=1;\n\t\t\tif(clo[vi]==2)f2=1;\n//\t\t\tprintf(\"!%d %d\\n\",vi,clo[vi]);\n\t\t}\n\t\tif(f1)clo[i]=2;\n\t\telse clo[i]=1;\n//\t\tprintf(\"%d %d %d\\n\",f1,f2,clo[i]);\n\t}\n\t\n\tf(i,1,n){\n\t\tbool f1=0,f2=0;\n\t\tf(j,0,e[i].v.size()-1){\n\t\t\tint vi=e[i].v[j];\n\t\t\tif(clo[vi]==1)f1=1;\n\t\t\tif(clo[vi]==2)f2=1;\n\t\t}\n\t\tif(clo[i]==1)f1=1;\n\t\telse if(clo[i]==2)f2=1;\n\t\tif(f1==0||f2==0){\n\t\t\tputs(\"NIE\");\n\t\t\treturn 0;\n\t\t}\n\t}\n\tputs(\"TAK\");\n\tf(i,1,n)puts(clo[i]==1?\"K\":\"S\");\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2029998, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 473, | |
| "memory": 20956, | |
| "code": "#include <cmath>\n#include <ctime>\n#include <queue>\n#include <cstdio>\n#include <cstdlib>\n#include <cstring>\n#include <iostream>\n#include <algorithm>\nusing namespace std;\ntypedef long long ll;\n\nchar buf[1<<20], *p1, *p2;\n#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)\n\ninline ll read() {\n\tll x=0, f=1;\n\tchar ch=getchar();\n\twhile (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}\n\twhile (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48); ch=getchar();}\n\treturn x*f;\n}\n\n#define N 200010\n#define M 500010\n#define v e[i].to\nll n, m, t1, t2, g[N];\nll head[N], tot;\nbool nie;\nqueue<ll> q;\n\nstruct edge {\n\tll to, nxt;\n} e[M<<1];\n\nvoid add_edge(ll x, ll y) {\n\te[++tot].nxt=head[x];\n\te[tot].to=y;\n\thead[x]=tot;\n}\n\nvoid bfs(ll x) {\n\tif (g[x]) return;\n\tg[x]=1, q.push(x);\n\twhile (!q.empty()) {\n\t\tll u=q.front(); q.pop();\n\t\tif (head[u]==0) {nie=1; return;}\n\t\tfor (ll i=head[u]; i; i=e[i].nxt) {\n\t\t\tif (!g[v]) g[v]=-g[u], q.push(v);\n\t\t}\n\t}\n}\n\nsigned main() {\n\tn=read();\n\tm=read();\n\tfor (ll i=1; i<=m; ++i) {\n\t\tt1=read(), t2=read();\n\t\tadd_edge(t1, t2), add_edge(t2, t1);\n\t}\n\tfor (ll i=1; i<=n; ++i) bfs(i);\n\tif (nie) {puts(\"NIE\"); return 0;}\n\tputs(\"TAK\");\n\tfor (ll i=1; i<=n; ++i) puts((g[i]==1)?\"K\":\"S\");\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++17", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2029996, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 2062, | |
| "memory": 24368, | |
| "code": "#include<algorithm>\n#include<cmath>\n#include<cstdio>\n#include<cstring>\n#include<iomanip>\n#include<iostream>\n#include<list>\n#include<map>\n#include<queue>\n#include<set>\n#include<stack>\n#include<string>\n#include<vector>\n#define ll long long\n#define DBG(x) cout << #x << \"=\" << x << endl\n#define eps 1e-8\n#define inf 0x3f3f3f3f\n#define mod 998244353\n#define N 200005\nusing namespace std;\ntemplate <typename T>\nvoid read(T& x) {\n x = 0;\n ll t = 1;\n char ch;\n ch = getchar();\n while (ch < '0' || ch > '9') {\n if (ch == '-') {\n t = -1;\n }\n ch = getchar();\n }\n while (ch >= '0' && ch <= '9') {\n x = x * 10 + (ch - '0');\n ch = getchar();\n }\n x *= t;\n}\ntemplate <typename T, typename... Args>\nvoid read(T& first, Args&... args) {\n read(first);\n read(args...);\n}\ntemplate <typename T>\nvoid write(T y) {\n T x = y;\n if (x < 0) {\n putchar('-');\n x = -x;\n }\n if (x > 9) {\n write(x / 10);\n }\n putchar(x % 10 + '0');\n}\ntemplate <typename T, typename... Ts>\nvoid write(T arg, Ts... args) {\n write(arg);\n if (sizeof...(args) != 0) {\n putchar(' ');\n write(args...);\n }\n}\nint n,m,x,y,vis[N],flag;\nvector<int> ve[N]; \nvoid dfs(int u,int c){\n\tvis[u]=c;\n\tif(ve[u].size()==0){\n\t\tflag=1;\n\t\treturn;\n\t}\n\tfor(int i=0;i<ve[u].size();i++){\n\t\tint v=ve[u][i];\n\t\tif(vis[v]==-1){\n\t\t\tdfs(v,!c);\n\t\t}\n\t}\n}\nint main(){\n\tscanf(\"%d %d\",&n,&m);\n\tmemset(vis,-1,sizeof vis);\n\tfor(int i=1;i<=m;i++){\n\t\tscanf(\"%d %d\",&x,&y);\n\t\tve[x].push_back(y);\n\t\tve[y].push_back(x);\n\t}\n\tfor(int i=1;i<=n;i++){\n\t\tif(vis[i]==-1){\n\t\t\tdfs(i,1);\n\t\t}\n\t}\n\tif(flag==1){\n\t\tcout<<\"NIE\"<<endl;\n\t\treturn 0;\n\t}\n\tcout<<\"TAK\"<<endl;\n\tfor(int i=1;i<=n;i++){\n\t\tif(vis[i]==1){\n\t\t\tcout<<\"K\"<<endl;\n\t\t}\n\t\telse{\n\t\t\tcout<<\"S\"<<endl;\n\t\t}\n\t}\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "clang++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2029995, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 434, | |
| "memory": 21032, | |
| "code": "#include <cmath>\n#include <ctime>\n#include <queue>\n#include <cstdio>\n#include <cstdlib>\n#include <cstring>\n#include <iostream>\n#include <algorithm>\nusing namespace std;\ntypedef long long ll;\n\nchar buf[1<<20], *p1, *p2;\n#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)\n\ninline ll read() {\n\tll x=0, f=1;\n\tchar ch=getchar();\n\twhile (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}\n\twhile (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}\n\treturn x*f;\n}\n\n#define N 200010\n#define M 500010\n#define v e[i].to\nll n, m, t1, t2, g[N];\nll head[N], tot;\nbool nie;\nqueue<ll> q;\n\nstruct edge {\n\tll to, nxt;\n} e[M<<1];\n\nvoid add_edge(ll x, ll y) {\n\te[++tot].nxt=head[x];\n\te[tot].to=y;\n\thead[x]=tot;\n}\n\nvoid bfs(ll x) {\n\tif (g[x]) return;\n\tg[x]=1, q.push(x);\n\twhile (!q.empty()) {\n\t\tll u=q.front(); q.pop();\n\t\tif (head[u]==0) {nie=1; return;}\n\t\tfor (ll i=head[u]; i; i=e[i].nxt) {\n\t\t\tif (!g[v]) g[v]=-g[u], q.push(v);\n\t\t}\n\t}\n}\n\nsigned main() {\n\tn=read();\n\tm=read();\n\tfor (ll i=1; i<=m; ++i) {\n\t\tt1=read(), t2=read();\n\t\tadd_edge(t1, t2), add_edge(t2, t1);\n\t}\n\tfor (ll i=1; i<=n; ++i) bfs(i);\n\tif (nie) {puts(\"NIE\"); return 0;}\n\tputs(\"TAK\");\n\tfor (ll i=1; i<=n; ++i) puts((g[i]==1)?\"K\":\"S\");\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++17", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2029994, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2426. 「POI2010」工会 Guilds", | |
| "time": 478, | |
| "memory": 16692, | |
| "code": "#include<iostream>\n#include<cstdio>\n#include<cstring>\n#include<vector>\n#include<algorithm>\nusing namespace std;\n#define ll long long\n#define il inline\n#define N 200005\nil ll read() {\n\tll x=0,f=1;char c=std::getchar();\n\twhile(c<'0'||c>'9') {if(c=='-') {f=-1;} c=std::getchar();}\n\twhile(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+(c^48);c=std::getchar();}\n\treturn x*f;\n}\nstruct Edge {\n\tint nxt,u,v;\n\tEdge() {}\n\tEdge(int _nxt,int _u,int _v) {nxt=_nxt,u=_u,v=_v;}\n};\nEdge edge[N*5];\nint head[N],num_edge;\nint n,m,d[N],vis[N];\nil void add_edge(int u,int v) {\n\tedge[++num_edge]=Edge(head[u],u,v);\n\thead[u]=num_edge;\n}\nil void dfs(int u,int type) {\n\tvis[u]=2-type;\n\tfor(int i=head[u];i;i=edge[i].nxt) {\n\t\tint v=edge[i].v;\n\t\tif(vis[v]) continue;\n\t\tdfs(v,type^1);\n\t}\n}\nint main() {\n\tn=read(),m=read();\n\tfor(int i=1;i<=m;i++) {\n\t\tint a=read(),b=read();\n\t\tadd_edge(a,b);\n\t\tadd_edge(b,a);\n\t\td[a]++,d[b]++;\n\t}\n\tfor(int i=1;i<=n;i++) if(d[i]==0) {\n\t\tprintf(\"NIE\\n\");\n\t\treturn 0;\n\t}\n\tfor(int i=1;i<=n;i++) if(!vis[i]) dfs(i,1);\n\tprintf(\"TAK\\n\");\n\tfor(int i=1;i<=n;i++) {\n\t\tif(vis[i]==1) printf(\"K\\n\");\n\t\telse printf(\"S\\n\");\n\t}\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| } | |
| ], | |
| "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest": [ | |
| { | |
| "id": 1961660, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 370, | |
| "memory": 15424, | |
| "code": "#include <bits/stdc++.h>\n\nconst int MAXN = 300005;\nconst long long INF = 1e16;\n\nusing namespace std;\n\nnamespace MCMF {\n\tstruct Edge {\n\t\tint to, nxt;\n\t\tlong long f, w;\n\t} E[MAXN << 1];\n\t\n\tint H[MAXN], tot = 1;\n\t\n\tinline void Add_Edge (const int u, const int v, const long long f, const long long w) {\n\t\tE[++ tot] = {v, H[u], f, + w}, H[u] = tot;\n\t\tE[++ tot] = {u, H[v], 0, - w}, H[v] = tot;\n\t}\n\t\n\tint Cur[MAXN], Dis[MAXN];\n\tbool Vis[MAXN];\n\t\n\tint S = 114514, T = 191981;\n\t\n\tinline bool SPFA () {\n\t\tmemset (Dis, 63, sizeof Dis);\n\t\tdeque <int> q;\n\t\tq.push_front (S), Dis[S] = 0;\n\t\tint u, v, w, f;\n\t\twhile (!q.empty ()) {\n\t\t\tu = q.front (), q.pop_front (), Vis[u] = 0, Cur[u] = H[u];\n\t\t\tfor (int i = H[u]; i; i = E[i].nxt) {\n\t\t\t\tv = E[i].to, w = E[i].w, f = E[i].f;\n\t\t\t\tif (Dis[v] > Dis[u] + w && f) {\n\t\t\t\t\tDis[v] = Dis[u] + w;\n\t\t\t\t\tif (!Vis[v]) {\n\t\t\t\t\t\tif (q.empty () || Dis[v] < Dis[q.front ()]) q.push_front (v), Vis[v] = 1;\n\t\t\t\t\t\telse q.push_back (v), Vis[v] = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Dis[T] < 1e9) return 1;\n\t\treturn 0;\n\t} \n\t\n\tlong long MinC = 0;\n\t\n\tinline long long DFS (const int x, const long long MAXF) {\n\t\tif (x == T || MAXF == 0) return MAXF;\n\t\tlong long F = 0;\n\t\tVis[x] = 1;\n\t\tfor (int i = Cur[x]; i && F < MAXF; i = E[i].nxt) {\n\t\t\tCur[x] = i;\n\t\t\tif (!Vis[E[i].to] && Dis[E[i].to] == Dis[x] + E[i].w && E[i].f) {\n\t\t\t\tlong long TmpF = DFS (E[i].to, min (E[i].f, MAXF - F));\n\t\t\t\tif (!TmpF) Dis[E[i].to] = -1;\n\t\t\t\tF += TmpF, E[i].f -= TmpF, E[i ^ 1].f += TmpF, MinC += E[i].w * TmpF;\n\t\t\t}\n\t\t}\n\t\tVis[x] = 0;\n\t\treturn F;\n\t}\n\t\n\tint Flr[MAXN];\n\tint N, M, R, P, K, u, v;\n\t\n\tinline long long Dinic () {\n\t\tlong long F = 1, MAXF = 0;\n\t\twhile (F) {\n\t\t\tF = 0;\n\t\t\twhile (SPFA ()) F += DFS (S, INF);\n\t\t\tMAXF += F;\n\t\t\tif (F) {\n\t\t\t\tfor (int i = 1; i <= N; ++ i) {\n\t\t\t\t\tif (E[H[i] ^ 1].f == 0 && Flr[i] + 1 <= P / R) \n\t\t\t\t\t\t++ Flr[i], Add_Edge (S, i, 1, Flr[i] * R);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\treturn MAXF;\n\t}\n}\n\nnamespace Value {\n\t\n\tinline void Solve () {\n\t\tusing namespace MCMF;\n\t\t\n\t\tios::sync_with_stdio(0);\n\t\tcin.tie(0), cout.tie(0);\n\t\t\n\t\tcin >> N >> M >> R >> P >> K;\n\t\t\n\t\tfor (int i = 1; i <= M; ++ i)\n\t\t\tAdd_Edge (i + 1000, T, 1, 0);\n\t\t\n\t\tfor (int i = 1; i <= K; ++ i) \n\t\t\tcin >> u >> v, Add_Edge (u, v + 1000, 1, 0);\n\t\t\n\t\tfor (int i = 1; i <= N; ++ i)\n\t\t\tif (P / R >= 1)\n\t\t\t\tAdd_Edge (S, i, 1, R), Flr[i] = 1;\n\t\n\t\tlong long Ans = 0;\n\t\t\n\t\tcout << (Ans = Dinic ()) << ' ' << MinC << endl;\n\t\n\t\tmemset (Flr, 0, sizeof Flr);\n\t\t\n\t\tfor (int j = 2; j <= tot; j += 2) {\n\t\t\tif (E[j ^ 1].to <= N && E[j].to <= M + 1000 && E[j].f == 0) {\n\t\t\t\tcout << E[j ^ 1].to << ' ' << E[j].to - 1000 << ' ' << ((Flr[E[j ^ 1].to] ++) * R) << endl;\n\t\t\t}\n\t\t}\n\t}\n}\n\nint main () {\n\t\n\tValue::Solve ();\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1961380, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 1187, | |
| "memory": 30960, | |
| "code": "#include <bits/stdc++.h>\n\nconst int MAXN = 1200005;\nconst long long INF = 1e16;\nconst int Limit = 1000000;\n\nusing namespace std;\n\nint MAX = 0;\n\ninline int G (const int x, const int k) {\n//\tif (x == 32) cerr << \"Mea \" << k << endl;\n//\tif (k * 1000 + x + 1000 > MAX) cerr << (MAX = k * 1000 + x + 1000) << endl;\n\treturn k * 1000 + x + 1000;\n}\n\nnamespace MCMF {\n\tstruct Node {\n\t\tint to, nxt;\n\t\tlong long f, w;\n\t} E[MAXN << 4];\n\t\n\tint H[MAXN], tot = 1;\n\t\n\tinline void Add_Edge (const int u, const int v, const long long f, const long long w) {\n\t//\tif (u % 1000 == 32 && v == 519198) cerr << u << ' ' << f << ' ' << w << endl;\n\t\tE[++ tot] = {v, H[u], f, + w}, H[u] = tot;\n\t\tE[++ tot] = {u, H[v], 0, - w}, H[v] = tot;\n\t}\n\t\n\tbool Vis[MAXN];\n\tint S = 511451, T = 519198;\n\tint Dis[MAXN], Cur[MAXN];\n\t\n\tinline bool SPFA () {\n\t\tmemset (Dis, 63, sizeof Dis);\n\t\tqueue <int> q;\n\t\tq.push (S), Dis[S] = 0;\n\t\tint u, v, w, f;\n\t\twhile (!q.empty ()) {\n\t\t\tu = q.front (), q.pop (), Vis[u] = 0, Cur[u] = H[u];\n\t\t\tfor (int i = H[u]; i; i = E[i].nxt) {\n\t\t\t\tv = E[i].to, w = E[i].w, f = E[i].f;\n\t\t\t\tif (Dis[v] > Dis[u] + w && f) {\n\t\t\t\t\tDis[v] = Dis[u] + w;\n\t\t\t\t\tif (!Vis[v]) q.push (v), Vis[v] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Dis[T] < 1e9) return 1;\n\t\treturn 0;\n\t} \n\t\n\tlong long MinC = 0;\n\t\n\tinline long long DFS (const int x, const long long MAXF) {\n\t\tif (x == T || MAXF == 0) return MAXF;\n\t\tVis[x] = 1;\n\t\tlong long F = 0;\n\t\tfor (int i = Cur[x]; i && F < MAXF; i = E[i].nxt) {\n\t\t\tCur[x] = i;\n\t\t\tif (!Vis[E[i].to] && Dis[E[i].to] == Dis[x] + E[i].w && E[i].f) {\n\t\t\t\tlong long TmpF = DFS (E[i].to, min (MAXF - F, E[i].f));\n\t\t\t\tif (!TmpF) Dis[E[i].to] = -1;\n\t\t\t\tF += TmpF, E[i].f -= TmpF, E[i ^ 1].f += TmpF, MinC += TmpF * E[i].w;\n\t\t\t}\n\t\t}\n\t\tVis[x] = 0;\n\t\treturn F;\n\t}\n\t\n\tint Flr[MAXN], Cnt[MAXN], N, M, R;\n\tbool Can[505][505];\n\t\n\tinline long long Dinic () {\n\t\tlong long F = 0;\n\t\twhile (SPFA ()) {\n\t\t\tF += DFS (S, INF);\n\t\t\tif (N * M * M > Limit) {\n\t\t\t\tfor (int i = 1; i <= N; ++ i) {\n\t\t\t\t\tif (E[H[G (i, Flr[i])]].f == 0) {\n\t\t\t\t\t\t++ Flr[i];\n\t\t\t\t\t\tif (Cnt[i] == 0 || Flr[i] > Cnt[i]) continue;\n\t\t\t\t\t\tfor (int j = 1; j <= M; ++ j)\n\t\t\t\t\t\t\tif (Can[i][j]) \n\t\t\t\t\t\t\t\tAdd_Edge (j, G (i, Flr[i]), 1, Flr[i] * R);\n\t\t\t\t\t\tAdd_Edge (G (i, Flr[i]), T, 1, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn F;\n\t}\n}\n\nnamespace Value {\n\tstruct Node {\n\t\tint u, v;\n\t} O[MAXN];\n\t\n\tint P, K; \n\t\n\tinline void Solve () {\n\t\tusing namespace MCMF;\n\t\t\n\t\tios::sync_with_stdio(0);\n\t\tcin.tie(0), cout.tie(0);\n\t\t\n\t\tcin >> N >> M >> R >> P >> K;\n\t\t\n\t\tfor (int i = 1; i <= K; ++ i) cin >> O[i].u >> O[i].v, ++ Cnt[O[i].u], Can[O[i].u][O[i].v] = 1;\n\t\t\n\t\tfor (int i = 1; i <= M; ++ i) Add_Edge (S, i, 1, 0);\n\t\t\n\t\tfor (int i = 1; i <= N; ++ i) Cnt[i] = min (Cnt[i], P / R);\n\t\tif (P < R) return cout << 0 << ' ' << 0 << endl, void ();\n\t\t\n\t\tif (N * M * M > Limit) {\n\t\t\tfor (int i = 1; i <= M; ++ i) \n\t\t\t\tfor (int j = 1; j <= N; ++ j)\n\t\t\t\t\tif (Can[j][i])\n\t\t\t\t\t\t\tAdd_Edge (i, G (j, 1), 1, 1ll * R), Flr[j] = 1;\n\t\t\tfor (int i = 1; i <= N; ++ i)\n\t\t\t\t\tAdd_Edge (G (i, 1), T, 1, 0);\n\t\t} else {\n\t\t\tfor (int i = 1; i <= M; ++ i)\n\t\t\t\tfor (int j = 1; j <= N; ++ j)\n\t\t\t\t\tif (Can[j][i])\n\t\t\t\t\t\tfor (int m = 1; m <= Cnt[j]; ++ m)\n\t\t\t\t\t\t\tAdd_Edge (i, G (j, m), 1, 1ll * m * R);\n\t\t\tfor (int i = 1; i <= N; ++ i)\n\t\t\t\tfor (int j = 1; j <= Cnt[i]; ++ j)\n\t\t\t\t\tAdd_Edge (G (i, j), T, 1, 0);\n\t\t}\n\t\t\n\t\tlong long Ans = 0;\n\t\t\n\t\tcout << (Ans = Dinic ()) << ' ' << MinC << endl;\n\t\t\n\t\tfor (int i = 1; i <= N; ++ i) \n\t\t\tfor (int j = 1; j <= Cnt[i]; ++ j) \n\t\t\t\tfor (int m = H[G (i, j)]; m; m = E[m].nxt) \n\t\t\t\t\tif (E[m].to <= M && E[m].f) \n\t\t\t\t\t\tcout << i << ' ' << E[m].to << ' ' << (j - 1) * R << endl;\n\t}\n\t\n}\n\nint main () {\n\t\n\tValue::Solve ();\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1961376, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 1204, | |
| "memory": 28232, | |
| "code": "#include <bits/stdc++.h>\n\nconst int MAXN = 1200005;\nconst long long INF = 1e16;\nconst int Limit = 1000000;\n\nusing namespace std;\n\nint MAX = 0;\n\ninline int G (const int x, const int k) {\n//\tif (x == 32) cerr << \"Mea \" << k << endl;\n//\tif (k * 1000 + x + 1000 > MAX) cerr << (MAX = k * 1000 + x + 1000) << endl;\n\treturn k * 1000 + x + 1000;\n}\n\nnamespace MCMF {\n\tstruct Node {\n\t\tint to, nxt;\n\t\tlong long f, w;\n\t} E[MAXN << 4];\n\t\n\tint H[MAXN], tot = 1;\n\t\n\tinline void Add_Edge (const int u, const int v, const long long f, const long long w) {\n\t//\tif (u % 1000 == 32 && v == 519198) cerr << u << ' ' << f << ' ' << w << endl;\n\t\tE[++ tot] = {v, H[u], f, + w}, H[u] = tot;\n\t\tE[++ tot] = {u, H[v], 0, - w}, H[v] = tot;\n\t}\n\t\n\tbool Vis[MAXN];\n\tint S = 511451, T = 519198;\n\tint Dis[MAXN], Cur[MAXN];\n\t\n\tinline bool SPFA () {\n\t\tmemset (Dis, 63, sizeof Dis);\n\t\tqueue <int> q;\n\t\tq.push (S), Dis[S] = 0;\n\t\tint u, v, w, f;\n\t\twhile (!q.empty ()) {\n\t\t\tu = q.front (), q.pop (), Vis[u] = 0, Cur[u] = H[u];\n\t\t\tfor (int i = H[u]; i; i = E[i].nxt) {\n\t\t\t\tv = E[i].to, w = E[i].w, f = E[i].f;\n\t\t\t\tif (Dis[v] > Dis[u] + w && f) {\n\t\t\t\t\tDis[v] = Dis[u] + w;\n\t\t\t\t\tif (!Vis[v]) q.push (v), Vis[v] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Dis[T] < 1e9) return 1;\n\t\treturn 0;\n\t} \n\t\n\tlong long MinC = 0;\n\t\n\tinline long long DFS (const int x, const long long MAXF) {\n\t\tif (x == T || MAXF == 0) return MAXF;\n\t\tVis[x] = 1;\n\t\tlong long F = 0;\n\t\tfor (int i = Cur[x]; i && F < MAXF; i = E[i].nxt) {\n\t\t\tCur[x] = i;\n\t\t\tif (!Vis[E[i].to] && Dis[E[i].to] == Dis[x] + E[i].w && E[i].f) {\n\t\t\t\tlong long TmpF = DFS (E[i].to, min (MAXF - F, E[i].f));\n\t\t\t\tif (!TmpF) Dis[E[i].to] = -1;\n\t\t\t\tF += TmpF, E[i].f -= TmpF, E[i ^ 1].f += TmpF, MinC += TmpF * E[i].w;\n\t\t\t}\n\t\t}\n\t\tVis[x] = 0;\n\t\treturn F;\n\t}\n\t\n\tint Flr[MAXN], Cnt[MAXN], N, M, R;\n\tbool Can[505][505];\n\t\n\tinline long long Dinic () {\n\t\tlong long F = 0;\n\t\twhile (SPFA ()) {\n\t\t\tF += DFS (S, INF);\n\t\t\tif (N * M * M > Limit) {\n\t\t\t\tfor (int i = 1; i <= N; ++ i) {\n\t\t\t\t\tif (E[H[G (i, Flr[i])]].f == 0) {\n\t\t\t\t\t\t++ Flr[i];\n\t\t\t\t\t\tif (Cnt[i] == 0 || Flr[i] > Cnt[i]) continue;\n\t\t\t\t\t\tfor (int j = 1; j <= M; ++ j)\n\t\t\t\t\t\t\tif (Can[i][j]) \n\t\t\t\t\t\t\t\tAdd_Edge (j, G (i, Flr[i]), 1, Flr[i] * R);\n\t\t\t\t\t\tAdd_Edge (G (i, Flr[i]), T, 1, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn F;\n\t}\n}\n\nnamespace Value {\n\tstruct Node {\n\t\tint u, v;\n\t} O[MAXN];\n\t\n\tint P, K; \n\t\n\tinline void Solve () {\n\t\tusing namespace MCMF;\n\t\t\n\t\tios::sync_with_stdio(0);\n\t\tcin.tie(0), cout.tie(0);\n\t\t\n\t\tcin >> N >> M >> R >> P >> K;\n\t\t\n\t\tfor (int i = 1; i <= K; ++ i) cin >> O[i].u >> O[i].v, ++ Cnt[O[i].u], Can[O[i].u][O[i].v] = 1;\n\t\t\n\t\tfor (int i = 1; i <= M; ++ i) Add_Edge (S, i, 1, 0);\n\t\t\n\t\tfor (int i = 1; i <= N; ++ i) Cnt[i] = min (Cnt[i], P / R);\n\t\tif (P < R) return cout << 0 << ' ' << 0 << endl, void ();\n\t\t\n\t\tif (N * M * M > Limit) {\n\t\t\tfor (int i = 1; i <= M; ++ i) \n\t\t\t\tfor (int j = 1; j <= N; ++ j)\n\t\t\t\t\tif (Can[j][i])\n\t\t\t\t\t\t\tAdd_Edge (i, G (j, 1), 1, 1ll * R), Flr[j] = 1;\n\t\t\tfor (int i = 1; i <= N; ++ i)\n\t\t\t\t\tAdd_Edge (G (i, 1), T, 1, 0);\n\t\t} else {\n\t\t\tfor (int i = 1; i <= M; ++ i)\n\t\t\t\tfor (int j = 1; j <= N; ++ j)\n\t\t\t\t\tif (Can[j][i])\n\t\t\t\t\t\tfor (int m = 1; m <= Cnt[j]; ++ m)\n\t\t\t\t\t\t\tAdd_Edge (i, G (j, m), 1, 1ll * m * R);\n\t\t\tfor (int i = 1; i <= N; ++ i)\n\t\t\t\tfor (int j = 1; j <= Cnt[i]; ++ j)\n\t\t\t\t\tAdd_Edge (G (i, j), T, 1, 0);\n\t\t}\n\t\t\n\t\tlong long Ans = 0;\n\t\t\n\t\tcout << (Ans = Dinic ()) << ' ' << MinC << endl;\n\t\t\n\t\tfor (int i = 1; i <= N; ++ i) \n\t\t\tfor (int j = 1; j <= Cnt[i]; ++ j) \n\t\t\t\tfor (int m = H[G (i, j)]; m; m = E[m].nxt) \n\t\t\t\t\tif (E[m].to <= M && E[m].f) \n\t\t\t\t\t\tcout << i << ' ' << E[m].to << ' ' << (j - 1) * R << endl;\n\t}\n\t\n}\n\nint main () {\n\t\n\tValue::Solve ();\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1900895, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 2049, | |
| "memory": 25800, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconst int maxn = 510;\nconst int inf=0x3f3f3f3f;\n// const int V=1010,E=(1010*1010+1010+1010)*2;\nconst int V=2e6,E=2e6;\n#define Flow int\n#define Contain int\n// template<class Contain,class Flow>\nstruct Stream\n{\n int idc,s,t;\n struct edge {int to,nxt;Contain c;};\n edge e[E];int head[V],cur[V],tot=1;\n int dis[V];queue<int>q;\n void add(int u,int v,Contain c)\n {\n e[++tot]={v,head[u],c};head[u]=tot;\n }\n void ade(int u,int v,Contain c)\n {\n add(u,v,c);add(v,u,0);\n // printf(\"%d -> %d\\n\",u,v);\n }\n bool bfs()\n {\n memset(dis,0x3f,sizeof(dis));\n dis[s]=0;q.push(s);\n while(!q.empty())\n {\n int u=q.front();q.pop();\n for(int i=head[u];i;i=e[i].nxt)\n {\n int v=e[i].to;Contain c=e[i].c;\n if(c&&dis[v]>dis[u]+1)\n {\n dis[v]=dis[u]+1;q.push(v);\n }\n }\n }\n // if(dis[0]!=inf)\n return dis[t]!=inf;\n }\n Flow dfs(int u,Flow flow)\n {\n if(u==t)return flow;\n Flow res=0;\n for(int &i=cur[u];i;i=e[i].nxt)\n {\n int v=e[i].to;Flow c=min((Flow)e[i].c,flow);\n if(c&&dis[v]==dis[u]+1)\n {\n Flow tmp = dfs(v,c);\n res += tmp, flow -= tmp;\n e[i].c-=(Contain)tmp;\n e[i^1].c+=(Contain)tmp;\n }\n if(!flow)break;\n }\n return res;\n }\n Flow Dinic()\n {\n Flow res=0,tmp;\n while(bfs())\n {\n memcpy(cur,head,sizeof(cur));\n while(tmp=dfs(s,1e9))res+=tmp;\n }\n return res;\n }\n};\n// Stream<int,int>f;\nStream f;\n#define ii ++f.idc\n#define S f.s\n#define T f.t\n#define Ade f.ade\nint n,m,r,t,k;\nint id_p[maxn],id_q[maxn],id_e[maxn],id_lk[maxn*maxn];\nint uu[maxn*maxn],vv[maxn*maxn];\nint cnt[maxn];\nint main()\n{\n // freopen(\"a.in\",\"r\",stdin);\n scanf(\"%d%d\",&n,&m);\n scanf(\"%d%d%d\",&r,&t,&k);\n S=ii,T=ii;\n for(int i=1;i<=n;i++)id_p[i]=ii;\n for(int i=1;i<=m;i++)id_q[i]=ii;\n for(int i=1;i<=k;i++)\n {\n int u,v;scanf(\"%d%d\",&u,&v);\n uu[i]=u,vv[i]=v;\n Ade(id_p[u],id_q[v],1);\n id_lk[i]=f.tot-1;\n }\n for(int i=1;i<=m;i++)\n {\n Ade(id_q[i],T,1);\n }\n for(int i=1;i<=n;i++)\n {\n Ade(S,id_p[i],0);\n id_e[i]=f.tot-1;\n }\n // cout << f.Dinic()<<endl;\n int lim=t/r,ans=0,anst=0;\n for(int i=1;i<=lim;i++)\n {\n for(int i=1;i<=n;i++)\n {\n f.e[id_e[i]].c++;\n // Ade(S,id_p[i],1);\n }\n int tmp=f.Dinic();\n if(!tmp)break;\n ans+=tmp;\n }\n for(int i=1;i<=k;i++)\n {\n if(f.e[id_lk[i]].c==0)\n {\n cnt[uu[i]]+=r;anst+=cnt[uu[i]];\n }\n }\n printf(\"%d %d\\n\",ans,anst);\n for(int i=1;i<=n;i++)cnt[i]=0;\n memset(cnt,0,sizeof(cnt));\n for(int i=1;i<=k;i++)\n {\n if(f.e[id_lk[i]].c==0)\n {\n printf(\"%d %d %d\\n\",uu[i],vv[i],cnt[uu[i]]);\n cnt[uu[i]]+=r;\n }\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1876223, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 219, | |
| "memory": 12868, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef long long ll;\nconst int N=2005,M=5e6+5;\nconst int inf=0x3f3f3f3f;\nint head[N],Now[N],to[M],nxt[M],vale[M],tot=1;\nvoid add(int x,int y,int z){\n\tto[++tot]=y,nxt[tot]=head[x],vale[tot]=z,head[x]=tot;\n}\nvoid Add(int x,int y,int z){\n\tadd(x,y,z),add(y,x,0);\n}\nint dep[N];\nint dfs(int p,int t,int mxf){\n\tif(p==t)return mxf;\n\tint nf=mxf;\n\tfor(int &i=Now[p];i;i=nxt[i])\n\t\tif(vale[i]&&dep[to[i]]==dep[p]+1){\n\t\t\tint tf=dfs(to[i],t,min(vale[i],nf));\n\t\t\tnf-=tf,vale[i]-=tf,vale[i^1]+=tf;\n\t\t\tif(!nf)break;\n\t\t}\n\treturn mxf-nf;\n}\nint q[N],L,R;\nbool bfs(int s,int t){\n\tmemset(dep,inf,sizeof(dep));\n\tdep[s]=0,q[L=R=1]=s;\n\twhile(L<=R){\n\t\tint p=q[L++];\n\t\tfor(int i=head[p];i;i=nxt[i])\n\t\t\tif(vale[i]&&dep[to[i]]>dep[p]+1){\n\t\t\t\tdep[to[i]]=dep[p]+1;\n\t\t\t\tq[++R]=to[i];\n\t\t\t}\n\t}\n\treturn dep[t]!=inf;\n}\nint Dinic(int s,int t){\n\tint ans=0,now;\n\twhile(bfs(s,t)){\n\t\tmemcpy(Now,head,sizeof(head));\n\t\twhile((now=dfs(s,t,inf)))ans+=now;\n\t}\n\treturn ans;\n}\nint n,m,r,k,_;\nvector<pair<int, int> > a[N];\nint main(){\n\tcin>>n>>m>>r>>k>>_,k/=r;\n\tint x,y;\n\twhile(_--){\n\t\tscanf(\"%d%d\",&x,&y);\n\t\ta[x].push_back({y,tot+1});\n\t\tAdd(x,y+n,1);\n\t}\n\tint S=0,T=n+m+1;\n\tfor(int i=1;i<=m;++i)\n\t\tAdd(n+i,T,1);\n\tint ans=0;\n\tfor(int i=1;i<=k;++i){\n\t\tfor(int j=1;j<=n;++j)\n\t\t\tAdd(S,j,1);\n\t\tint ret=Dinic(S,T);\n\t\tif(ret)ans+=ret;\n\t\telse break;\n\t}\n\tll s=0;\n\tfor(int i=1;i<=n;++i){\n\t\tint cnt=0;\n\t\tfor(auto t:a[i])\n\t\t\tif(vale[t.second]==0)\n\t\t\t\t++cnt,s+=(ll)cnt*r;\n\t}\n\tcout<<ans<<\" \"<<s<<endl;\n\tfor(int i=1;i<=n;++i){\n\t\tint cnt=0;\n\t\tfor(auto t:a[i])\n\t\t\tif(vale[t.second]==0)\n\t\t\t\tprintf(\"%d %d %d\\n\",i,t.first,cnt*r),++cnt;\n\t}\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1741252, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 315, | |
| "memory": 9892, | |
| "code": "#include<cstdio>\n#include<vector>\n#include<iostream>\n#include<cstring>\nusing namespace std;\ntypedef long long ll;\nconst int M=1e9;\nint n,m,r,T,k,s,t,cnt=1,h[200005],num[200005],gap[200005],dis[200005];\nll ans1,ans2;\nstruct node {int next,to,v;} a[4000005];\nstruct answ {int x,y,t;};\nvector<answ> ans;\ninline void add(int x,int y,int v)\n{\n\ta[++cnt].to=y;\n\ta[cnt].next=h[x];\n\ta[cnt].v=v;\n\th[x]=cnt;\n}\n\ninline int ISAP(int x,int sum)\n{\n\tif(x==t) return sum;\n\tint res=sum;\n\tfor(int i=h[x];i;i=a[i].next)\n\t{\n\t\tint y=a[i].to;\n\t\tif(a[i].v>0&&dis[y]+1==dis[x])\n\t\t{\n\t\t\tint k=ISAP(y,min(a[i].v,res));\n\t\t\ta[i].v-=k;\n\t\t\ta[i^1].v+=k;\n\t\t\tres-=k;\n\t\t\tif(!res) return sum;\n\t\t}\n\t}\n\tif(!(--gap[dis[x]])) dis[s]=t+1;\n\tgap[++dis[x]]++;\n\treturn sum-res;\n}\n\ninline int calc()\n{\n\tint sum=0;\n\tfor(int i=1;i<=n;i++) add(s,i,1),add(i,s,0);\n\tmemset(gap,0,sizeof(gap));\n\tmemset(dis,0,sizeof(dis));\n\tfor(gap[0]=t+1;dis[s]<t+1;) sum+=ISAP(s,M);\n\treturn sum;\n}\n\nint main()\n{\n\tscanf(\"%d%d%d%d%d\",&n,&m,&r,&T,&k);\n\ts=n+m+1,t=n+m+2;\n\tfor(int i=1;i<=k;i++)\n\t{\n\t\tint x,y;\n\t\tscanf(\"%d%d\",&x,&y);\n\t\tadd(x,y+n,1),add(y+n,x,0);\n\t}\n\tfor(int i=1;i<=m;i++) add(i+n,t,1),add(t,i+n,0);\n\tfor(int i=1;i<=T/r;i++)\n\t{\n\t\tint res=calc();\n\t\tif(res) ans1+=res;\n\t\telse break;\n\t}\n\tfor(int i=2;i<=cnt;i+=2)\n\t{\n\t\tint x=a[i^1].to,y=a[i].to;\n\t\tif(!a[i].v&&x!=s&&y!=t)\n\t\t\tans.push_back({x,y-n,num[x]*r}),ans2+=(++num[x])*r;\n\t}\n\tprintf(\"%lld %lld\\n\",ans1,ans2);\n\tfor(auto i:ans) printf(\"%d %d %d\\n\",i.x,i.y,i.t);\n\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1663523, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 243, | |
| "memory": 12288, | |
| "code": "//#pragma GCC optimize(3)\n#include<iostream>\n#include<climits>\n#include<cstdio>\n#include<cstring>\n#include<cmath>\n#include<ctime>\n#include<algorithm>\n#include<queue>\n#include<map>\n#include<set>\n#include<vector>\n#include<complex>\n#include<random>\n#include<chrono>\n#define int long long\n//#define double long double\n#define invert dsfsdf\nusing namespace std;\nconst long long INF=INT_MAX/2ll;\n//const long long mod=998244353;\n//const long long mod=1000000009;\n//const long long mod=19260817;\nconst double Pai=acos(-1);\nint n,m,k,N,s,t,cnt=1,maxflow,last,r,tim,jkt;\nint h[1000005],dis[1000005],gap[1000005],a[1000005];\nstruct o {\n\tint to,v,next;\n}e[1000005];\nvoid addedge(int x,int y,int z) {\n\tcnt++;\n\te[cnt].to=y;\n\te[cnt].v=z;\n\te[cnt].next=h[x];\n\th[x]=cnt;\n}\nvoid add(int x,int y,int z) {\n\taddedge(x,y,z),addedge(y,x,0);\n}\nint Isap(int x,int flow) {\n\tif(x==t) return flow;\n\tint res=flow;\n\tfor(int i=h[x];i;i=e[i].next) {\n\t\tint y=e[i].to;\n\t\tif(e[i].v>0&&dis[x]==dis[y]+1) {\n\t\t\tint minflow=Isap(y,min(e[i].v,res));\n\t\t\te[i].v-=minflow,e[i^1].v+=minflow;\n\t\t\tres-=minflow;\n\t\t\tif(res==0) return flow;\n\t\t}\n\t}\n\tif(!(--gap[dis[x]])) dis[s]=N;\n\tdis[x]++,gap[dis[x]]++;\n\treturn flow-res;\n}\nvoid Clear() {\n\tcnt=1,maxflow=0;\n\tfor(int i=0;i<=N;i++) h[i]=dis[i]=gap[i]=0;\n}\nbool check() {\n\tfor(int i=0;i<=N;i++) dis[i]=gap[i]=0;\n\tgap[0]=N;\n\twhile(dis[s]<N) maxflow+=Isap(s,INF);\n\treturn maxflow-last==0;\n}\nsigned main() {\n\tscanf(\"%lld%lld%lld%lld%lld\",&n,&m,&r,&tim,&k);\n\ts=0,t=n+m+1,N=t+1;\n\tfor(int i=1;i<=k;i++) {\n\t\tint x,y;scanf(\"%lld%lld\",&x,&y);\n\t\tadd(x,y+n,1);\n\t}\n\tfor(int i=1;i<=n;i++) add(s,i,0);\n\tfor(int i=1;i<=m;i++) add(i+n,t,1);\n\tfor(int i=1;i<=tim/r;i++) {\n\t\tfor(int j=1;j<=n;j++) add(s,j,1);\n\t\tif(check()) break;\n\t\tjkt+=(maxflow-last)*i*r;\n\t\tlast=maxflow;\n\t}\n\tprintf(\"%lld %lld\\n\",maxflow,jkt);\n\tfor(int i=2;i<=cnt;i+=2) {\n\t\tif(e[i].v!=0) continue;\n\t\tint x=e[i^1].to,y=e[i].to;\n\t\tif(1<=x&&x<=n&&n+1<=y&&y<=n+m) printf(\"%lld %lld %lld\\n\",x,y-n,r*a[x]),a[x]++;\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1663427, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2171. 「POI2011 R3 Day2」程序设计竞赛 Programming Contest", | |
| "time": 201, | |
| "memory": 6788, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef long long ll;\nconst int N=2015,inf=2e9;\nint n,m,r,T,k,cnt,s,t,tot,ans1,h[N],d[N],gap[N],num[N];\nll ans2;\nbool v[N][N],del[N]; \nstruct edge{int n,t,v;}e[N*N];\nstruct answer{int x,y,t;};\nvector<answer>ans;\nvoid add(int x,int y,int z){e[++cnt]={h[x],y,z},h[x]=cnt;}\nvoid Add(int x,int y,int z){add(x,y,z),add(y,x,0);}\nint isap(int x,int flow) {\n\tif(x==t)return flow;\n\tint res=0;\n\tfor(int i=h[x];i;i=e[i].n) {\n\t\tint y=e[i].t;\n\t\tif(e[i].v>0&&d[x]==d[y]+1) {\n\t\t\tint k=isap(y,min(e[i].v,flow-res));\n\t\t\te[i].v-=k,e[i^1].v+=k,res+=k;\n\t\t\tif(res==flow)return res;\n\t\t}\n\t}\n\tif(!--gap[d[x]])d[s]=tot;\n\treturn ++gap[++d[x]],res;\n}\nint maxflow() {\n\tmemset(d,0,sizeof(d)),memset(gap,0,sizeof(gap));\n\tint res=0;gap[0]=tot;while(d[s]<tot)res+=isap(s,inf);\n\treturn res; \n}\nint calc() {\n\tfor(int i=1;i<=n;i++)Add(s,i,1);\n\treturn maxflow();\n}\nint main() {\n\tscanf(\"%d%d%d%d%d\",&n,&m,&r,&T,&k),s=n+m+1,t=tot=s+1,cnt=1;\n\tfor(int i=1,x,y;i<=k;i++)scanf(\"%d%d\",&x,&y),Add(x,y+n,1);\n\tfor(int i=1;i<=m;i++)Add(i+n,t,1);\n\tfor(int i=1;i<=T/r;i++) {\n\t\tint res=calc();\n\t\tif(res)ans1+=res;\n\t\telse break;\n\t}\n\tfor(int i=2;i<=cnt;i+=2) {\n\t\tint x=e[i^1].t,y=e[i].t;\n\t\tif(!e[i].v&&x!=s&&y!=t)ans.push_back({x,y-n,num[x]*r}),ans2+=(++num[x])*r;\n\t}\n\tprintf(\"%d %lld\\n\",ans1,ans2);\n\tfor(auto i:ans)printf(\"%d %d %d\\n\",i.x,i.y,i.t);\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2170. 「POI2011 R3 Day2」木棍 Sticks": [ | |
| { | |
| "id": 2180843, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 951, | |
| "memory": 8216, | |
| "code": "//not original, just for test\n#include<bits/stdc++.h>\nusing namespace std;\nconst int maxn=1000010;\nint m,n;\nstruct stick\n{\n\tint col,len;\n}p[maxn],s[5];\nbool cmp(stick a,stick b)\n{\n\treturn a.len<b.len;\n}\ninline int rd()\n{\n\tint ret=0,f=1;\tchar gc=getchar();\n\twhile(gc<'0'||gc>'9')\t{if(gc=='-')f=-f;\tgc=getchar();}\n\twhile(gc>='0'&&gc<='9')\tret=ret*10+gc-'0',gc=getchar();\n\treturn ret*f;\n}\nint main()\n{\n\tm=rd();\n\tint i,j,a;\n\tfor(i=1;i<=m;i++)\n\t{\n\t\ta=rd();\n\t\tfor(j=1;j<=a;j++)\tp[++n].col=i,p[n].len=rd();\n\t}\n\tsort(p+1,p+n+1,cmp);\n\tfor(i=1;i<=n;i++)\n\t{\n\t\tfor(j=0;j<3;j++)\tif(p[i].col==s[j].col)\n\t\t{\n\t\t\ts[j]=p[i],sort(s,s+3,cmp);\n\t\t\tbreak;\n\t\t}\n\t\tif(j==3)\ts[0]=p[i],sort(s,s+3,cmp);\n\t\tif(s[0].len+s[1].len>s[2].len)\n\t\t{\n\t\t\tprintf(\"%d %d %d %d %d %d\",s[0].col,s[0].len,s[1].col,s[1].len,s[2].col,s[2].len);\n\t\t\treturn 0;\n\t\t}\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2219749, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 680, | |
| "memory": 10420, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\nstruct node{\n\tint col,len;//颜色,长度 \n\tbool operator < (const node &T) const {\n return len < T.len;\n}\n};\n\n\npriority_queue<node> q[55];\npriority_queue<node> a;//单独开的大根堆,保证里面的木棍颜色不一样 \n\nlong long read()\n{\n\tlong long x = 0, f = 1; char ch = getchar();\n\twhile(ch < '0' || ch > '9'){if(ch == '-') f = -1; ch = getchar();}\n\twhile(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}\n\treturn x * f;\n}\n\nint n;\n\nbool check(node a, node b, node c)//判断是否能构成三角形 \n{\n\tif(a.len + b.len > c.len && a.len - b.len < c.len) return true;\n\telse return false;\n}\n\nint main()\n{\n\tn = read();\n\tfor(int i = 1; i <= n; i++)\n\t{\n\t\tint x = read();\n\t\tfor(int j = 1; j <= x; j++)\n\t\t{\n\t\t\tint y = read();\n\t\t\tq[i].push((node){i, y});\n\t\t}\n\t}\n\t\n\t//根据思路大模拟 \n\t \n\tfor(int i = 1; i <= n; i++) \n\t{\n\t\tif(!q[i].empty())\n\t\t{\n\t\t\ta.push(q[i].top());\t\n\t\t\tq[i].pop();\n\t\t}\n\t}\n\n\t//找最长的三根 \n\n\twhile(!a.empty())\n\t{\n\t\tnode x = a.top();//取出三根 \n\t\ta.pop();\n\t\tnode y = a.top();\n\t\ta.pop();\n\t\tnode z = a.top();\n\t\ta.pop();\n\t\tif(check(x, y, z))//能构成三角形 \n\t\t{\n\t\t\tcout << x.col << \" \" << x.len << \" \";\n\t\t\tcout << y.col << \" \" << y.len << \" \";\n\t\t\tcout << z.col << \" \" << z.len;\n\t\t\treturn 0;\n\t\t}\n\t\telse//不能构成三角形 \n\t\t{\n\t\t\ta.push(y); \n\t\t\ta.push(z);\n\t\t\tif(!q[x.col].empty())\n\t\t\t{\n\t\t\t\ta.push(q[x.col].top());\n\t\t\t\tq[x.col].pop();\n\t\t\t}\n\t\t}\n\t\tif(a.size() < 3)//如果小于三根则不能构成三角形 \n\t\t{\n\t\t\tcout << \"NIE\" << endl;\n\t\t\treturn 0;\n\t\t}\n\t}\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2209663, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 729, | |
| "memory": 4364, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconst int N = 1e5;\nconst int M = 1e6;\nconst int H = 1e6;\nconst int mod = 1e9 + 7;\nconst int INF = 0x3f3f3f3f;\nint m, n[55], sum;\nvector<int> vec[55];\nint main() {\n\tios::sync_with_stdio(0);\n\tcin.tie(0);cout.tie(0);\n\tcin >> m;\n\tfor (int i = 1; i <= m; i++) {\n\t\tcin >> n[i];\n\t\tvec[i].resize(n[i]);\n\t\tfor (int j = 0; j < n[i]; j++) {\n\t\t\tcin >> vec[i][j];\n\t\t}\n\t\tsort(vec[i].begin(), vec[i].end());\n\t\tsum += n[i];\n\t}\n\tfor (int i = 1; i <= sum; i++) {\n\t\tint idx1 = -1, idx2 = -1, idx3 = -1;\n\t\tfor (int j = 1; j <= m; j++) {\n\t\t\tif (n[j] == 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (idx1 == -1 || vec[idx1][n[idx1] - 1] <= vec[j][n[j] - 1]) {\n\t\t\t\tidx3 = idx2;\n\t\t\t\tidx2 = idx1;\n\t\t\t\tidx1 = j;\n\t\t\t} else if (idx2 == -1 || vec[idx2][n[idx2] - 1] <= vec[j][n[j] - 1]) {\n\t\t\t\tidx3 = idx2;\n\t\t\t\tidx2 = j;\n\t\t\t} else if (idx3 == -1 || vec[idx3][n[idx3] - 1] <= vec[j][n[j] - 1]) {\n\t\t\t\tidx3 = j;\n\t\t\t}\n\t\t}\n\t\tif (idx3 == -1) {\n\t\t\tbreak;\n\t\t}\n\t\tif (vec[idx3][n[idx3] - 1] + vec[idx2][n[idx2] - 1] > vec[idx1][n[idx1] - 1]) {\n\t\t\tcout << idx3 << \" \" << vec[idx3][n[idx3] - 1] << \" \" << idx2 << \" \" << vec[idx2][n[idx2] - 1] << \" \" << idx1 << \" \" << vec[idx1][n[idx1] - 1];\n\t\t\treturn 0;\n\t\t}\n \t\tn[idx1]--;\n\t}\n\tcout << \"NIE\";\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2166580, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 2881, | |
| "memory": 25620, | |
| "code": "#include <bits/stdc++.h>\n#define int long long\n#define fi first\n#define se second\nusing namespace std;\nvector<int> v[55];\nvector<int>::reverse_iterator now[55];\nint k,n[55],x,cn;\npair<int,int> p[1000005];\nsigned main(){\n\tcin >> k;\n\tfor (int i = 1;i <= k;i++){\n\t\tcin >> n[i];\n\t\tfor (int j = 1;j <= n[i];j++){\n\t\t\tcin >> x;\n\t\t\tv[i].push_back(x),p[++cn] = {x,i};\n\t\t}\n\t\tsort(v[i].begin(),v[i].end());\n\t\tnow[i] = v[i].rbegin();\n\t}\n\tsort(p+1,p+cn+1);\n\tfor (int i = cn;i;i--){\n\t\tpair<int,int> max1 = {-1e9,0},max2 = {-1e9,0};\n\t\tfor (int j = 1;j <= k;j++){\n\t\t\tif (p[i].se == j) continue;\n\t\t\twhile (now[j] != v[j].rend() && *now[j] > p[i].fi) now[j]++;\n\t\t\tif (now[j] != v[j].rend()){\n\t\t\t\tif (*now[j] > max1.fi) max2 = max1,max1 = {*now[j],j};\n\t\t\t\telse if (*now[j] > max2.fi) max2 = {*now[j],j};\n\t\t\t}\n\t\t}\n\t\tif (max1.fi+max2.fi > p[i].fi) cout << p[i].se << \" \" << p[i].fi << \" \" << max1.se << \" \" << max1.fi << \" \" << max2.se << \" \" << max2.fi,exit(0); \n\t}\n\tcout << \"NIE\";\n\treturn 0;\n} ", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2084492, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 1017, | |
| "memory": 43432, | |
| "code": "#include <iostream>\n#include <algorithm>\n#include <cstdlib>\n#include <climits>\n#include <cstring>\n#include <cstdio>\n#include <cmath>\nusing namespace std;\n#define ll long long\nconst int MAXN = 1e6 + 4;\nint k , n , cnt;\nll id[4] , mx[4];//id存的是那三条边的颜色,mx存长度\nstruct node{\n ll l , r;\n ll col;\n friend bool operator < ( node a , node b ){\n return a.l < b.l;\n }\n}a[MAXN] , s[MAXN];\n \nint main(){\n scanf( \"%d\" , &k );\n for( int i = 1 ; i <= k ; i ++ ){\n int num;scanf( \"%d\" , &num );\n while( num -- ){\n ll x;scanf( \"%lld\" , &x );\n a[++cnt].col = i , a[cnt].l = x;\n }\n }\n sort( a + 1, a + cnt + 1 );\n ll color = 0 , last = 0;\n for( int i = 1 ; i <= cnt; i ++ ){\n if( a[i].col != color ){\n s[n++].r = last;\n s[n].col = color = a[i].col;\n s[n].l = last = a[i].l;\n }\n else\n last = a[i].l;\n }\n for( int i = 1 ; i < n ; i ++ ){\n ll now = 0;\n for( int j = 1 ; j <= 3 ; j ++ ){\n if( id[j] != s[i].col && id[j]!= s[i+1].col ){\n if( mx[now] < mx[j] )\n now = j;//找最大的显然最好\n }\n }\n if( now && mx[now] + s[i].r > s[i+1].l ){\n printf( \"%lld %lld %lld %lld %lld %lld\\n\" , id[now] , mx[now] , s[i].col , s[i].r , s[i+1].col , s[i+1].l );//找到了,直接输出\n exit( 0 );\n }\n bool flag = 0;\n now = 1;\n for( int j = 1 ; j <= 3; j ++ ){//这就是维护方法,将s[i].r存进mx[]数组中来\n if( id[j] == s[i].col ){//如果它的颜色在那三条边颜色中的出现过,直接替换\n mx[j] = s[i].r;\n flag = 1;\n break;\n }\n else if( mx[j] < mx[now] )\n now = j;\n }\n if( !flag ){\n id[now] = s[i].col;//否则选择最小的一条边将其替换成s[i].r , s[i].col\n mx[now] = s[i].r;\n }\n }\n printf( \"NIE\\n\" );\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2087194, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 985, | |
| "memory": 8224, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nconst int maxn=1000010;\nint m,n;\nstruct stick\n{\n\tint col,len;\n}p[maxn],s[5];\nbool cmp(stick a,stick b)\n{\n\treturn a.len<b.len;\n}\ninline int rd()\n{\n\tint ret=0,f=1;\tchar gc=getchar();\n\twhile(gc<'0'||gc>'9')\t{if(gc=='-')f=-f;\tgc=getchar();}\n\twhile(gc>='0'&&gc<='9')\tret=ret*10+gc-'0',gc=getchar();\n\treturn ret*f;\n}\nint main()\n{\n\tm=rd();\n\tint i,j,a;\n\tfor(i=1;i<=m;i++)\n\t{\n\t\ta=rd();\n\t\tfor(j=1;j<=a;j++)\tp[++n].col=i,p[n].len=rd();\n\t}\n\tsort(p+1,p+n+1,cmp);\n\tfor(i=1;i<=n;i++)\n\t{\n\t\tfor(j=0;j<3;j++)\tif(p[i].col==s[j].col)\n\t\t{\n\t\t\ts[j]=p[i],sort(s,s+3,cmp);\n\t\t\tbreak;\n\t\t}\n\t\tif(j==3)\ts[0]=p[i],sort(s,s+3,cmp);\n\t\tif(s[0].len+s[1].len>s[2].len)\n\t\t{\n\t\t\tprintf(\"%d %d %d %d %d %d\",s[0].col,s[0].len,s[1].col,s[1].len,s[2].col,s[2].len);\n\t\t\treturn 0;\n\t\t}\n\t}\n\tprintf(\"NIE\");\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2087030, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 1101, | |
| "memory": 45228, | |
| "code": "#include <iostream>\n#include <algorithm>\n#include <cstdlib>\n#include <climits>\n#include <cstring>\n#include <cstdio>\n#include <cmath>\nusing namespace std;\n#define ll long long\nconst int MAXN = 1e6 + 4;\nint k , n , cnt;\nll id[4] , mx[4];//id存的是那三条边的颜色,mx存长度\nstruct node{\n ll l , r;\n ll col;\n friend bool operator < ( node a , node b ){\n return a.l < b.l;\n }\n}a[MAXN] , s[MAXN];\n \nint main(){\n scanf( \"%d\" , &k );\n for( int i = 1 ; i <= k ; i ++ ){\n int num;scanf( \"%d\" , &num );\n while( num -- ){\n ll x;scanf( \"%lld\" , &x );\n a[++cnt].col = i , a[cnt].l = x;\n }\n }\n sort( a + 1, a + cnt + 1 );\n ll color = 0 , last = 0;\n for( int i = 1 ; i <= cnt; i ++ ){\n if( a[i].col != color ){\n s[n++].r = last;\n s[n].col = color = a[i].col;\n s[n].l = last = a[i].l;\n }\n else\n last = a[i].l;\n }\n for( int i = 1 ; i < n ; i ++ ){\n ll now = 0;\n for( int j = 1 ; j <= 3 ; j ++ ){\n if( id[j] != s[i].col && id[j]!= s[i+1].col ){\n if( mx[now] < mx[j] )\n now = j;//找最大的显然最好\n }\n }\n if( now && mx[now] + s[i].r > s[i+1].l ){\n printf( \"%lld %lld %lld %lld %lld %lld\\n\" , id[now] , mx[now] , s[i].col , s[i].r , s[i+1].col , s[i+1].l );//找到了,直接输出\n exit( 0 );\n }\n bool flag = 0;\n now = 1;\n for( int j = 1 ; j <= 3; j ++ ){//这就是维护方法,将s[i].r存进mx[]数组中来\n if( id[j] == s[i].col ){//如果它的颜色在那三条边颜色中的出现过,直接替换\n mx[j] = s[i].r;\n flag = 1;\n break;\n }\n else if( mx[j] < mx[now] )\n now = j;\n }\n if( !flag ){\n id[now] = s[i].col;//否则选择最小的一条边将其替换成s[i].r , s[i].col\n mx[now] = s[i].r;\n }\n }\n printf( \"NIE\\n\" );\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 1865521, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2170. 「POI2011 R3 Day2」木棍 Sticks", | |
| "time": 682, | |
| "memory": 8232, | |
| "code": "#include <iostream>\n#include <cstdio>\n#include <algorithm>\n#define N 1000002\nusing namespace std;\nint k,n,i,j;\npair<int,int> a[N],now[4];\nint read()\n{\n\tchar c=getchar();\n\tint w=0;\n\twhile(c<'0'||c>'9') c=getchar();\n\twhile(c<='9'&&c>='0'){\n\t\tw=w*10+c-'0';\n\t\tc=getchar();\n\t}\n\treturn w;\n}\nint main()\n{\n\tk=read();\n\tfor(i=1;i<=k;i++){\n\t\tint x=read();\n\t\tfor(j=1;j<=x;j++){\n\t\t\tint y=read();\n\t\t\ta[++n]=make_pair(y,i);\n\t\t}\n\t}\n\tsort(a+1,a+n+1);\n\tfor(i=1;i<=n;i++){\n\t\tint flag=0,minx=1<<30,id=0;\n\t\tfor(j=1;j<=3;j++){\n\t\t\tif(now[j].second==a[i].second){\n\t\t\t\tif(now[j].first<a[i].first) now[j]=a[i];\n\t\t\t\tflag=1;\n\t\t\t}\n\t\t\tif(now[j].first<minx) minx=now[j].first,id=j;\n\t\t}\n\t\tif(!flag&&a[i].first>minx) now[id]=a[i];\n\t\tsort(now+1,now+4);\n\t\tif(now[1].first==0) continue;\n\t\tif(now[1].first+now[2].first>now[3].first){\n\t\t\tfor(j=1;j<=3;j++) printf(\"%d %d \",now[j].second,now[j].first);\n\t\t\tputs(\"\");\n\t\t\treturn 0;\n\t\t}\n\t}\n\tputs(\"NIE\");\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#40844. 「USACO 2020.12 Platinum」Spaceship": [ | |
| { | |
| "id": 2228406, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 1255, | |
| "memory": 5528, | |
| "code": "// 私は猫です\n\n#include<bits/stdc++.h>\n#define ull unsigned long long\n#define ll long long\n#define pb push_back\n#define mkp make_pair\n#define fi first\n#define se second\n#define inf 1000000000\n#define infll 1000000000000000000ll\n#define pii pair<int,int>\n#define rep(i,a,b,c) for(int i=(a);i<=(b);i+=(c))\n#define per(i,a,b,c) for(int i=(a);i>=(b);i-=(c))\n#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)\n#define dF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)\n#define cmh(sjy) while(sjy--)\n#define lowbit(x) (x&(-x))\n#define HH printf(\"\\n\")\n#define eb emplace_back\n#define poly vector<int>\n#define SZ(x) ((int)x.size())\nusing namespace std;\ntemplate<typename T>inline void chkmax(T &x,const T &y){ x=std::max(x,y); }\ntemplate<typename T>inline void chkmin(T &x,const T &y){ x=std::min(x,y); }\nconst int mod=1e9+7,maxn=65;\ninline int qpow(int x,ll y){ int res=1; for(;y;y>>=1,x=1ll*x*x%mod)if(y&1)res=1ll*res*x%mod; return res; }\ninline void inc(int &x,const int y){ x=(x+y>=mod)?(x+y-mod):(x+y); }\ninline void dec(int &x,const int y){ x=(x>=y)?(x-y):(x+mod-y); }\ninline void mul(int &x,const int y){ x=1ll*x*y%mod; }\ninline int add(const int x,const int y){ return (x+y>=mod)?(x+y-mod):(x+y); }\ninline int sub(const int x,const int y){ return (x>=y)?(x-y):(x+mod-y); }\ninline int prod(const int x,const int y){ return 1ll*x*y%mod; }\nint f[maxn][maxn][maxn],a[maxn][maxn],n,k,zsy,t1[maxn][maxn][maxn],t2[maxn][maxn][maxn],g1[maxn][maxn],g2[maxn][maxn],h[maxn][maxn][maxn],to[maxn][maxn][maxn];\nvoid solve(){\n\tcin>>n>>k>>zsy;\n\tF(i,1,n){\n\t\tstring str; cin>>str,str=' '+str;\n\t\tF(j,1,n)a[i][j]=(str[j]=='1');\n\t}\n\tF(m,1,k){\n\t\tF(i,1,n)f[i][i][m]=1;\n\t\tF(i,1,n)F(j,1,n)F(u,1,n)if(a[u][j])inc(t1[i][j][m],f[i][u][m-1]),inc(f[i][j][m],f[i][u][m-1]);\n\t\tF(i,1,n)F(j,1,n)F(u,1,n)if(a[i][u])inc(t2[i][j][m],f[u][j][m-1]),inc(f[i][j][m],f[u][j][m-1]);\n\t\tF(i,1,n)F(j,1,n)F(u,1,n)inc(f[i][j][m],1ll*t1[i][u][m]*t2[u][j][m]%mod);\n\t\tF(i,1,n)F(j,1,n)inc(f[i][j][m],f[i][j][m-1]);\n\t}\n F(i,1,n)F(j,1,n)F(q,1,k)F(v,1,n)if(a[v][j])inc(to[i][j][q],f[i][v][q-1]);\n F(i,1,n)F(j,1,n)F(q,1,k){\n if(a[i][j])h[i][j][q]=1;\n F(u,1,n)if(a[i][u])inc(h[i][j][q],to[u][j][q]);\n }\n F(__,1,zsy){\n \tmemset(g1,0,sizeof g1),memset(g2,0,sizeof g2);\n int bs,s,bt,t; cin>>bs>>s>>bt>>t;\n g1[s][bs]=1,g1[s][bs+1]=mod-1,g2[t][bt]=1,g2[t][bt+1]=mod-1;\n F(v,bs,k)F(p,1,n){\n inc(g1[p][v],g1[p][v-1]);\n if(g1[p][v])F(np,1,n)inc(g1[np][v+1],1ll*g1[p][v]*h[p][np][v]%mod);\n }\n F(v,bt,k)F(p,1,n){\n inc(g2[p][v],g2[p][v-1]);\n if(g2[p][v])F(np,1,n)inc(g2[np][v+1],1ll*g2[p][v]*h[np][p][v]%mod);\n }\n int ans=0;\n F(v,1,k)F(p,1,n)inc(ans,1ll*g1[p][v]*g2[p][v]%mod);\n cout<<ans<<'\\n';\n }\n}\nsigned main(){\n\tios::sync_with_stdio(0),cin.tie(0),cout.tie(0);\n\tint zsy=1;\n\tF(____,1,zsy)solve();\n}\n// g++ a.cpp -o a -std=c++14 -O2", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2194809, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 2870, | |
| "memory": 5576, | |
| "code": "#include <bits/stdc++.h>\n#define F(i,x,y) for(int i=(x);i<=(y);i++)\n#define DF(i,x,y) for(int i=(x);i>=(y);i--)\n#define ms(x,y) memset(x,y,sizeof(x))\n#define SZ(x) (int)x.size()-1\n#define all(x) x.begin(),x.end()\n#define pb push_back\nusing namespace std;\ntypedef long long LL;\ntypedef unsigned long long ull;\ntypedef pair<int,int> pii;\ntemplate<typename T> void chkmax(T &x,T y){ x=max(x,y);}\ntemplate<typename T> void chkmin(T &x,T y){ x=min(x,y);}\nconst int N=65,P=1e9+7;\nint n,k,m;\nint f[N][N][N],tmpf1[N][N][N],tmpf2[N][N][N];\nint g1[N][N],g2[N][N];\nint h[N][N][N],tmph[N][N][N];\nbool a[N][N];\ninline void inc(int &x,int y){ x+=y,x>=P&&(x-=P);}\nstruct QRY{ int bs,s,bt,t;}qry[N];\nint main(){\n ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);\n cin>>n>>k>>m;\n F(i,1,n){\n string s;cin>>s;\n F(j,0,n-1) a[i][j+1]=s[j]-'0';\n }\n F(q,1,k){\n F(i,1,n) f[i][i][q]=1;\n F(i,1,n) F(j,1,n){\n F(u,1,n) if(a[u][j]) inc(tmpf1[i][j][q],f[i][u][q-1]);\n F(v,1,n) if(a[i][v]) inc(tmpf2[i][j][q],f[v][j][q-1]);\n }\n F(i,1,n) F(j,1,n){\n F(p,1,n) if(a[i][p]) inc(f[i][j][q],f[p][j][q-1]);\n F(p,1,n) if(a[p][j]) inc(f[i][j][q],f[i][p][q-1]);\n F(p,1,n) inc(f[i][j][q],1ll*tmpf1[i][p][q]*tmpf2[p][j][q]%P);\n }\n F(i,1,n) F(j,1,n) inc(f[i][j][q],f[i][j][q-1]);\n }\n F(i,1,n) F(j,1,n) F(q,1,k) F(v,1,n) if(a[v][j]) inc(tmph[i][j][q],f[i][v][q-1]);\n F(i,1,n) F(j,1,n) F(q,1,k){\n if(a[i][j]) h[i][j][q]=1;\n F(u,1,n) if(a[i][u]) inc(h[i][j][q],tmph[u][j][q]);\n }\n F(i,1,m){\n ms(g1,0),ms(g2,0);\n int bs,s,bt,t;cin>>bs>>s>>bt>>t;\n g1[s][bs]=1,g1[s][bs+1]=P-1,g2[t][bt]=1,g2[t][bt+1]=P-1;\n F(v,bs,k) F(p,1,n){\n inc(g1[p][v],g1[p][v-1]);\n if(g1[p][v]) F(np,1,n) inc(g1[np][v+1],1ll*g1[p][v]*h[p][np][v]%P);\n }\n F(v,bt,k) F(p,1,n){\n inc(g2[p][v],g2[p][v-1]);\n if(g2[p][v]) F(np,1,n) inc(g2[np][v+1],1ll*g2[p][v]*h[np][p][v]%P);\n }\n int ans=0;\n F(v,1,k) F(p,1,n) inc(ans,1ll*g1[p][v]*g2[p][v]%P);\n cout<<ans<<'\\n';\n }\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2131768, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 1244, | |
| "memory": 3480, | |
| "code": "#include<stdio.h>\n#include<algorithm>\ntypedef unsigned int uint;\ntypedef unsigned long long ull;\nconstexpr uint mod{1000000007};\nconstexpr uint plus(const uint &x,const uint &y) {\n if(x+y>=mod) {\n return x+y-mod;\n }\n return x+y;\n}\nconstexpr uint minus(const uint &x,const uint &y) {\n if(x<y) {\n return x-y+mod;\n }\n return x-y;\n}\nchar str[65];\nint to[65][65];\nuint f[65][65][65];\nuint t0[65][65][65],t1[65][65][65];\nint main() {\n int n,k,q;\n scanf(\"%d%d%d\",&n,&k,&q);\n for(int i=1;i<=n;i++) {\n scanf(\"%s\",str+1);\n for(int j=1;j<=n;j++) {\n to[i][j]=str[j]^48;\n }\n }\n for(int _k=1;_k<=k;_k++) {\n for(int i=1;i<=n;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=0;\n t0[_k][i][j]=0;\n t1[_k][i][j]=0;\n }\n }\n }\n for(int _k=1;_k<=k;_k++) {\n for(int i=1;i<=n;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=plus(f[_k][i][j],f[_k-1][i][j]);\n }\n }\n for(int v=1;v<=n;v++) {\n t0[_k-1][v][v]=t1[_k-1][v][v]=1;\n for(int u=1;u<=n;u++) {\n if(to[u][v]) {\n for(int i=1;i<=n;i++) {\n t0[_k-1][v][i]=plus(t0[_k-1][v][i],f[_k-1][i][u]);\n }\n }\n if(to[v][u]) {\n for(int i=1;i<=n;i++) {\n t1[_k-1][v][i]=plus(t1[_k-1][v][i],f[_k-1][u][i]);\n }\n }\n }\n for(int i=1;i<=n;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=(f[_k][i][j]+ull(t0[_k-1][v][i])*t1[_k-1][v][j])%mod;\n }\n }\n }\n }\n for(int i=1;i<=q;i++) {\n int bs,s,bt,t;\n scanf(\"%d%d%d%d\",&bs,&s,&bt,&t);\n for(int _k=1;_k<=k;_k++) {\n for(int i=1;i<=n+2;i++) {\n for(int j=n+1;j<=n+2;j++) {\n f[_k][i][j]=0;\n t0[_k][i][j]=0;\n t1[_k][i][j]=0;\n }\n }\n for(int i=n+1;i<=n+2;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=0;\n t0[_k][i][j]=0;\n t1[_k][i][j]=0;\n }\n }\n }\n for(int _k=1;_k<=k;_k++) {\n for(int i=1;i<=n+2;i++) {\n for(int j=n+1;j<=n+2;j++) {\n f[_k][i][j]=plus(f[_k][i][j],f[_k-1][i][j]);\n }\n }\n for(int i=n+1;i<=n+2;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=plus(f[_k][i][j],f[_k-1][i][j]);\n }\n }\n for(int v=1;v<=n;v++) {\n t0[_k-1][v][n+1]=_k==bs&&v==s;\n t1[_k-1][v][n+2]=_k==bt&&v==t;\n for(int u=1;u<=n;u++) {\n if(to[u][v]) {\n for(int i=n+1;i<=n+2;i++) {\n t0[_k-1][v][i]=plus(t0[_k-1][v][i],f[_k-1][i][u]);\n }\n }\n if(to[v][u]) {\n for(int i=n+1;i<=n+2;i++) {\n t1[_k-1][v][i]=plus(t1[_k-1][v][i],f[_k-1][u][i]);\n }\n }\n }\n for(int i=1;i<=n+2;i++) {\n for(int j=n+1;j<=n+2;j++) {\n f[_k][i][j]=(f[_k][i][j]+ull(t0[_k-1][v][i])*t1[_k-1][v][j])%mod;\n }\n }\n for(int i=n+1;i<=n+2;i++) {\n for(int j=1;j<=n;j++) {\n f[_k][i][j]=(f[_k][i][j]+ull(t0[_k-1][v][i])*t1[_k-1][v][j])%mod;\n }\n }\n }\n }\n printf(\"%u\\n\",f[k][n+1][n+2]);\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2079906, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 1978, | |
| "memory": 10664, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define int long long \nconst int maxn=70,mod=1e9+7;\nint f[maxn][maxn*2][maxn*2];\nint g[maxn*2],h[maxn*2];\nint n,k,Q;\nchar s[maxn][maxn];\nstruct qry{ \n int s,t;\n int bs,bt;\n}q[maxn];\nsigned main(){\n cin>>n>>k>>Q;\n for(int i=1;i<=n;i++)scanf(\"%s\",s[i]+1);\n for(int i=1;i<=Q;i++)cin>>q[i].bs>>q[i].s>>q[i].bt>>q[i].t;\n for(int v=1;v<=k;v++){\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n+Q;j++)f[v][i][j]=f[v-1][i][j];\n for(int k=1;k<=n;k++){\n memset(g,0,sizeof(g));\n memset(h,0,sizeof(h));\n for(int i=1;i<=n;i++)g[i]=h[i]=0;\n g[k]=h[k]=1;\n for(int i=1;i<=Q;i++){\n if(v==q[i].bs&&q[i].s==k)g[i+n]=1;\n if(v==q[i].bt&&q[i].t==k)h[i+n]=1;\n }\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n;j++)if(s[j][k]=='1')g[i]=(g[i]+f[v-1][i][j])%mod;\n for(int i=1;i<=n;i++)for(int j=1;j<=n+Q;j++)if(s[k][i]=='1')h[j]=(h[j]+f[v-1][i][j])%mod;\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n+Q;j++)f[v][i][j]=(f[v][i][j]+g[i]*h[j]%mod)%mod;\n }\n }\n for(int i=1;i<=Q;i++){\n cout<<f[k][n+i][n+i]<<\"\\n\";\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 2079905, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 2267, | |
| "memory": 9004, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define int long long \nconst int maxn=70,mod=1e9+7;\nint f[maxn][maxn*2][maxn*2];\nint g[maxn*2],h[maxn*2];\nint n,k,Q;\nchar s[maxn][maxn];\nstruct qry{ \n int s,t;\n int bs,bt;\n}q[maxn];\nsigned main(){\n cin>>n>>k>>Q;\n for(int i=1;i<=n;i++)scanf(\"%s\",s[i]+1);\n for(int i=1;i<=Q;i++)cin>>q[i].bs>>q[i].s>>q[i].bt>>q[i].t;\n for(int v=1;v<=k;v++){\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n+Q;j++)f[v][i][j]=f[v-1][i][j];\n for(int k=1;k<=n;k++){\n memset(g,0,sizeof(g));\n memset(h,0,sizeof(h));\n for(int i=1;i<=n;i++)g[i]=h[i]=0;\n g[k]=h[k]=1;\n for(int i=1;i<=Q;i++){\n if(v==q[i].bs&&q[i].s==k)g[i+n]=1;\n if(v==q[i].bt&&q[i].t==k)h[i+n]=1;\n }\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n;j++)if(s[j][k]=='1')g[i]=(g[i]+f[v-1][i][j])%mod;\n for(int i=1;i<=n;i++)for(int j=1;j<=n+Q;j++)if(s[k][i]=='1')h[j]=(h[j]+f[v-1][i][j])%mod;\n for(int i=1;i<=n+Q;i++)for(int j=1;j<=n+Q;j++)f[v][i][j]=(f[v][i][j]+g[i]*h[j]%mod)%mod;\n }\n }\n for(int i=1;i<=Q;i++){\n cout<<f[k][n+i][n+i]<<\"\\n\";\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1922926, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 1615, | |
| "memory": 6584, | |
| "code": "#include<bits/stdc++.h>\n#define rep(i,a,b) for(int i=(a);i<=(b);i++)\n#define per(i,a,b) for(int i=(a);i>=(b);i--)\n#define op(x) ((x&1)?x+1:x-1)\n#define odd(x) (x&1)\n#define even(x) (!odd(x))\n#define lc(x) (x<<1)\n#define rc(x) (lc(x)|1)\n#define lowbit(x) (x&-x)\n#define mp(x,y) make_pair(x,y)\ntypedef long long ll;\ntypedef unsigned long long ull;\ntypedef double db;\nusing namespace std;\nconst int MAXN = 65,mod = 1e9+7;\nvoid add(ll& x,ll y){x = (x+y)%mod;}\nll addv(ll x,ll y){return (x+y)%mod;}\n//\n\nll n,k,q,s,t,sv,tv;\nchar e[MAXN][MAXN];\n\nll f[MAXN][MAXN][2][2],g[MAXN][MAXN],h[MAXN][MAXN];\n\nll dp[MAXN][MAXN][MAXN],dpg[MAXN][MAXN][MAXN],dph[MAXN][MAXN][MAXN];\n\nint main(){\n\tcin>>n>>k>>q;\n\trep(i,1,n)cin>>(e[i]+1);\n\n\trep(j,1,k){ \t\n\t\trep(u,1,n)rep(v,1,n){\n\t\t\tll val = dp[j-1][u][v];\n\t\t\tif(val){\n\t\t\t\trep(w,1,n){\n\t\t\t\t\tif(e[v][w]^'0')add(dpg[j][u][w],val);\n\t\t\t\t\tif(e[w][u]^'0')add(dph[j][w][v],val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trep(u,1,n)add(dpg[j][u][u],1),add(dph[j][u][u],1);\n\n\t\trep(y,1,n)rep(x,1,n)rep(z,1,n){\n\t\t\tadd(dp[j][x][z],dpg[j][x][y] * dph[j][y][z]);\n\t\t}\n\t\trep(x,1,n)rep(y,1,n)add(dp[j][x][y],dp[j-1][x][y]);\n\t}\n\n\trep(i,1,q){\n\t\tcin>>sv>>s>>tv>>t;\n\t\tmemset(f,0,sizeof f);\n\n\t\trep(j,1,k){ \t\n\t\t\tmemset(g,0,sizeof g);memset(h,0,sizeof h);\n\t\t\trep(v,1,n){\n\t\t\t\tll val = f[s][v][1][0];\n\t\t\t\tif(val)rep(w,1,n)if(e[v][w]^'0')add(g[s][w],val);\n\t\t\t\n\t\t\t\tval = f[v][t][0][1];\t\n\t\t\t\tif(val)rep(w,1,n)if(e[w][v]^'0')add(h[w][t],val);\t\t\n\t\t\t}\n\n\t\t\tif(j==sv)add(g[s][s],1);\n\t\t\tif(j==tv)add(h[t][t],1);\n\n\t\t\t//calc (1,0)\n\t\t\trep(y,1,n)rep(z,1,n)add(f[s][z][1][0],g[s][y] * dph[j][y][z]);\n\t\t\t//calc (0,1)\n\t\t\trep(x,1,n)rep(y,1,n)add(f[x][t][0][1],dpg[j][x][y] * h[y][t]);\n\t\t\t//calc (1,1)\n\t\t\trep(y,1,n)add(f[s][t][1][1],g[s][y] * h[y][t]);\n\t\t}\n\n\t\tcout<<f[s][t][1][1]<<endl;\n\t}\t\n\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1916920, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 2076, | |
| "memory": 14856, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\ntypedef long long ll;\nconst ll mo=1e9+7;\n\nll g[205][205], g2[205][205];\nll f[205][205][61];\nll s[66], t[66], bs[66], bt[66];\n\nint main() {\n\tios::sync_with_stdio(false);\n\tcin.tie(0), cout.tie(0);\n\tll n,k,q; cin>>n>>k>>q;\n\tfor(ll i=1;i<=n;i++) {\n\t\tfor(ll j=1;j<=n;j++) {\n\t\t\tchar ch; cin>>ch;\n\t\t\tg[i][j]=ch-'0';\n\t\t}\n\t}\n\tfor(ll i=1;i<=q;i++) {\n\t\tcin>>bs[i]>>s[i]>>bt[i]>>t[i];\n\t\tfor(ll j=1;j<=n;j++) g[i+n][j]=g[s[i]][j];\n\t\tfor(ll j=1;j<=n;j++) g[j][i+n]=g[j][t[i]];\n\t}\n\tfor(ll i=1;i<=n+q;i++) {\n\t\tfor(ll j=1;j<=n+q;j++) {\n\t\t\tg2[i][j]=g[i][j];\n\t\t}\n\t}\n\tfor(ll k=1;k<=n;k++) {\n\t\tfor(ll i=1;i<=n+q;i++) {\n\t\t\tfor(ll j=1;j<=n+q;j++) {\n\t\t\t\tg2[i][j]=g2[i][k]|g2[k][j];\n\t\t\t}\n\t\t}\n\t}\n\tfor(ll i=1;i<=n+q;i++) {\n\t\tfor(ll j=1;j<=n+q;j++) { \n\t\t\tif(g[i][j]) {\n\t\t\t\tif(i<=n||j<=n||bs[i-n]!=bt[j-n]) f[i][j][0]=1;\n\t\t\t\telse f[i][j][0]=0;\n\t\t\t}\n\t\t}\n\t}\n\tfor(ll x=1;x<=k;x++) {\n\t\tfor(ll i=1;i<=n+q;i++) {\n\t\t\tfor(ll j=1;j<=n+q;j++) {\n\t\t\t\tll flag=0;\n\t\t\t\tif(i>n&&bs[i-n]==x) flag=1;\n\t\t\t\tif(j>n&&bt[j-n]==x) flag=1;\n\t\t\t\tf[i][j][x]=f[i][j][x-1];\n\t\t\t\tif(i>n&&j>n&&bs[i-n]==bt[j-n]&&bs[i-n]>x) flag=1;\n\t\t\t\tif(flag) continue;\n\t\t\t\tfor(ll k=1;k<=n;k++) {\n\t\t\t\t\tif(g2[i][k]&&g2[k][j]) {\n\t\t\t\t\t\tf[i][j][x]=(f[i][j][x]+f[i][k][x-1]*f[k][j][x-1]%mo)%mo;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor(ll i=1;i<=q;i++) cout<<f[i+n][i+n][k]+((s[i]==t[i]&&bs[i]==bt[i])|(g[s[i]][t[i]]&&bs[i]!=bt[i]))<<'\\n';\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1912941, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#40844. 「USACO 2020.12 Platinum」Spaceship", | |
| "time": 1957, | |
| "memory": 4676, | |
| "code": "// Problem: #3451. 「USACO 2020.12 Platinum」Spaceship\n// Contest: LibreOJ\n// URL: https://loj.ac/p/3451\n// Memory Limit: 512 MB\n// Time Limit: 1000 ms\n// \n// Powered by CP Editor (https://cpeditor.org)\n\n#include <bits/stdc++.h>\n#define pb emplace_back\n#define mt make_tuple\n#define mp make_pair\n#define fi first\n#define se second\n\nusing namespace std;\ntypedef long long ll;\ntypedef pair<int, int> pi;\ntypedef tuple<int, int, int> tu;\nbool Mbe;\n\nconst int N = 65;\nconst int M = N << 1;\nconst int P = 1e9 + 7;\n\nstruct node { int s, t, bs, bt; } qr[N];\nint n, k, q, f[N][M][M], g[M], h[M];\nchar s[N][N];\n\nvoid solve() {\n\tcin >> n >> k >> q;\n\tfor (int i = 1; i <= n; i++) \n\t\tcin >> (s[i] + 1);\n\tfor (int i = 1; i <= q; i++)\n\t\tcin >> qr[i].bs >> qr[i].s >> qr[i].bt >> qr[i].t;\n\tfor (int i = 1; i <= k; i++) {\n\t\tmemcpy(f[i], f[i - 1], sizeof(f[i]));\n\t\tfor (int j = 1; j <= n; j++) {\n\t\t\tmemset(g, 0, sizeof(int) * (n + q + 5));\n\t\t\tmemset(h, 0, sizeof(int) * (n + q + 5));\n\t\t\tg[j] = h[j] = 1;\n\t\t\tfor (int u = 1; u <= n + q; u++) \n\t\t\t\tfor (int v = 1; v <= n; v++)\n\t\t\t\t\tif (s[v][j] == '1') (g[u] += f[i - 1][u][v]) %= P;\n\t\t\tfor (int u = 1; u <= n; u++)\n\t\t\t\tfor (int v = 1; v <= n + q; v++)\n\t\t\t\t\tif (s[j][u] == '1') (h[v] += f[i - 1][u][v]) %= P;\n\t\t\tfor (int p = 1; p <= q; p++)\n\t\t\t\tg[n + p] += (qr[p].s == j && qr[p].bs == i),\n\t\t\t\th[n + p] += (qr[p].t == j && qr[p].bt == i);\n\t\t\tfor (int u = 1; u <= n + q; u++)\n\t\t\t\tfor (int v = 1; v <= n + q; v++)\n\t\t\t\t\t(f[i][u][v] += 1ll * g[u] * h[v] % P) %= P;\n\t\t}\n\t}\n\tfor (int i = 1; i <= q; i++)\n\t\tcout << f[k][i + n][i + n] << '\\n';\n}\n\nbool Med;\nint main() {\n\tios::sync_with_stdio(0), cin.tie(0), cout.tie(0);\n\tcerr << (&Mbe - &Med) / 1048576.0 << \" MB\\n\";\n\t#ifdef FILE\n\t\tfreopen(\"1.in\", \"r\", stdin);\n\t\tfreopen(\"1.out\", \"w\", stdout);\n\t#endif\n\tint T = 1;\n\t// cin >> T;\n\twhile (T--) solve();\n\tcerr << (int)(1e3 * clock() / CLOCKS_PER_SEC) << \" ms\\n\";\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++14", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| } | |
| ], | |
| "#3089. 「BJOI2019」奥术神杖": [ | |
| { | |
| "id": 2236965, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 1973, | |
| "memory": 45492, | |
| "code": "#include<bits/stdc++.h>\n#define int long long\n#define debug(x) cerr<<#x<<\" : \"<<x<<\"\\n\";\nusing namespace std;\ninline int read() {int x = 0, w = 1;char ch = 0;while (ch < '0' || ch > '9') { if (ch == '-') w = -1;ch = getchar();}while (ch >= '0' && ch <= '9') {x = x * 10 + (ch - '0'); ch = getchar(); }return x * w; }\nconst double inf = 1e17;\nint n, m;\nchar T[1505];\n//char S[1505][1505];\nchar S[1505], ans[1505];\nint son[1505][10], tot = 0;\nint cnt[1505];\nint fail[1505];\ndouble val[1505], dp[1505][1505];\nint fa[1505][1505], num[1505][1505];\n//fa[i][j]表示dp[i][j]取最值时,j的爹\n//num[i][j]表示dp[i][j]取最值时,j代表的这个点是什么\nint calc(char c){\n\treturn c - '0';\n}\nvoid insert(int v, char s[]){\n\tint len = strlen(s);\n\tint now = 0;\n\tfor(int i = 0; i < len; i++){\n\t\tint digit = calc(s[i]);\n\t\tif(!son[now][digit]){\n\t\t\tson[now][digit] = ++tot;\n\t\t}\n\t\tnow = son[now][digit];\n\t}\n\tcnt[now]++;\n\tval[now] += log2(v);\n}\nvoid getfail(){\n\tqueue<int> q;\n\tfor(int i = 0; i < 10; i++){\n\t\tif(!son[0][i]) continue;\n\t\tq.push(son[0][i]);\n\t}\n\twhile(!q.empty()){\n\t\tint x = q.front(); q.pop();\n\t\tval[x] += val[fail[x]];\n\t\tcnt[x] += cnt[fail[x]];\n\t\tfor(int i = 0; i < 10; i++){\n\t\t\tif(son[x][i]){\n\t\t\t\tfail[son[x][i]] = son[fail[x]][i];\n\t\t\t\tq.push(son[x][i]);\n\t\t\t}else{\n\t\t\t\tson[x][i] = son[fail[x]][i];\n\t\t\t}\n\t\t}\n\t}\n}\nbool check(double mid){\n\tfor(int i = 0; i <= tot; i++){\n\t\tval[i] -= mid * cnt[i];\n\t}\n\tfor(int i = 0; i <= n; i++){\n\t\tfor(int j = 0; j <= tot; j++){\n\t\t\tdp[i][j] = -1e11;\n\t\t}\n\t}\n\tdp[0][0] = 0;\n\tfor(int i = 0; i < n; i++){\n\t\tfor(int j = 0; j <= tot; j++){\n\t\t\tfor(int digit = 0; digit <= 9; digit++){\n\t\t\t\tif(T[i] == '.' || T[i] == digit + '0'){\n\t\t\t\t\tif(dp[i + 1][son[j][digit]] < dp[i][j] + val[son[j][digit]]){\n\t\t\t\t\t\tdp[i + 1][son[j][digit]] = dp[i][j] + val[son[j][digit]];\n\t\t\t\t\t\tfa[i + 1][son[j][digit]] = j;\n\t\t\t\t\t\tnum[i + 1][son[j][digit]] = digit;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor(int i = 0; i <= tot; i++){\n\t\tval[i] += mid * cnt[i];\n\t}\n\tint mxid = 0;\n\tfor(int i = 1; i <= tot; i++){\n\t\tif(dp[n][i] > dp[n][mxid]){\n//\t\t\tmx = dp[n][i];\n\t\t\tmxid = i;\n\t\t}\n\t}\n\tif(dp[n][mxid] > 0){\n\t\tint now = mxid;\n\t\tfor(int i = n; i >= 1; now = fa[i][now], i--){\n\t\t\tans[i] = num[i][now] + '0';\n\t\t}\n\t\treturn 1;\n\t}else{\n\t\treturn 0;\n\t}\n}\nsigned main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0), cout.tie(0);\n\tcin >> n >> m;\n\tcin >> (T);\n\tfor(int i = 1, v; i <= m; i++){\n\t\tcin >> S;\n\t\tcin >> v;\n\t\tinsert(v, S);\n\t}\n\tgetfail();\n\tdouble l = 0, r = log2(1e9);\n\twhile(r - l > 1e-6){\n\t\tdouble mid = (l + r) / 2;\n\t\tdebug(mid)\n\t\tif(check(mid)){\n\t\t\tl = mid;\n\t\t}else{\n\t\t\tr = mid;\n\t\t}\n\t}\n\tcheck(l);\n\tcout << ans + 1;\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233947, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 2375, | |
| "memory": 34928, | |
| "code": "#include <cmath>\n#include <queue>\n#include <stdio.h>\nusing namespace std;\npair<double, int> o[1502][1502]; vector<int> e[1502];\nchar a[1502], s[1502]; int n, b, f[1502], c[1502][10]; double g[1502], h[1502];\nvoid insert()\n{\n scanf(\"%s\", a + 1); int p(0), i(0);\n while (a[++i]) {\n if (!c[p][a[i] ^ '0']) c[p][a[i] ^ '0'] = ++b;\n p = c[p][a[i] ^ '0']; a[i] = 0;\n } scanf(\"%d\", &i); g[p] += log(i);\n}\nvoid build()\n{\n queue<int> q;\n for (int i(0); i <= 9; ++i) if (c[0][i]) q.emplace(c[0][i]);\n while (!q.empty()) {\n const int p(q.front()); q.pop();\n for (int i(0); i <= 9; ++i)\n if (const int u(c[p][i]); u) f[u] = c[f[p]][i], q.emplace(u); else c[p][i] = c[f[p]][i];\n} }\n\nvoid DFS(const int p, const int u) { h[p] += h[u]; for (int i : e[p]) DFS(i, p); }\nint DP(const double m)\n{\n for (int i(1); i <= b; ++i) h[i] = g[i] > 0 ? g[i] - m : 0;\n for (int i(0); i <= n; ++i) for (int j(0); j <= b; ++j) o[i][j] = {-1e9, -1};\n o[0][0] = {0, -1}; for (int i : e[0]) DFS(i, 0);\n for (int i(1); i <= n; ++i) for (int j(0); j <= b; ++j) if (o[i - 1][j].first > -1e9)\n if (s[i] ^ '.') {\n if (o[i - 1][j].first + h[c[j][s[i] ^ '0']] > o[i][c[j][s[i] ^ '0']].first)\n o[i][c[j][s[i] ^ '0']] = {o[i - 1][j].first + h[c[j][s[i] ^ '0']], j};\n } else for (int k(0); k <= 9; ++k)\n if (o[i - 1][j].first + h[c[j][k]] > o[i][c[j][k]].first)\n o[i][c[j][k]] = {o[i - 1][j].first + h[c[j][k]], j};\n for (int i(0); i <= b; ++i) if (o[n][i].first > 0) return i;\n return -1;\n}\n\nint main()\n{\n int m; double l(0), r(32000); scanf(\"%d%d%s\", &n, &m, s + 1);\n while (m--) insert(); build();\n for (int i(1); i <= b; ++i) e[f[i]].emplace_back(i);\n for (int i(0); i <= 50; ++i) if (~DP((l + r) / 2)) l = (l + r) / 2; else r = (l + r) / 2;\n for (int i(n), p(DP(l)); ~i; --i)\n {\n if (s[i] == '.') for (int j(0); j <= 9; ++j) if (c[o[i][p].second][j] == p) { s[i] = j ^ '0'; break; }\n p = o[i][p].second;\n }\n for (int i(1); i <= n; ++i) printf(\"%c\", s[i]);\n return !putchar('\\n');\n}", | |
| "compileAndRunOptions": { | |
| "std": "c++20", | |
| "compiler": "g++", | |
| "m": "64", | |
| "O": "fast" | |
| } | |
| }, | |
| { | |
| "id": 2228685, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 3571, | |
| "memory": 72844, | |
| "code": "#include <bits/stdc++.h>\n#define pb push_back\n#define fi first\n#define se second\nusing namespace std; bool MEM;\nusing ll=long long; using ld=long double;\nusing pii=pair<int,int>; using pll=pair<ll,ll>;\nconst int I=1e9;\nconst ll J=1e18,N=1507;\nconst ld eps=1e-7;\nll n,m,len[N],pos[N];\nld a[N],b[N];\nchar str[N],s[N][N],ans[N];\nnamespace AC {\n\tll t[N][10],nxt[N],cnn;\n\tld cnt[N];\n\tusing DP=pair<ld,pll>;\n\tDP dp[N][N];\n\tvector<ll> e[N];\n\tll ins(ll len,char *s) {\n\t\tll p=0;\n\t\tfor (ll i=1;i<=len;i++) {\n\t\t\tif (!t[p][s[i]-'0']) t[p][s[i]-'0']=++cnn;\n\t\t\tp=t[p][s[i]-'0'];\n\t\t}\n\t\treturn p;\n\t}\n\tvoid go() {\n\t\tqueue<ll> q;\n\t\tfor (ll i=0;i<10;i++) if (t[0][i]) q.push(t[0][i]);\n\t\twhile (!q.empty()) {\n\t\t\tll p=q.front(); q.pop();\n\t\t\te[nxt[p]].pb(p);\n\t\t\tfor (ll i=0;i<10;i++) {\n\t\t\t\tif (t[p][i]) nxt[t[p][i]]=t[nxt[p]][i],q.push(t[p][i]);\n\t\t\t\telse t[p][i]=t[nxt[p]][i];\n\t\t\t}\n\t\t}\n\t}\n\tvoid dfs(ll p) { for (ll i:e[p]) cnt[i]+=cnt[p],dfs(i); }\n\tvoid clr(DP &x) { x={-J,{0,0}}; }\n\tvoid chx(DP &x,DP y) { if (x<y) x=y; }\n\tbool chk(ld mid,ll o) {\n\t\tfor (ll i=0;i<=cnn;i++) cnt[i]=0;\n\t\tfor (ll i=1;i<=m;i++) cnt[pos[i]]+=a[i]-mid;\n\t\tdfs(0);\n\t\tfor (ll p=0;p<=cnn;p++) clr(dp[0][p]);\n\t\tdp[0][0]={0,{0,0}};\n\t\tfor (ll i=1;i<=n;i++) {\n\t\t\tfor (ll p=0;p<=cnn;p++) clr(dp[i][p]);\n\t\t\tfor (ll p=0;p<=cnn;p++) if (dp[i-1][p].fi>-J) {\n\t\t\t\tdp[i-1][p].fi+=cnt[p];\n\t\t\t\tll l=0,r=9;\n\t\t\t\tif (str[i]!='.') l=r=str[i]-'0';\n\t\t\t\tfor (ll j=l;j<=r;j++) chx(dp[i][t[p][j]],DP{dp[i-1][p].fi,{p,j}});\n\t\t\t}\n\t\t}\n\t\tfor (ll p=0;p<=cnn;p++) dp[n][p].fi+=cnt[p];\n\t\tll x=max_element(dp[n],dp[n]+cnn+1)-dp[n];\n\t\tif (o) for (ll i=n;i;i--) ans[i]=dp[i][x].se.se+'0',x=dp[i][x].se.fi;\n\t\treturn dp[n][x].fi>0;\n\t}\n\tvoid mian() {\n\t\tld l=0,r=32,mid; ll flg=0;\n\t\twhile (l+eps<r) {\n\t\t\tmid=(l+r)/2;\n\t\t\tif (chk(mid,0)) l=mid,flg=1;\n\t\t\telse r=mid;\n\t\t}\n\t\tif (flg) chk(l,1);\n\t\telse for (ll i=1;i<=n;i++) ans[i]='9';\n\t\tfor (ll i=1;i<=n;i++) cout<<ans[i];\n\t}\n}\nvoid mian() {\n\tscanf(\"%lld%lld%s\",&n,&m,str+1);\n\tfor (ll i=1;i<=m;i++)\n\t\tscanf(\"%s%Lf\",s[i]+1,&a[i]),len[i]=strlen(s[i]+1),\n\t\tpos[i]=AC::ins(len[i],s[i]),a[i]=log2(a[i]);\n\tAC::go(),AC::mian();\n}\nbool ORY; int main() {\n\t// while (1)\n\t// int t; for (scanf(\"%d\",&t);t--;)\n\tmian();\n\tcerr<<\"\\n\"<<abs(&MEM-&ORY)/1048576<<\"MB\";\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2208662, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 2088, | |
| "memory": 4760, | |
| "code": "#include <iostream>\n#include <cstdio>\n#include <vector>\n#include <cstring>\n#include <algorithm>\n#include <cmath>\n#include <array>\n#include <queue>\nusing namespace std;\n\nusing i32 = int;\nusing i64 = long long;\nusing u32 = unsigned int;\nusing u64 = unsigned long long;\n\ntemplate<typename T> using vec = vector<T>;\n\nusing dic = array<int, 10>;\n\nvoid tmx(double &x, double y, int &fx, int fy)\n{\n if (x < y) x = y, fx = fy;\n}\n\nsigned main() \n{\n ios::sync_with_stdio(false);\n cin.tie(0), cout.tie(0);\n int n, m;\n cin >> n >> m;\n string t;\n cin >> t;\n \n vec<dic> tr(1);\n\n auto insert_string = [&](const string &s)\n {\n int p = 0;\n for (int i: s) {\n i -= '0';\n if (!tr[p][i]) {\n tr[p][i] = tr.size();\n tr.emplace_back();\n }\n p = tr[p][i];\n }\n return p;\n };\n\n vec<int> ep(m), vi(m);\n\n for (int i = 0; i < m; i++) {\n string s;\n cin >> s >> vi[i];\n ep[i] = insert_string(s);\n }\n \n int ts = tr.size();\n vec<int> fail(ts);\n queue<int> q;\n for (int i: tr[0]) {\n if (i) q.emplace(i);\n }\n \n while (!q.empty()) {\n int x = q.front(), fx = fail[x];\n q.pop();\n for (int i = 0; i < 10; i++) {\n if (!tr[x][i]) tr[x][i] = tr[fx][i];\n else {\n fail[tr[x][i]] = tr[fx][i];\n q.emplace(tr[x][i]);\n }\n }\n }\n\n vec<vec<int>> ft(ts);\n\n for (int i = 1; i < ts; i++) ft[fail[i]].emplace_back(i);\n vec<double> dp;\n vec<vec<int>> pre(n, vec<int>(ts));\n\n auto check = [&](double mid) {\n vec<double> val(ts);\n for (int i = 0; i < m; i++) {\n val[ep[i]] += log(vi[i]) - mid;\n }\n [dfs = [&](auto &&f, int x) -> void\n {\n if (x) val[x] += val[fail[x]];\n for (int v: ft[x]) f(f, v);\n }](){dfs(dfs, 0);}();\n\n dp.assign(ts, -3e2);\n dp[0] = 0;\n\n for (int i = 0; i < n; i++) {\n vec<double> ndp(ts, -3e2);\n if (t[i] == '.') {\n for (int j = 0; j < ts; j++) {\n for (int k: tr[j]) {\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n }\n else {\n for (int j = 0; j < ts; j++) {\n int k = tr[j][t[i] - '0'];\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n dp.swap(ndp);\n }\n\n return *max_element(dp.begin(), dp.end()) > 4e-7;\n };\n\n double l = 0, r = log(1e9), mid;\n for (int cc = 0; cc <= 36; cc++) {\n mid = (l + r) / 2;\n if (check(mid)) l = mid;\n else r = mid;\n }\n\n int p = max_element(dp.begin(), dp.end()) - dp.begin();\n string ans(n, '.');\n for (int i = n - 1; i >= 0; i--) {\n int pp = pre[i][p];\n for (int k = 0; k < 10; k++) {\n if (tr[pp][k] == p) ans[i] = k + '0';\n }\n if (t[i] != '.') ans[i] = t[i];\n p = pp;\n }\n cout << ans << endl;\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2208659, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 1927, | |
| "memory": 4768, | |
| "code": "#include <iostream>\n#include <cstdio>\n#include <vector>\n#include <cstring>\n#include <algorithm>\n#include <cmath>\n#include <array>\n#include <queue>\nusing namespace std;\n\nusing i32 = int;\nusing i64 = long long;\nusing u32 = unsigned int;\nusing u64 = unsigned long long;\n\ntemplate<typename T> using vec = vector<T>;\n\nusing dic = array<int, 10>;\n\nvoid tmx(double &x, double y, int &fx, int fy)\n{\n if (x < y) x = y, fx = fy;\n}\n\nsigned main() \n{\n ios::sync_with_stdio(false);\n cin.tie(0), cout.tie(0);\n int n, m;\n cin >> n >> m;\n string t;\n cin >> t;\n \n vec<dic> tr(1);\n\n auto insert_string = [&](const string &s)\n {\n int p = 0;\n for (int i: s) {\n i -= '0';\n if (!tr[p][i]) {\n tr[p][i] = tr.size();\n tr.emplace_back();\n }\n p = tr[p][i];\n }\n return p;\n };\n\n vec<int> ep(m), vi(m);\n\n for (int i = 0; i < m; i++) {\n string s;\n cin >> s >> vi[i];\n ep[i] = insert_string(s);\n }\n \n int ts = tr.size();\n vec<int> fail(ts);\n queue<int> q;\n for (int i: tr[0]) {\n if (i) q.emplace(i);\n }\n \n while (!q.empty()) {\n int x = q.front(), fx = fail[x];\n q.pop();\n for (int i = 0; i < 10; i++) {\n if (!tr[x][i]) tr[x][i] = tr[fx][i];\n else {\n fail[tr[x][i]] = tr[fx][i];\n q.emplace(tr[x][i]);\n }\n }\n }\n\n vec<vec<int>> ft(ts);\n\n for (int i = 1; i < ts; i++) ft[fail[i]].emplace_back(i);\n vec<double> dp;\n vec<vec<int>> pre(n, vec<int>(ts));\n\n auto check = [&](double mid) {\n vec<double> val(ts);\n for (int i = 0; i < m; i++) {\n val[ep[i]] += log(vi[i]) - mid;\n }\n [dfs = [&](auto &&f, int x) -> void\n {\n if (x) val[x] += val[fail[x]];\n for (int v: ft[x]) f(f, v);\n }](){dfs(dfs, 0);}();\n\n dp.assign(ts, -3e2);\n dp[0] = 0;\n\n for (int i = 0; i < n; i++) {\n vec<double> ndp(ts, -3e2);\n if (t[i] == '.') {\n for (int j = 0; j < ts; j++) {\n for (int k: tr[j]) {\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n }\n else {\n for (int j = 0; j < ts; j++) {\n int k = tr[j][t[i] - '0'];\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n dp.swap(ndp);\n }\n\n return *max_element(dp.begin(), dp.end()) > 1e-7;\n };\n\n double l = 0, r = log(2e9), mid;\n for (int cc = 0; cc <= 38; cc++) {\n mid = (l + r) / 2;\n if (check(mid)) l = mid;\n else r = mid;\n }\n\n int p = max_element(dp.begin(), dp.end()) - dp.begin();\n string ans(n, '.');\n for (int i = n - 1; i >= 0; i--) {\n int pp = pre[i][p];\n for (int k = 0; k < 10; k++) {\n if (tr[pp][k] == p) ans[i] = k + '0';\n }\n if (t[i] != '.') ans[i] = t[i];\n p = pp;\n }\n cout << ans << endl;\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2208657, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 2291, | |
| "memory": 4768, | |
| "code": "#include <iostream>\n#include <cstdio>\n#include <vector>\n#include <cstring>\n#include <algorithm>\n#include <cmath>\n#include <array>\n#include <queue>\nusing namespace std;\n\nusing i32 = int;\nusing i64 = long long;\nusing u32 = unsigned int;\nusing u64 = unsigned long long;\n\ntemplate<typename T> using vec = vector<T>;\n\nusing dic = array<int, 10>;\n\nvoid tmx(double &x, double y, int &fx, int fy)\n{\n if (x < y) x = y, fx = fy;\n}\n\nsigned main() \n{\n ios::sync_with_stdio(false);\n cin.tie(0), cout.tie(0);\n int n, m;\n cin >> n >> m;\n string t;\n cin >> t;\n \n vec<dic> tr(1);\n\n auto insert_string = [&](const string &s)\n {\n int p = 0;\n for (int i: s) {\n i -= '0';\n if (!tr[p][i]) {\n tr[p][i] = tr.size();\n tr.emplace_back();\n }\n p = tr[p][i];\n }\n return p;\n };\n\n vec<int> ep(m), vi(m);\n\n for (int i = 0; i < m; i++) {\n string s;\n cin >> s >> vi[i];\n ep[i] = insert_string(s);\n }\n \n int ts = tr.size();\n vec<int> fail(ts);\n queue<int> q;\n for (int i: tr[0]) {\n if (i) q.emplace(i);\n }\n \n while (!q.empty()) {\n int x = q.front(), fx = fail[x];\n q.pop();\n for (int i = 0; i < 10; i++) {\n if (!tr[x][i]) tr[x][i] = tr[fx][i];\n else {\n fail[tr[x][i]] = tr[fx][i];\n q.emplace(tr[x][i]);\n }\n }\n }\n\n vec<vec<int>> ft(ts);\n\n for (int i = 1; i < ts; i++) ft[fail[i]].emplace_back(i);\n vec<double> dp;\n vec<vec<int>> pre(n, vec<int>(ts));\n\n auto check = [&](double mid) {\n vec<double> val(ts);\n for (int i = 0; i < m; i++) {\n val[ep[i]] += log(vi[i]) - mid;\n }\n [dfs = [&](auto &&f, int x) -> void\n {\n if (x) val[x] += val[fail[x]];\n for (int v: ft[x]) f(f, v);\n }](){dfs(dfs, 0);}();\n\n dp.assign(ts, -3e2);\n dp[0] = 0;\n\n for (int i = 0; i < n; i++) {\n vec<double> ndp(ts, -3e2);\n if (t[i] == '.') {\n for (int j = 0; j < ts; j++) {\n for (int k: tr[j]) {\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n }\n else {\n for (int j = 0; j < ts; j++) {\n int k = tr[j][t[i] - '0'];\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n dp.swap(ndp);\n }\n\n return *max_element(dp.begin(), dp.end()) > 1e-7;\n };\n\n double l = 0, r = log(2e9), mid;\n for (int cc = 0; cc <= 40; cc++) {\n mid = (l + r) / 2;\n if (check(mid)) l = mid;\n else r = mid;\n }\n\n int p = max_element(dp.begin(), dp.end()) - dp.begin();\n string ans(n, '.');\n for (int i = n - 1; i >= 0; i--) {\n int pp = pre[i][p];\n for (int k = 0; k < 10; k++) {\n if (tr[pp][k] == p) ans[i] = k + '0';\n }\n if (t[i] != '.') ans[i] = t[i];\n p = pp;\n }\n cout << ans << endl;\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2208650, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 3847, | |
| "memory": 4760, | |
| "code": "#include <iostream>\n#include <cstdio>\n#include <vector>\n#include <cstring>\n#include <algorithm>\n#include <cmath>\n#include <array>\n#include <queue>\nusing namespace std;\n\nusing i32 = int;\nusing i64 = long long;\nusing u32 = unsigned int;\nusing u64 = unsigned long long;\n\ntemplate<typename T> using vec = vector<T>;\n\nusing dic = array<int, 10>;\n\nvoid tmx(double &x, double y, int &fx, int fy)\n{\n if (x < y) x = y, fx = fy;\n}\n\nsigned main() \n{\n ios::sync_with_stdio(false);\n cin.tie(0), cout.tie(0);\n int n, m;\n cin >> n >> m;\n string t;\n cin >> t;\n \n vec<dic> tr(1);\n\n auto insert_string = [&](const string &s)\n {\n int p = 0;\n for (int i: s) {\n i -= '0';\n if (!tr[p][i]) {\n tr[p][i] = tr.size();\n tr.emplace_back();\n }\n p = tr[p][i];\n }\n return p;\n };\n\n vec<int> ep(m), vi(m);\n\n for (int i = 0; i < m; i++) {\n string s;\n cin >> s >> vi[i];\n ep[i] = insert_string(s);\n }\n \n int ts = tr.size();\n vec<int> fail(ts);\n queue<int> q;\n for (int i: tr[0]) {\n if (i) q.emplace(i);\n }\n \n while (!q.empty()) {\n int x = q.front(), fx = fail[x];\n q.pop();\n for (int i = 0; i < 10; i++) {\n if (!tr[x][i]) tr[x][i] = tr[fx][i];\n else {\n fail[tr[x][i]] = tr[fx][i];\n q.emplace(tr[x][i]);\n }\n }\n }\n\n vec<vec<int>> ft(ts);\n\n for (int i = 1; i < ts; i++) ft[fail[i]].emplace_back(i);\n vec<double> dp;\n vec<vec<int>> pre(n, vec<int>(ts));\n\n auto check = [&](double mid) {\n vec<double> val(ts);\n for (int i = 0; i < m; i++) {\n val[ep[i]] += log(vi[i]) - mid;\n }\n [dfs = [&](auto &&f, int x) -> void\n {\n if (x) val[x] += val[fail[x]];\n for (int v: ft[x]) f(f, v);\n }](){dfs(dfs, 0);}();\n\n dp.assign(ts, -3e2);\n dp[0] = 0;\n\n for (int i = 0; i < n; i++) {\n vec<double> ndp(ts, -3e2);\n if (t[i] == '.') {\n for (int j = 0; j < ts; j++) {\n for (int k: tr[j]) {\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n }\n else {\n for (int j = 0; j < ts; j++) {\n int k = tr[j][t[i] - '0'];\n tmx(ndp[k], dp[j] + val[k], pre[i][k], j);\n }\n }\n dp.swap(ndp);\n }\n\n return *max_element(dp.begin(), dp.end()) > 1e-10;\n };\n\n double l = 0, r = log(2e9), mid;\n for (int cc = 0; cc <= 60; cc++) {\n mid = (l + r) / 2;\n if (check(mid)) l = mid;\n else r = mid;\n }\n\n int p = max_element(dp.begin(), dp.end()) - dp.begin();\n string ans(n, '.');\n for (int i = n - 1; i >= 0; i--) {\n int pp = pre[i][p];\n for (int k = 0; k < 10; k++) {\n if (tr[pp][k] == p) ans[i] = k + '0';\n }\n if (t[i] != '.') ans[i] = t[i];\n p = pp;\n }\n cout << ans << endl;\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2175606, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3089. 「BJOI2019」奥术神杖", | |
| "time": 2111, | |
| "memory": 50564, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define int long long\n#define LD double\n// #define double long double\n#define it __int128\n#define lson (pos<<1)\n#define rson (pos<<1|1)\n#define pii pair<int,int> \n#define fr first\n#define sc second \n#define mk make_pair\n#define pb push_back\n#define x1 gczkaioi\n#define y1 lylakioi\n#define yjbakioi true\n#define popcnt __builtin_popcount\n#define inx(u) int I=h[u],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v\nint read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;}\nconst int MAXN=2010,MAXM=2010,N=80,base=1000000,Mod=998244353,Mod2=999911659,inf=1000000000,Inf=1000000000,B=1000;\nconst long double eps=1e-7;\nint Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod,y>>=1;}return rt;}\nstring ejz(int x){string s=\"\";for(int i=0;i<6;i++)s+=x&(1<<i)?\"1\":\"0\";return s;}\nint lg(int x){int res=0;while(x)x>>=1,res++;return res;}\n// struct Edge{int v,nx;}edge[MAXN<<1];int h[MAXN],CNT=1;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;}\nint n,m,k,t,p[MAXN];\nLD f[MAXN][MAXN],a[MAXM];\npii pre[MAXN][MAXN];\nchar c[MAXN],d[MAXN],ans[MAXN];\nstruct ACAM{\n int t[MAXM][N],F[MAXM],rd[MAXM],cnt;LD num[MAXM];\n void clear(){\n cnt=1;\n }\n void insert(int id){\n int pos=1,len=strlen(d+1);\n for(int i=1;i<=len;i++){\n if(!t[pos][d[i]-'0'])t[pos][d[i]-'0']=++cnt;\n pos=t[pos][d[i]-'0'];\n }\n p[id]=pos;\n }\n queue<int>q;\n void build(){\n for(int i=0;i<=9;i++)t[0][i]=1;\n q.push(1);\n F[1]=0;\n while(!q.empty()){\n int pos=q.front();q.pop();\n for(int i=0;i<=9;i++){\n int v=t[pos][i],Fail=F[pos];\n if(!v)t[pos][i]=t[Fail][i];\n else F[v]=t[Fail][i],num[v]+=num[F[v]],q.push(v);\n }\n }\n }\n bool vis[MAXN];\n void bld(){\n memset(vis,0,sizeof(vis));\n q.push(1),vis[1]=1;\n while(!q.empty()){\n int pos=q.front();q.pop();\n num[pos]+=num[F[pos]];\n for(int i=0;i<=9;i++){\n int v=t[pos][i];\n if(!vis[v])q.push(v),vis[v]=1;\n }\n }\n }\n void Max(int i,int j,int pi,int pj,LD z,int x){\n if(f[i][j]<=f[pi][pj]+z){\n f[i][j]=f[pi][pj]+z;\n pre[i][j]=mk(pj,x);\n }\n // cout<<\"! \"<<i<<\" \"<<j<<\" \"<<f[i][j]<<\" \"<<pi<<\" \"<<pj<<\" \"<<f[pi][pj]<<\" \"<<x<<endl;\n }\n bool check(LD x){\n for(int i=0;i<=cnt;i++)num[i]=0;\n for(int i=0;i<=n;i++)for(int j=1;j<=cnt;j++)f[i][j]=-inf;\n for(int i=1;i<=m;i++)num[p[i]]+=a[i]-x;\n bld();\n // cout<<x<<\"::::\"<<endl;\n // cout<<\" \";for(int i=1;i<=cnt;i++)cout<<num[i]<<\" \";cout<<endl;\n f[0][1]=0;\n for(int i=1;i<=n;i++){\n for(int j=1;j<=cnt;j++){\n if(c[i]!='.')Max(i,t[j][c[i]-'0'],i-1,j,num[t[j][c[i]-'0']],c[i]-'0');\n else for(int o=0;o<=9;o++)Max(i,t[j][o],i-1,j,num[t[j][o]],o);\n }\n // cout<<i<<\": \";for(int j=1;j<=cnt;j++)printf(\"%17.5Lf \",f[i][j]);cout<<endl;\n }\n LD res=-inf;\n int id=0;\n for(int i=1;i<=cnt;i++){\n if(f[n][i]>=res)res=f[n][i],id=i;\n }\n for(int i=n;i;i--){\n ans[i]=pre[i][id].sc;\n id=pre[i][id].fr;\n }\n // cout<<res<<endl;\n return res>eps;\n }\n}T;\nvoid slv(){\n n=read(),m=read();\n scanf(\"%s\",c+1);\n T.clear();\n for(int i=1;i<=m;i++){\n scanf(\"%s\",d+1);\n a[i]=log(read());\n T.insert(i);\n // cout<<a[i]<<\" \";\n }\n // cout<<endl;\n T.build();\n LD l=0,r=40;\n while(r-l>eps){\n LD mid=(l+r)/2;\n if(T.check(mid))l=mid;\n else r=mid;\n }\n if(T.check(l));\n // cout<<l<<endl;\n for(int i=1;i<=n;i++)printf(\"%c\",ans[i]+'0');\n}\nsigned main(){\n \t// freopen(\"1.in\",\"r\",stdin);freopen(\"1.out\",\"w\",stdout);\n // while(n=read())\n slv();\n cerr<<clock()*1.0/CLOCKS_PER_SEC<<\"s\\n\";\n return 0;\n} \t", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#41063. 「联合省选 2021 A | B」图函数": [ | |
| { | |
| "id": 2230217, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 5878, | |
| "memory": 5196, | |
| "code": "#include<bits/stdc++.h>\n#define pb emplace_back\nusing namespace std;\nconst int N = 1e3 + 10;\nconst int M = 2e5 + 10;\nint n, m;\nint f[N][N], ans[M];\nint main() {\n\t// freopen(\"graph.in\", \"r\", stdin);\n\t// freopen(\"graph.out\", \"w\", stdout);\n ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);\n\tcin >> n >> m;\n\tfor(int i = 1; i <= m; i ++ ) {\n\t\tint u, v;\n\t\tcin >> u >> v;\n\t\tf[u][v] = max(f[u][v], i);\n\t}\n for(int i = 1; i <= n; i ++ ) f[i][i] = m + 1;\n for(int k = n; k >= 1; k -- ) { // 从大到小枚举中间点 \n \tfor(int i = 1; i <= n; i ++ ) {\n \t\tif(!f[i][k]) continue;\n \t\tint lim = (i < k ? n : k - 1);\n \t\tfor(int j = 1; j <= lim; j ++ ) \n\t\t\t f[i][j] = max(f[i][j], min(f[i][k], f[k][j]));\n\t\t}\n\t}\n for(int i = 1; i <= n; i ++ ) {\n \tfor(int j = i; j <= n; j ++ ) {\n \t ans[0] ++, ans[min(f[i][j], f[j][i])] --;\n\t\t}\n\t}\n\tfor(int i = 0; i <= m; i ++ ) \n\t\tif(i) ans[i] += ans[i - 1];\n\tfor(int i = 0; i <= m; i ++ ) printf(\"%d \", ans[i]);\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2164913, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 6112, | |
| "memory": 5180, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\ntypedef long long ll;\nconst int maxn = 1e3 + 5, maxm = 2e5 + 5;\nint n, m, x, y, dis[maxn][maxn], ans[maxm];\nvoid read(int &x) {\n\tx = 0;\n\tchar c;\n\twhile (!isdigit(c = getchar())) ;\n\tx = c - '0';\n\twhile (isdigit(c = getchar())) {\n\t\tx = (x << 3) + (x << 1) + (c - '0');\n\t}\n}\nint main() {\n\tread(n); read(m);\n\tfor (int i = 1; i <= m; i++) {\n\t\tread(x); read(y);\n\t\tdis[x][y] = i;\n\t}\n\tfor (int ii = n; ii >= 1; ii--) {\n\t\tfor (int i = ii + 1; i <= n; i++) {\n\t\t\tans[min(dis[ii][i], dis[i][ii])]++;\n\t\t}\n\t\tfor (int i = 1; i <= n; i++) {\n\t\t\tif (!dis[i][ii]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (i > ii) {\n\t\t\t\tfor (int j = 1; j < ii; j++) {\n\t\t\t\t\tdis[i][j] = max(dis[i][j], min(dis[i][ii], dis[ii][j]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (int j = 1; j <= n; j++) {\n\t\t\t\t\tdis[i][j] = max(dis[i][j], min(dis[i][ii], dis[ii][j]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tans[m + 1] = n;\n\tfor (int i = m; i >= 1; i--) {\n\t\tans[i] += ans[i + 1];\n\t}\n\tfor (int i = 1; i <= m + 1; i++) {\n\t\tprintf(\"%d \", ans[i]);\n\t}\n\tprintf(\"\\n\");\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2163906, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 11597, | |
| "memory": 7608, | |
| "code": "// sis puella oier\n#include <bits/stdc++.h>\nusing namespace std;\n// #define int long long\ntypedef long long ll;\nll read(){\n ll xx = 0, f = 1; char ch = getchar();\n for (;!isdigit(ch); ch = getchar())\n f = (ch == '-' ? -1 : 1);\n for (; isdigit(ch); ch = getchar())\n xx = (xx << 3) + (xx << 1) + ch - '0';\n return xx * f;\n}\nconst int N = 1010;\nint n, m, ans[200100];\nvector <array<int, 2>> e[N];\nint dis[N][N];\nsigned main(){\n n = read(), m = read();\n for (int i = 1, u, v; i <= m; ++i){\n u = read(), v = read();\n if (u < v)e[u].push_back({v, i});\n else e[v].push_back({u, -i});\n ans[i] = 0;\n }\n for (int i = 1; i <= n; ++i)dis[i][i] = m + 1;\n for (int i = n; i >= 1; --i){\n for (array <int, 2> v : e[i])if (v[1] > 0)\n dis[i][v[0]] = max(dis[i][v[0]], v[1]);\n else dis[v[0]][i] = max(dis[v[0]][i], -v[1]);\n for (int k = i + 1; k <= n; ++k)\n for (int j = i + 1; j <= n; ++j)\n dis[i][j] = max(dis[i][j], min(dis[i][k], dis[k][j])),\n dis[j][i] = max(dis[j][i], min(dis[j][k], dis[k][i]));\n for (int k = i + 1; k <= n; ++k)\n for (int j = i + 1; j <= n; ++j)\n dis[k][j] = max(dis[k][j], min(dis[k][i], dis[i][j]));\n for (int j = i; j <= n; ++j)++ans[min(dis[i][j], dis[j][i])];\n }\n for (int i = m; i >= 1; --i)ans[i] += ans[i + 1];\n for (int i = 1; i <= m + 1; ++i)printf(\"%d \", ans[i]); printf(\"\\n\");\n return 0;\n}\n\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2203797, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 5131, | |
| "memory": 9964, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define endl '\\n'\n#define pb push_back\n#define fst first\n#define scd second\n#define rep(i,s,e) for(int i=s;i<=e;++i)\n#define dep(i,s,e) for(int i=s;i>=e;--i)\n\nusing ll=long long;\nusing pii=pair<int,int>;\nusing pll=pair<ll,ll>;\n\nconst int N=2e5+10;\n\nll g[1010][1010],sum[N];\nvoid solve(){\n\tint n,m;\n\tcin>>n>>m;\n\trep(i,1,m){\n\t\tint u,v;\n\t\tcin>>u>>v;\n\t\tg[u][v]=i;\n\t}\n\tdep(k,n,1){\n\t\trep(i,k+1,n) ++sum[min(g[i][k],g[k][i])];\n\t\trep(i,1,n) if(g[i][k]){\n\t\t\tif(i>k) rep(j,1,k) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t\telse rep(j,1,n) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t}\n\t}\n\tsum[m+1]=n;\n\tdep(i,m,1) sum[i]+=sum[i+1];\n\trep(i,1,m+1) cout<<sum[i]<<' ';\n}\nint main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0);\n\tcout.tie(0);\n\tint t=1;\n\t//cin>>t;\n\twhile(t--) solve();\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2203796, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 7970, | |
| "memory": 9964, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define endl '\\n'\n#define pb push_back\n#define fst first\n#define scd second\n#define rep(i,s,e) for(int i=s;i<=e;++i)\n#define dep(i,s,e) for(int i=s;i>=e;--i)\n\nusing ll=long long;\nusing pii=pair<int,int>;\nusing pll=pair<ll,ll>;\n\nconst int N=2e5+10;\n\nll g[1010][1010],sum[N];\nvoid solve(){\n\tint n,m;\n\tcin>>n>>m;\n\trep(i,1,m){\n\t\tint u,v;\n\t\tcin>>u>>v;\n\t\tg[u][v]=i;\n\t}\n\tdep(k,n,1){\n\t\trep(i,k+1,n) ++sum[min(g[i][k],g[k][i])];\n\t\trep(i,1,n) if(g[i][k]){\n\t\t\tif(i>k) rep(j,1,k) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t\telse rep(j,1,n) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t}\n\t}\n\tsum[m+1]=n;\n\tdep(i,m,1) sum[i]+=sum[i+1];\n\trep(i,1,m+1) cout<<sum[i]<<' ';\n}\nint main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0);\n\tcout.tie(0);\n\tint t=1;\n\t//cin>>t;\n\twhile(t--) solve();\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2203795, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 5181, | |
| "memory": 9896, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define endl '\\n'\n#define pb push_back\n#define fst first\n#define scd second\n#define rep(i,s,e) for(int i=s;i<=e;++i)\n#define dep(i,s,e) for(int i=s;i>=e;--i)\n\nusing ll=long long;\nusing pii=pair<int,int>;\nusing pll=pair<ll,ll>;\n\nconst int N=2e5+10;\n\nll g[1010][1010],sum[N];\nvoid solve(){\n\tint n,m;\n\tcin>>n>>m;\n\trep(i,1,m){\n\t\tint u,v;\n\t\tcin>>u>>v;\n\t\tg[u][v]=i;\n\t}\n\tdep(k,n,1){\n\t\trep(i,k+1,n) ++sum[min(g[i][k],g[k][i])];\n\t\trep(i,1,n) if(g[i][k]){\n\t\t\tif(i>k) rep(j,1,k) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t\telse rep(j,1,n) g[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t\t}\n\t}\n\tsum[m+1]=n;\n\tdep(i,m,1) sum[i]+=sum[i+1];\n\trep(i,1,m+1) cout<<sum[i]<<' ';\n}\nint main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0);\n\tcout.tie(0);\n\tint t=1;\n\t//cin>>t;\n\twhile(t--) solve();\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2203788, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 10527, | |
| "memory": 9900, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define endl '\\n'\n#define pb push_back\n#define fst first\n#define scd second\n#define rep(i,s,e) for(int i=s;i<=e;++i)\n#define dep(i,s,e) for(int i=s;i>=e;--i)\n\nusing ll=long long;\nusing pii=pair<int,int>;\nusing pll=pair<ll,ll>;\n\nconst int N=2e5+10;\n\nll g[1010][1010],sum[N];\nvoid solve(){\n\tint n,m;\n\tcin>>n>>m;\n\trep(i,1,m){\n\t\tint u,v;\n\t\tcin>>u>>v;\n\t\tg[u][v]=i;\n\t}\n\tdep(k,n,1){\n\t\trep(i,k+1,n) sum[min(g[i][k],g[k][i])]++;\n\t\trep(i,1,n)\n\t\t\trep(j,1,n)\n\t\t\t\tg[i][j]=max(g[i][j],min(g[i][k],g[k][j]));\n\t}\n\tsum[m+1]=n;\n\tdep(i,m,1) sum[i]+=sum[i+1];\n\trep(i,1,m+1) cout<<sum[i]<<' ';\n}\nint main(){\n\tios::sync_with_stdio(0);\n\tcin.tie(0);\n\tcout.tie(0);\n\tint t=1;\n\t//cin>>t;\n\twhile(t--) solve();\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2164740, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#41063. 「联合省选 2021 A | B」图函数", | |
| "time": 10237, | |
| "memory": 5144, | |
| "code": "// Code by Heratino & Nelofus\n// 消えたくって 羽ばたいて 今\n// 消えたくなくなった\n// 摘み取って残した ここでいつか 華咲かせる\n// 消えたかった 私はもういない\n// 消えなくてよかったな…\n// だって君と出会い 芽吹いてしまった 運命の華\n#include <bits/stdc++.h>\nusing i64 = long long;\nusing f64 = double;\n\n//{{{\ntemplate<typename Ta, typename Tb>\ninline void chkmax(Ta &a, const Tb &b) {if (a < b)\ta = b;}\ntemplate<typename Ta, typename Tb>\ninline void chkmin(Ta &a, const Tb &b) {if (a > b)\ta = b;}\n//}}}\n\nconstexpr int N = 1e3 + 10;\nconstexpr int M = 2e5 + 10;\nint n, m;\nint f[N][N];\nint ans[M];\nint main() {\n#ifdef HeratinoNelofus\n\tfreopen(\"input.txt\", \"r\", stdin);\n#endif\n\tstd::ios::sync_with_stdio(false);\n\tstd::cin.tie(nullptr);\n\n\tstd::cin >> n >> m;\n\tfor (int i = 1; i <= n; i++)\n\t\tfor (int j = 1; j <= n; j++)\n\t\t\tf[i][j] = -1;\n\tfor (int i = 1; i <= n; i++)\n\t\tf[i][i] = m + 1;\n\tfor (int i = 1; i <= m; i++) {\n\t\tint u, v;\n\t\tstd::cin >> u >> v;\n\t\tf[u][v] = i;\n\t}\n\tfor (int k = n; k >= 1; k--) {\n\t\tfor (int i = 1; i <= n; i++) {\n\t\t\tfor (int j = 1; j <= n; j++) {\n\t\t\t\tchkmax(f[i][j], std::min(f[i][k], f[k][j]));\n\t\t\t}\n\t\t}\n\t\tfor (int i = k; i <= n; i++) {\n\t\t\tint t = std::min(f[k][i], f[i][k]);\n\t\t\tif (t > 0) {\n\t\t\t\tans[t - 1]++;\n\t\t\t}\n\t\t}\n\t}\n\tfor (int i = m; i >= 0; i--)\n\t\tans[i] += ans[i + 1];\n\tfor (int i = 0; i <= m; i++)\n\t\tstd::cout << ans[i] << \" \\n\"[i == m];\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "gnu++20", | |
| "O": "fast", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会": [ | |
| { | |
| "id": 2235099, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 3168, | |
| "memory": 3112, | |
| "code": "#include<cstdio>\n#include<iostream>\n#include<queue>\nusing namespace std;\ntemplate<typename T>\nvoid in(T &n){\n n=0;char c=getchar();bool flag=0;\n for(;c<'0'||c>'9';c=getchar()) if (c=='-') flag=1;\n for(;c>='0'&&c<='9';c=getchar()) (n*=10)+=(c^48);\n if (flag) n=-n;\n}\nconst int Maxn=10005,Maxm=100005;\nint n,m,head[Maxn],pre[Maxm<<1],val[Maxm<<1],deg[Maxn],len;\nvoid ins(int u,int v){pre[++len]=head[u],head[u]=len,val[len]=v;}\nstruct node{\n int id,val;\n node(int _id=0){val=deg[id=_id];}\n bool operator>(const node &u)const{return val>u.val;}\n};\npriority_queue<node,vector<node>,greater<node> > q;\nint st1[Maxn],top1,ans,anstop,st2[Maxn],top2;\nbool vis[Maxn];\nvoid work(){\n in(n);in(m);len=ans=anstop=top1=top2=0;\n for(int i=1;i<=n;++i) head[i]=deg[i]=0;\n for(int i=1,u,v;i<=m;++i){\n in(u);in(v);\n ins(u,v);ins(v,u);\n ++deg[u],++deg[v];\n }\n for(int i=1;i<=n;++i) q.push(node(i)),vis[i]=0;\n while(!q.empty()){\n int u=q.top().id,ndeg=q.top().val;q.pop();\n if (vis[u]) continue;\n if (ans<ndeg){ans=ndeg;anstop=top1;}\n vis[u]=1;st1[++top1]=u;\n for(int i=head[u];i;i=pre[i]) if (!vis[val[i]]){--deg[val[i]];q.push(val[i]);}\n }\n for(int i=1;i<=len;++i) ++deg[val[i]];\n for(int i=1;i<=n;++i) q.push(node(i)),vis[i]=0;\n while(!q.empty()){\n int u=q.top().id;q.pop();\n if (vis[u]) continue;\n st2[++top2]=u;vis[u]=1;\n for(int i=head[u];i;i=pre[i]) vis[val[i]]=1;\n }\n cerr<<ans<<endl;\n printf(\"%d \",n-anstop);\n for(int i=anstop+1;i<=n;++i) printf(\"%d \",st1[i]);\n printf(\"\\n%d \",top2);\n for(int i=1;i<=top2;++i) printf(\"%d \",st2[i]);\n putchar(10);\n}\nint main(){\n#ifdef LOCAL\n freopen(\"in.in\",\"r\",stdin);\n freopen(\"out.out\",\"w\",stdout);\n#endif\n int t;in(t);\n while(t--) work();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2211885, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 3069, | |
| "memory": 11604, | |
| "code": "#include<bits/stdc++.h> \nusing namespace std;\nint T,n,m,i,j,x,y,z,rd[10005],del[10005],cnt,now,maxx,num,tmp1,tmp2;\nvector<int>e[10005],A,B;\nqueue<int>q[10005];\nint main(){\n\tscanf(\"%d\",&T);\n\twhile(T--){\n\t\tfor(i=1;i<=n;++i)e[i].clear();\n\t\tA.clear();\n\t\tB.clear();\n\t\tscanf(\"%d%d\",&n,&m);\n\t\tfor(i=1;i<=m;++i){\n\t\t\tscanf(\"%d%d\",&x,&y);\n\t\t\te[x].push_back(y);\n\t\t\te[y].push_back(x); \n\t\t}\n\t\tnow=n,maxx=0,num=0;\n\t\tfor(i=1;i<=n;++i){\n\t\t\trd[i]=e[i].size();\n\t\t\tq[rd[i]].push(i);\n\t\t\tdel[i]=0;\n\t\t\tnow=min(now,rd[i]);\n\t\t}\n\t\twhile(now<n){\n\t\t\twhile(!q[now].empty()&&del[q[now].front()])q[now].pop();\n\t\t\tif(q[now].empty()){\n\t\t\t\t++now;continue;\n\t\t\t}\n\t\t\tif(maxx<now){\n\t\t\t\tmaxx=now;\n\t\t\t\tnum=cnt;\n\t\t\t}\n\t\t\tx=q[now].front();\n\t\t\tq[now].pop();\n\t\t\tdel[x]=++cnt;\n\t\t\tB.push_back(x);\n\t\t\tfor(i=0,tmp1=e[x].size();i<tmp1;++i){\n\t\t\t\ty=e[x][i];\n\t\t\t\tif(del[y])continue;\n\t\t\t\tdel[y]=cnt;\n\t\t\t\tfor(j=0,tmp2=e[y].size();j<tmp2;++j){\n\t\t\t\t\tz=e[y][j];\n\t\t\t\t\tq[--rd[z]].push(z);now=min(now,rd[z]); \n\t\t\t\t}\n\t\t\t} \n\t\t}\n\t\tfor(i=1;i<=n;++i)if(del[i]>=num)A.push_back(i);\n\t\tprintf(\"%d \",A.size());\n\t\tfor(i=0,tmp1=A.size();i<tmp1;++i){\n\t\t\tprintf(\"%d \",A[i]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t\tprintf(\"%d \",B.size());\n\t\tfor(i=0,tmp1=B.size();i<tmp1;++i){\n\t\t\tprintf(\"%d \",B[i]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2211388, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 7022, | |
| "memory": 3852, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n\ninline int read() {\n\tint x = 0, f = 1;\n\tchar c = getchar();\n\twhile (c < '0' || c > '9') {if (c == '-') f = -f; c = getchar();}\n\twhile (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();\n\treturn x * f;\n}\n\n#define pb push_back()\n#define vec vector\n\ninline int qpow(int a, int b) {\n\tint ret = 0;\n\tfor (; b; b >>=1) {\n\t\tif (b & 1) ret += a;\n\t\ta = a * a;\n\t} return ret;\n}\nstruct node\n{\n\tint x,y;\n\tfriend bool operator <(node x,node y)\n\t{\n\t\treturn x.y>y.y; \n\t}\n};\nconst int MAXN=1e5+10; \nint n,m,cnt,first[MAXN],net[MAXN*2],v[MAXN*2];\nint h[MAXN],sum[MAXN],num[MAXN],ans1;\nvector<int>out2,out1;\nunordered_map<int,int>mp;\npriority_queue<node>q;\nvoid add(int x,int y)\n{\n\t++cnt;\n\tv[cnt]=y;\n\tnet[cnt]=first[x];\n\tfirst[x]=cnt;\n}\nvoid solve1()\n{\n\tfor(int i=1;i<=n;i++)q.push({i,num[i]}),sum[i]=num[i],h[i]=0;\n\twhile(!q.empty())\n\t{\n\t\tint x=q.top().x,y=q.top().y;q.pop();\n\t\tif(h[x])continue;\n\t\th[x]=1;\n\t\tsum[x]=0;\n\t\tans1=max(ans1,y);\n\t\tfor(int i=first[x];i;i=net[i])\n\t\t{\n\t\t\tif(h[v[i]])continue;\n\t\t\tsum[v[i]]--;\n\t\t\tq.push({v[i],sum[v[i]]});\n\t\t}\n\t}\n}\nvoid solve2()\n{\n\tfor(int i=1;i<=n;i++)q.push({i,num[i]}),sum[i]=num[i],h[i]=0;\n\twhile(!q.empty())\n\t{\n\t\tint x=q.top().x;q.pop();\n//\t\tcout<<x<<\" \"<<y<<\" \"<<h[x]<<endl;\n\t\tif(h[x])continue;\n\t\tout2.push_back(x);\n\t\th[x]=1;\n\t\tsum[x]=0;\n\t\tfor(int i=first[x];i;i=net[i])\n\t\t{\n\t\t\tif(h[v[i]])continue;\n\t\t\tfor(int j=first[v[i]];j;j=net[j])\n\t\t\t{\n\t\t\t\tif(h[v[j]])continue;\n\t\t\t\tsum[v[j]]--;\n\t\t\t\tq.push({v[j],sum[v[j]]});\n\t\t\t}\n\t\t\th[v[i]]=1;\n\t\t\tsum[v[i]]=0;\n\t\t}\n\t}\n}\nvoid print()\n{\n\tint maxn=0;\n\tfor(int i=1;i<=n;i++)q.push({i,num[i]}),sum[i]=num[i],h[i]=0;\n\twhile(!q.empty())\n\t{\n\t\tint x=q.top().x,y=q.top().y;q.pop();\n\t\tif(h[x])continue;\n\t\tmaxn=max(maxn,y);\n\t\tif(maxn==ans1)break;\n\t\th[x]=1;\n\t\tsum[x]=0;\n\t\tfor(int i=first[x];i;i=net[i])\n\t\t{\n\t\t\tif(h[v[i]])continue;\n\t\t\tsum[v[i]]--;\n\t\t\tq.push({v[i],sum[v[i]]});\n\t\t}\n\t}\n\twhile(!q.empty())q.pop();\n\tfor(int i=1;i<=n;i++)\n\tif(h[i]==0)out1.push_back(i);\n\tprintf(\"%d \",(int)out1.size());\n\tfor(int i=0;i<(int)out1.size();i++)\n\tprintf(\"%d \",out1[i]);\n\tputs(\"\");\n\tprintf(\"%d \",(int)out2.size());\n\tfor(int i=0;i<(int)out2.size();i++)\n\tprintf(\"%d \",out2[i]);\n\tputs(\"\");\n}\nint main() {\n\t// freopen(\"party1.in\",\"r\",stdin);\n\tint T=read();\n\twhile(T--)\n\t{\n\t\tn=read();m=read();\n//\t\tcerr<<1<<endl;\n\t\tfor(int i=1;i<=m;i++)\n\t\t{\n\t\t\tint u,v;\n\t\t\tu=read();v=read();\n//\t\t\tcout<<u<<\" \"<<v<<endl;\n//\t\t\tif(u>v)swap(u,v);\n//\t\t\tif(mp[u*n+v]==1)continue;\n//\t\t\telse mp[u*n+v]=1;\n\t\t\tadd(u,v);\n\t\t\tadd(v,u);\n\t\t\tnum[u]++;num[v]++;\n\t\t}\n//\t\tcerr<<1<<endl;\n\t\tsolve1();\n\t\tsolve2();\n\t\tprint();\n\t\tfor(int i=1;i<=n;i++)first[i]=num[i]=0;\n\t\tout1.clear();out2.clear(); \n\t\tcnt=ans1=0;\n\t\tmp.clear();\n\t\twhile(!q.empty())q.pop();\n\t } \n\treturn 0;\n}\n/*\n2\n8 11\n1 2\n2 3\n1 4\n3 7\n4 5\n5 2\n2 6\n6 7\n5 6\n5 8\n6 8\n6 15\n1 2\n1 3\n1 4\n1 5\n1 6\n2 3\n2 4\n2 5\n2 6\n3 4\n3 5\n3 6\n4 5\n4 6\n5 6\n*/", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2187398, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 14092, | |
| "memory": 5624, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\nconst int N = 1e4 + 5;\nint T, n, m, deg[N], d[N], P, siz;\nvector<int> e[N], del;\nbool vis[N];\npriority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;\nvoid work(bool op) {\n memcpy(d, deg, sizeof(deg));\n\n for (int i = 1; i <= n; i++)\n q.push(make_pair(d[i], i)), vis[i] = 0;\n\n del.clear();\n\n while (!q.empty()) {\n int u = q.top().second;\n q.pop();\n\n if (!vis[u]) {\n if (d[u] > P)\n P = d[u], siz = del.size();\n\n vis[u] = 1;\n del.push_back(u);\n\n for (int v : e[u]) {\n if (!vis[v]) {\n if (!op)\n q.push(make_pair(--d[v], v));\n else {\n vis[v] = 1;\n\n for (int x : e[v])\n q.push(make_pair(--d[x], x));\n }\n }\n }\n }\n }\n}\n\nvoid solve() {\n P = 0;\n cin >> n >> m;\n for (int i = 1, u, v; i <= m; i++)\n cin >> u >> v, e[u].push_back(v), e[v].push_back(u), deg[u]++, deg[v]++;\n work(0);\n cout << n - siz << \" \";\n for (int i = siz; i < n; i++)\n cout << del[i] << \" \";\n cout << \"\\n\";\n work(1);\n cout << del.size() << \" \";\n for (int x : del)\n cout << x << \" \";\n cout << \"\\n\";\n for (int i = 1; i <= n; i++)\n e[i].clear(), deg[i] = 0;\n}\n\nint main() {\n ios::sync_with_stdio(false);\n\tcin.tie(0);\n cin >> T;\n\n while (T--)\n solve();\n\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2194222, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 3380, | |
| "memory": 10700, | |
| "code": "#include<iostream>\n#include<cstdio>\n#include<vector>\n#include<queue>\n#define N 100000\nusing namespace std;\nconst int inf=(int)(1e9);\nint read()\n{\n\tchar c=0;\n\tint sum=0;\n\twhile (c<'0'||c>'9') c=getchar();\n\twhile ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();\n\treturn sum;\n}\nstruct reads\n{\n\tint num,data;\n\tbool operator < (const reads &t)const\n\t{\n\t\treturn data>t.data;\n\t}\n};\nreads tong[N+1];\npriority_queue<reads>q;\nint T,n,m,rt,maxn,deg[N+1],length,cl[N+1],rk[N+1];\nvector<int>E[N+1];\nvector<int>p[N+1];\nbool used[N+1],vis[N+1];\nvoid add(int x,int y)\n{\n\tE[x].push_back(y),E[y].push_back(x),deg[x]++,deg[y]++;\n\treturn;\n}\nint main()\n{\n\tint x,y,top;\n\tT=read();\n\twhile (T--)\n\t{\n\t\tn=read(),m=read(),length=rt=0,maxn=-inf;\n\t\tfor (int i=1;i<=n;++i) E[i].clear(),p[i].clear(),used[i]=0;\n\t\tfor (int i=1;i<=m;++i) x=read(),y=read(),add(x,y);\n\t\tfor (int i=1;i<=n;++i) q.push((reads){i,deg[i]});\n\t\twhile (!q.empty())\n\t\t{\n\t\t\ttop=q.top().num,q.pop();\n\t\t\tif (used[top]) continue;\n\t\t\tused[top]=1,tong[++length]=(reads){top,deg[top]};\n\t\t\tfor (int i=0;i<E[top].size();++i)\n\t\t\t{\n\t\t\t\tdeg[E[top][i]]--;\n\t\t\t\tif (!used[E[top][i]]) q.push((reads){E[top][i],deg[E[top][i]]});\n\t\t\t}\n\t\t}\n\t\tfor (int i=1;i<=length;++i) rk[tong[i].num]=i;\n\t\tfor (int i=length;i>=1;--i)\n\t\t{\n\t\t\tx=tong[i].num;\n\t\t\tfor (int j=0;j<E[x].size();++j)\n\t\t\t\tif (rk[E[x][j]]>i)\n\t\t\t\t\tvis[cl[E[x][j]]]=1;\n\t\t\tcl[x]=1;\n\t\t\twhile (vis[cl[x]]) cl[x]++;\n\t\t\tfor (int j=0;j<E[x].size();++j)\n\t\t\t\tif (rk[E[x][j]]>i)\n\t\t\t\t\tvis[cl[E[x][j]]]=0;\n\t\t\tp[cl[x]].push_back(x);\n\t\t}\n\t\tfor (int i=1;i<=length;++i)\n\t\t\tif (tong[i].data>maxn)\n\t\t\t\tmaxn=tong[i].data,rt=i;\n\t\tprintf(\"%d \",length-rt+1);\n\t\tfor (int i=rt;i<=length;++i) printf(\"%d \",tong[i].num);\n\t\tputs(\"\"),rt=0,maxn=-inf;\n\t\tfor (int i=1;i<=n;++i)\n\t\t\tif ((int)(p[i].size())>maxn)\n\t\t\t\tmaxn=p[i].size(),rt=i;\n\t\tprintf(\"%d \",maxn);\n\t\tfor (int i=0;i<p[rt].size();++i) printf(\"%d \",p[rt][i]);\n\t\tputs(\"\");\n\t}\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2187118, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 13921, | |
| "memory": 4364, | |
| "code": "#include<bits/stdc++.h>\n#define ll long long\n#define Int __int128\n#define ld double\n#define fi first\n#define se second\n#define PII pair<int,int>\n#define PLI pair<ll,int>\n#define PLL pair<ll,ll>\n#define FF fflush(stdout)\nusing namespace std;\nmt19937 Rand(233);\nconst int N=10005;\nint Q,n,m,deg1[N],deg2[N],mxp;\nbool vis[N];\nvector<int>E[N],ans1,ans2;\nmultiset<PII>Set;\nvoid Solve()\n{\n scanf(\"%d%d\",&n,&m);\n for(int i=1;i<=n;i++)E[i].clear(),deg1[i]=deg2[i]=vis[i]=0;\n Set.clear(),ans1.clear(),ans2.clear();\n for(int i=1,x,y;i<=m;i++)\n {\n scanf(\"%d%d\",&x,&y);\n E[x].push_back(y);\n E[y].push_back(x);\n ++deg1[x],++deg1[y];\n ++deg2[x],++deg2[y];\n }\n for(int i=1;i<=n;i++)Set.insert({deg1[i],i});\n mxp=0;\n while(!Set.empty())\n {\n int x=Set.begin()->se;\n mxp=max(mxp,deg1[x]);\n Set.erase(Set.begin());\n vis[x]=1;\n for(int y:E[x])if(!vis[y])\n {\n Set.erase(Set.find({deg1[y],y}));\n Set.insert({--deg1[y],y});\n }\n }\n for(int i=1;i<=n;i++)Set.insert({deg1[i]=deg2[i],i}),vis[i]=0;\n while(!Set.empty())\n {\n int x=Set.begin()->se;\n if(deg1[x]==mxp)\n {\n for(int i=1;i<=n;i++)if(!vis[i])ans1.push_back(i);\n break;\n }\n Set.erase(Set.begin());\n vis[x]=1;\n for(int y:E[x])if(!vis[y])\n {\n Set.erase(Set.find({deg1[y],y}));\n Set.insert({--deg1[y],y});\n }\n }\n Set.clear();\n for(int i=1;i<=n;i++)Set.insert({deg2[i],i}),vis[i]=0;\n while(!Set.empty())\n {\n int x=Set.begin()->se;\n ans2.push_back(x);\n Set.erase(Set.begin());\n vis[x]=1;\n for(int y:E[x])if(!vis[y])\n {\n Set.erase(Set.find({deg2[y],y}));\n vis[y]=1;\n for(int z:E[y])if(!vis[z])\n {\n Set.erase(Set.find({deg2[z],z}));\n Set.insert({--deg2[z],z});\n }\n }\n }\n printf(\"%d \",ans1.size());\n for(int x:ans1)printf(\"%d \",x);puts(\"\");\n printf(\"%d \",ans2.size());\n for(int x:ans2)printf(\"%d \",x);puts(\"\");\n}\nint main()\n{\n #ifndef ONLINE_JUDGE\n freopen(\".in\",\"r\",stdin);\n freopen(\".out\",\"w\",stdout);\n #endif\n\n scanf(\"%d\",&Q);\n while(Q--)Solve();\n\n\tfprintf(stderr,\"%.15lf\\n\",(ld)clock()/CLOCKS_PER_SEC);\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2199100, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 14587, | |
| "memory": 5208, | |
| "code": "#include <iostream>\n#include <set>\n#include <cstring>\n#include <algorithm>\nusing namespace std;\n\nstruct{char buf[1<<20],*l=buf,*r=l;\noperator char(){return l==r&&(r=(l=buf)+fread(buf,1,1<<20,stdin),l==r)?-1:*l++;}\ntemplate<typename T>operator T(){\n T x=0;char f=0,c;\n do if((c=*this)=='-')f=1;while(c<'0'||c>'9');\n while(c>='0'&&c<='9')x=x*10+(c^48),c=*this;\n return f?-x:x;\n}}in;void out(char c){putchar(c);}\ntemplate<typename T>void out(T x){\n static signed stk[39],tp;\n if(x<0)out('-'),x=-x;\n do stk[tp++]=x%10;while(x/=10);\n while(tp)putchar(stk[--tp]^48);\n}template<typename T,typename...Args>\nvoid out(T x,Args...args){out(x);out(args...);}\n\nconst int N = 10005;\nbasic_string<int> g[N];\nint n,m;\n\nint inn[N];\nint ans[N];\n\nint main(){\n int t = in;\n while(t--){\n n = in,m = in;\n for(int k=1;k<=n;k++)\n g[k].clear();\n for(int k=1;k<=m;k++){\n int a = in,b = in;\n g[a].push_back(b);\n g[b].push_back(a);\n inn[a]++,inn[b]++;\n }\n set<pair<int,int>> s;\n for(int k=1;k<=n;k++)\n s.insert({inn[k],k});\n int p = 0,t = 0;\n for(int k=1;k<=n;k++){\n auto [d,u] = *s.begin();\n ans[k] = u;\n inn[u] = 0;\n s.erase(s.begin());\n if(d>p){\n p = d;\n t = k;\n }\n for(int v:g[u])\n if(inn[v]>0){\n s.erase({inn[v],v});\n s.insert({--inn[v],v});\n }\n }\n out(n-t+1,' ');\n for(int k=t;k<=n;k++)\n out(ans[k],' ');\n out('\\n');\n\n t = 0;\n for(int k=1;k<=n;k++)\n s.insert({inn[k] = g[k].size(),k});\n while(!s.empty()){\n auto [d,u] = *s.begin();\n ans[++t] = u;\n s.erase(s.begin());\n inn[u] = 0;\n for(int v:g[u]){\n if(!inn[v])\n continue;\n s.erase({inn[v],v});\n inn[v] = 0;\n for(int x:g[v])\n if(inn[x]>0){\n s.erase({inn[x],x});\n s.insert({--inn[x],x});\n }\n }\n }\n\n out(t,' ');\n for(int k=1;k<=t;k++)\n out(ans[k],' ');\n out('\\n');\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2162738, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#3113. 「SDOI2019」热闹的聚会与尴尬的聚会", | |
| "time": 11356, | |
| "memory": 20324, | |
| "code": "#include<bits/stdc++.h>\n\nusing namespace std;\n#define int long long\n#define pii pair<int,int> \n#define ps second\n#define pb push_back\n#define pf first\n#define mp make_pair\n#define itn int \n// #define rd read()\ninline int read(){\n int res=0,op=1;\n while(1){\n char c=getchar();\n if(c=='-')op=-1;\n else if(c>='0'&&c<='9')res=res*10+c-'0';\n else break;\n }\n return op*res;\n}\n\n#define cdbg(x) do{cerr<<#x<<\" = \"<<x<<' ';}while(0);\n#define ell cerr<<endl;\n\n\nconst int N=3e5+5;\n\n\n/*\n策略\n首先首先我们肯定要处理一下pq中间的关系,我们发现有一个向下取整让我们横难受,于是我们考虑联立\n[n/p+1][n/q+1]<=pq\nn*n<(p+1)(q+1)\n\n再来考虑两问\n第一问:怎么样构造呢?我们首先将全图加进去,然后把度数最小的的丢掉,更新答案即可。\n\n此时我们就求出了最大的p,那么我们就得到了最\n小的q\n于是我们要在这些人里面取>=q的独立集\n带花树?不可能\n我们考虑贪心地取点。那么肯定是取度数最小的,但是它还是由连边,那么我们就把相邻的点都删掉\n\n\n\n\n*/\n\nint t[N];\nint deg[N];\npriority_queue<pii> pq;\nvector<int> e[N];\n\nvoid add(int a,int b){\n\te[a].pb(b);\n\te[b].pb(a);\n\tdeg[a]++;\n\tdeg[b]++;\n}\n\nbool cmp(int a,int b){\n\treturn t[a]<t[b];\n}\n\n\nint id[N];\nbitset<N> del;\n\n\nvoid solve(){\n\tint n,m;\n\tcin>>n>>m;\n\n\tfor(int i=1;i<=n;i++){\n\t\twhile(e[i].size())e[i].pop_back();\n\t}\n\tmemset(deg,0,sizeof deg);\n\n\tfor(int i=1;i<=m;i++){\n\t\titn a,b;\n\t\tcin>>a>>b;\n\t\tadd(a,b);\t\n\t}\n\n\tdel.reset();\n\tmemcpy(t,deg,sizeof deg);\n\n\tfor(int i=1;i<=n;i++){\n\t\tpq.push(mp(-t[i],i));\n\t}\n\n\tint tot=n;\n\tint mx=0;\n\twhile(pq.size()){\n\t\tpii x=pq.top();\n\t\tpq.pop();\n\t\tif(del[x.ps]||t[x.ps]!=-x.pf)continue;\n\t\tmx=max(mx,t[x.ps]);\n\t\tdel[x.ps]=1;\n\t\tfor(auto v:e[x.ps]){\n\t\t\tif(del[v])continue;\n\t\t\tt[v]--;\n\t\t\tpq.push(mp(-t[v],v));\n\t\t}\n\t}\n\t// cdbg(deg[1]);\n\tmemcpy(t,deg,sizeof deg);\n\t\n\tdel.reset();\n\n\tfor(int i=1;i<=n;i++){\n\t\tpq.push(mp(-t[i],i));\n\t}\n\n\t// cdbg(mx);ell;\n\n\twhile(pq.size()){\n\t\tpii x=pq.top();\n\t\tpq.pop();\n\t\tif(del[x.ps]||t[x.ps]!=-x.pf)continue;\n\t\tif(mx==t[x.ps]){\n\t\t\tcout<<tot<<' ';\n\t\t\tfor(int i=1;i<=n;i++){\n\t\t\t\tif(!del[i])cout<<i<<' ';\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\ttot--;\n\t\tdel[x.ps]=1;\n\t\tfor(auto v:e[x.ps]){\n\t\t\tif(del[v])continue;\n\t\t\tt[v]--;\n\t\t\tpq.push(mp(-t[v],v));\n\t\t}\n\t}\n\n\tcout<<endl;\n\n\twhile(pq.size())\n\t{\n\t\tpq.pop();\n\t}\n\n\tdel.reset();\n\n\tmemcpy(t,deg,sizeof deg);\n\tfor(int i=1;i<=n;i++){\n\t\tid[i]=i; \n\t}\n\n\tsort(id+1,id+n+1,cmp);\n\ttot=0;\n\tfor(int i=1;i<=n;i++){\n\t\tif(del[i])continue;\n\t\ttot++;\n\t\tfor(auto v:e[i]){\n\t\t\tdel[v]=1;\n\t\t}\n\t}\n\n\tcout<<tot<<' ';\n\tfor(int i=1;i<=n;i++){\n\t\tif(!del[i])cout<<i<<' ';\n\t}\n\n\n\tcout<<endl;\n\n\n\n}\nsigned main(){\n int T;\n\tcin>>T;\n while(T--){\n\n solve();\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#6232. 毒瘤题加强版": [ | |
| { | |
| "id": 2233322, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 718, | |
| "memory": 996, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\n//#define endl '\\n'\n#define ll long long\n#define mem(a) memset(a,0, sizeof(a))\n#define db(x) cout<<x<<\"\\n\";\n#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<\" \\n\"[i==n];\n#define rep(i,l,r) for(int i=l;i<=r;i++)\n#define per(i,r,l) for(int i=r;i>=l;i--)\n#define pii pair<int,int>\nconst int N=3e6+5,mod=71161;\nll a[mod+1];\nvoid solve(){\n int n,k;cin>>n>>k;\n vector<ll>b;\n ll x;\n int cnt=0;\n rep(i,1,n){\n cin>>x;\n if(x==0) cnt++;\n a[x%mod]^=x;\n }\n if(cnt&1) b.emplace_back(0);\n rep(i,1,mod-1){\n if(a[i]) b.emplace_back(a[i]);\n }\n sort(b.begin(),b.end());\n for(auto i:b) cout<<i<<\"\\n\";\n //cout<<\"#\"<<(++_)<<\" \"<<endl;\n}\nsigned main()\n{\nstd::ios::sync_with_stdio(false);\ncin.tie(0);\ncout.tie(0);\n // int t;cin>>t;while(t--)\n solve();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233323, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 805, | |
| "memory": 1000, | |
| "code": "#include <bits/stdc++.h>\n#define int long long\n#define endl '\\n'\n#define lowbit(x) (x&(-x))\nusing namespace std;\n\nconst int N=1e6+10;\nconst int INF=9223372036854775807;\nconst int inf=0x3f3f3f3f;\nconst int mod=71161;\ntypedef pair<int,int> PII;\ntypedef pair<double,int> PDI;\ntypedef pair<int,double> PID;\n\nint arr[N];\nint ans[505];\n\nvoid solve() {\n int n, k;\n cin >> n >> k;\n int x;\n for (int i = 1; i <= n; i++) {\n cin >> x;\n arr[x % mod] ^= x;\n }\n int cnt = 0;\n for (int i = 0; i < mod; i++) {\n if (arr[i] != 0 && arr[i] % mod == i) {\n ans[++cnt] = arr[i];\n }\n }\n sort(ans + 1, ans + 1 + k);\n for (int i = 1; i <= k; i++) cout << ans[i] << ' ';\n return;\n}\n\nsigned main() {\n std::ios::sync_with_stdio(false);\n cin.tie(0);\n cout.tie(0);\n int t=1;\n //cin >> t;\n while (t--) {\n solve();\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233324, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 713, | |
| "memory": 1000, | |
| "code": "#include <bits/stdc++.h>\n#define int long long\n#define endl '\\n'\n#define lowbit(x) (x&(-x))\nusing namespace std;\n\nconst int N=2e6+10;\nconst int INF=9223372036854775807;\nconst int inf=0x3f3f3f3f;\nconst int mod=71161;\ntypedef pair<int,int> PII;\ntypedef pair<double,int> PDI;\ntypedef pair<int,double> PID;\n\nint arr[N];\nint ans[505];\n\nvoid solve() {\n int n, k;\n cin >> n >> k;\n int x;\n for (int i = 1; i <= n; i++) {\n cin >> x;\n arr[x % mod] ^= x;\n }\n int cnt = 0;\n for (int i = 0; i < mod; i++) {\n if (arr[i] != 0 && arr[i] % mod == i) {\n ans[++cnt] = arr[i];\n }\n }\n sort(ans + 1, ans + 1 + k);\n for (int i = 1; i <= k; i++) cout << ans[i] << ' ';\n return;\n}\n\nsigned main() {\n std::ios::sync_with_stdio(false);\n cin.tie(0);\n cout.tie(0);\n int t=1;\n //cin >> t;\n while (t--) {\n solve();\n }\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233318, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 718, | |
| "memory": 928, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\n//#define endl '\\n'\n#define ll long long\n#define mem(a) memset(a,0, sizeof(a))\n#define db(x) cout<<x<<\"\\n\";\n#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<\" \\n\"[i==n];\n#define rep(i,l,r) for(int i=l;i<=r;i++)\n#define per(i,r,l) for(int i=r;i>=l;i--)\n#define pii pair<int,int>\nconst int N=3e6+5,mod=70117;\nll a[mod+11];\nvoid solve(){\n int n,k;cin>>n>>k;\n vector<ll>b;\n ll x;\n int cnt=0;\n rep(i,1,n){\n cin>>x;\n if(x==0) cnt++;\n a[x%mod]^=x;\n }\n if(cnt&1) b.emplace_back(0);\n rep(i,1,mod-1){\n if(a[i]) b.emplace_back(a[i]);\n }\n sort(b.begin(),b.end());\n for(auto i:b) cout<<i<<\"\\n\";\n //cout<<\"#\"<<(++_)<<\" \"<<endl;\n}\nsigned main()\n{\nstd::ios::sync_with_stdio(false);\ncin.tie(0);\ncout.tie(0);\n // int t;cin>>t;while(t--)\n solve();\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233237, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 1439, | |
| "memory": 356, | |
| "code": "#include<cstdio>\n#include<bitset>\n#define ll long long\nusing namespace std;\nvoid rd(){}\ntemplate<typename T,typename... U> void rd(T &x,U&... arg){\n\tx=0;int f=1,c=getchar();\n\twhile(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}\n\twhile(c>='0'&&c<='9') x=x*10+c-48,c=getchar();\n\tx*=f;rd(arg...);\n}\nconst int V=4e5+3;\nint N,K,n,pos[505];\nll ans[505];\nbitset<V> a;\nint main(){\n//\tprintf(\"%lf\\n\",(sizeof a)/1048576.0);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tx%=V;\n\t\ta[x]=a[x]^1;\n\t}\n\tfor(int i=0;i<V;i++)\n\t\tif(a[i])\n\t\t\tpos[n++]=i;\n\tfseek(stdin,0,SEEK_SET);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tint j=lower_bound(pos,pos+n,x%V)-pos;\n\t\tans[j]^=x;\n\t}\n\tfor(int i=0;i<K;i++)\n\t\tfor(int j=0;j<K-1;j++)\n\t\t\tif(ans[j]>ans[j+1])\n\t\t\t\tswap(ans[j],ans[j+1]);\n\tfor(int i=0;i<K;i++) printf(\"%lld\\n\",ans[i]);\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233218, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 1489, | |
| "memory": 564, | |
| "code": "#include<cstdio>\n#include<bitset>\n#define ll long long\nusing namespace std;\nvoid rd(){}\ntemplate<typename T,typename... U> void rd(T &x,U&... arg){\n\tx=0;int f=1,c=getchar();\n\twhile(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}\n\twhile(c>='0'&&c<='9') x=x*10+c-48,c=getchar();\n\tx*=f;rd(arg...);\n}\nconst int V=2e6;\nint N,K,n,pos[505];\nll ans[505];\nbitset<V> a;\nint main(){\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tx%=V;\n\t\ta[x]=a[x]^1;\n\t}\n\tfor(int i=0;i<V;i++)\n\t\tif(a[i])\n\t\t\tpos[n++]=i;\n\tfseek(stdin,0,SEEK_SET);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tint j=lower_bound(pos,pos+n,x%V)-pos;\n\t\tans[j]^=x;\n\t}\n\tfor(int i=0;i<K;i++)\n\t\tfor(int j=0;j<K-1;j++)\n\t\t\tif(ans[j]>ans[j+1])\n\t\t\t\tswap(ans[j],ans[j+1]);\n\tfor(int i=0;i<K;i++) printf(\"%lld\\n\",ans[i]);\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233221, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 1698, | |
| "memory": 800, | |
| "code": "#include<cstdio>\n#include<bitset>\n#define ll long long\nusing namespace std;\nvoid rd(){}\ntemplate<typename T,typename... U> void rd(T &x,U&... arg){\n\tx=0;int f=1,c=getchar();\n\twhile(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}\n\twhile(c>='0'&&c<='9') x=x*10+c-48,c=getchar();\n\tx*=f;rd(arg...);\n}\nconst int V=4e6;\nint N,K,n,pos[505];\nll ans[505];\nbitset<V> a;\nint main(){\n//\tprintf(\"%lf\\n\",(sizeof a)/1048576.0);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tx%=V;\n\t\ta[x]=a[x]^1;\n\t}\n\tfor(int i=0;i<V;i++)\n\t\tif(a[i])\n\t\t\tpos[n++]=i;\n\tfseek(stdin,0,SEEK_SET);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tint j=lower_bound(pos,pos+n,x%V)-pos;\n\t\tans[j]^=x;\n\t}\n\tfor(int i=0;i<K;i++)\n\t\tfor(int j=0;j<K-1;j++)\n\t\t\tif(ans[j]>ans[j+1])\n\t\t\t\tswap(ans[j],ans[j+1]);\n\tfor(int i=0;i<K;i++) printf(\"%lld\\n\",ans[i]);\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2233215, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6232. 毒瘤题加强版", | |
| "time": 1444, | |
| "memory": 432, | |
| "code": "#include<cstdio>\n#include<bitset>\n#define ll long long\nusing namespace std;\nvoid rd(){}\ntemplate<typename T,typename... U> void rd(T &x,U&... arg){\n\tx=0;int f=1,c=getchar();\n\twhile(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}\n\twhile(c>='0'&&c<='9') x=x*10+c-48,c=getchar();\n\tx*=f;rd(arg...);\n}\n//bool Mbe;\nconst int V=1e6;\nint N,K,n,pos[505];\nll ans[505];\nbitset<V> a;\n//bool Med;\nint main(){\n//\tprintf(\"%Lf MB\\n\",(&Mbe-&Med)/1048576.L);\n//\tld p=1,V=1e6;\n//\tfor(int i=0;i<500;i++) p*=(V-i)/V;\n//\tprintf(\"p = %Lf\\n\",p);\n//\tfreopen(\"1.in\",\"r\",stdin);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tx%=V;\n\t\ta[x%V]=a[x%V]^1;\n\t}\n\tfor(int i=0;i<V;i++)\n\t\tif(a[i])\n\t\t\tpos[n++]=i;\n\tfseek(stdin,0,SEEK_SET);\n\trd(N,K);\n\tfor(int i=1;i<=N;i++){\n\t\tll x;\n\t\trd(x);\n\t\tint j=lower_bound(pos,pos+n,x%V)-pos;\n\t\tans[j]^=x;\n\t}\n\tfor(int i=0;i<K;i++)\n\t\tfor(int j=0;j<K-1;j++)\n\t\t\tif(ans[j]>ans[j+1])\n\t\t\t\tswap(ans[j],ans[j+1]);\n\tfor(int i=0;i<K;i++) printf(\"%lld\\n\",ans[i]);\n\treturn 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2693. 「POI2012」比赛路线 Tour de Byteotia": [ | |
| { | |
| "id": 2236971, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2236, | |
| "memory": 27980, | |
| "code": "#include<iostream>\n#include<algorithm>\n#include<vector>\nusing namespace std;\nint n,m,k;\nconstexpr int N=1e6+5,M=2e6+5;\nint fa[N],u[M],v[M];\nint find(int x){\n return fa[x]==x?x:fa[x]=find(fa[x]);\n}\nvoid merge(int x,int y){\n int tx=find(x),ty=find(y);\n if(tx!=ty) fa[ty]=tx;\n}\nint main()\n{\n scanf(\"%d%d%d\",&n,&m,&k);\n for(int i=1;i<=n;i++) fa[i]=i;\n for(int i=1;i<=m;i++){\n scanf(\"%d%d\",u+i,v+i);\n if(u[i]>k&&v[i]>k) merge(u[i],v[i]);\n }\n\tint ans=0;\n\tvector<pair<int,int>> otp;\n for(int i=1;i<=m;i++){\n if(u[i]<=k||v[i]<=k){\n int tx=find(u[i]),ty=find(v[i]);\n if(tx==ty) ans++,otp.emplace_back(u[i],v[i]);\n else fa[ty]=tx;\n }\n }\n printf(\"%d\\n\",ans);\n\tfor(auto p:otp){\n\t\tif(p.first>p.second) swap(p.first,p.second);\n\t\tprintf(\"%d %d\\n\",p.first,p.second);\n\t}\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2197930, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2788, | |
| "memory": 27724, | |
| "code": "#include <cstdio>\n#include <utility>\n#include <algorithm>\nusing namespace std;\nconst int N=1000000,M=2000000;\nint n,m,k,fa[N+5];\nint find(int u){return u==fa[u]?u:fa[u]=find(fa[u]);} \npair<int,int>e[M+5],ans[M+5];\nint tot;\nint main(){\n\tscanf(\"%d%d%d\",&n,&m,&k);\n\tfor(int i=1;i<=n;++i)fa[i]=i;\n\tfor(int i=0;i<m;++i){\n\t\tscanf(\"%d%d\",&e[i].first,&e[i].second);\n\t\tif(e[i].first>e[i].second)swap(e[i].first,e[i].second);\n\t}\n\tsort(e,e+m);reverse(e,e+m);\n\tfor(int i=0,u,v;i<m;++i){\n\t\tu=e[i].first;v=e[i].second;\n\t\tif(find(u)!=find(v))fa[find(v)]=find(u);\n\t\telse if(u<=k)ans[tot++]=e[i];\n\t}\n\tprintf(\"%d\\n\",tot);\n\tfor(int i=0;i<tot;++i)printf(\"%d %d\\n\",ans[i].first,ans[i].second);\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2166650, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2259, | |
| "memory": 28028, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n//#define int long long\nconst int maxn=1e6+5;\nconst int inf=0x3f3f3f3f;\nconst int mod=1e9+7;\nint T=1,n,m,k,ans;\nint fa[maxn];\nvector<pair<int,int>>s;\nstruct node\n{\n\tint u,v;\n};\nnode a[maxn<<1];\nint get_fa(int x)\n{\n\treturn fa[x]==x?x:fa[x]=get_fa(fa[x]);\n}\nvoid solve()\n{\n\tscanf(\"%d%d%d\",&n,&m,&k);\n\tfor(int i=1;i<=n;i++){\n\t\tfa[i]=i;\n\t}\n\tfor(int i=1;i<=m;i++){\n\t\tscanf(\"%d%d\",&a[i].u,&a[i].v);\n\t\tif(a[i].u>k&&a[i].v>k){\n\t\t\tint uu=get_fa(a[i].u);\n\t\t\tint vv=get_fa(a[i].v);\n\t\t\tfa[uu]=vv;\n\t\t}\n\t}\n\tfor(int i=1;i<=m;i++){\n\t\tif(a[i].u<=k||a[i].v<=k){\n\t\t\tint uu=get_fa(a[i].u);\n\t\t\tint vv=get_fa(a[i].v);\n\t\t\tif(uu-vv){\n\t\t\t\tfa[uu]=vv;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tans++;\n\t\t\t\ts.push_back({min(a[i].u,a[i].v),max(a[i].u,a[i].v)});\n\t\t\t}\n\t\t}\n\t}\n\tprintf(\"%d\\n\",ans);\n\tfor(int i=0;i<s.size();i++){\n\t\tprintf(\"%d %d\\n\",s[i].first,s[i].second);\n\t}\n}\nsigned main()\n{\n//\tfreopen(\"stone.in\",\"r\",stdin);\n//\tfreopen(\"stone.out\",\"w\",stdout);\n//\tscanf(\"%lld\",&T);\n\twhile(T--){\n\t\tsolve();\n\t}\n\treturn 0;\n}\n//dyyyyds", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2210589, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2123, | |
| "memory": 24076, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\nint fa[1000005],fr[2000005],to[2000005];\nint find(int x){\n\treturn fa[x]==x?x:fa[x]=find(fa[x]);\n}\nvector<int>v;\nint main(){\n\tint n,m,k,aa,bb;\n\tcin>>n>>m>>k;\n\tfor(int i=1;i<=n;i++) fa[i]=i;\n\tfor(int i=1;i<=m;i++) scanf(\"%d%d\",&fr[i],&to[i]);\n\tfor(int i=1;i<=m;i++){\n\t\tif(fr[i]>k&&to[i]>k){\n\t\t\tint xx=find(fr[i]),yy=find(to[i]);\n\t\t\tif(xx!=yy) fa[xx]=yy;\n\t\t}\n\t}\t\n\tfor(int i=1;i<=m;i++){\n\t\tif(fr[i]<=k||to[i]<=k){\n\t\t\tint xx=find(fr[i]),yy=find(to[i]);\n\t\t\tif(xx!=yy) fa[xx]=yy;\n\t\t\telse v.push_back(i);\n\t\t}\n\t}\n\tcout<<v.size()<<endl;\n\tfor(int i=0;i<v.size();i++){\n\t\tif(fr[v[i]]>to[v[i]]) swap(fr[v[i]],to[v[i]]);\n\t\tprintf(\"%d %d\\n\",fr[v[i]],to[v[i]]);\n\t}\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2177327, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 5944, | |
| "memory": 96320, | |
| "code": "// #include <bits/stdc++.h>\n// using namespace std;\n// struct DSU {\n// std::vector<int> fa, siz;\n// DSU(int n) : fa(n + 1), siz(n + 1, 1) {\n// std::iota(fa.begin(), fa.end(), 0);\n// }\n// inline int find(int x) {\n// return fa[x] == x ? x : fa[x] = find(fa[x]);\n// }\n// inline bool same(int x, int y) {\n// return find(x) == find(y);\n// }\n// // true if x and y were not in the same set, false otherwise.\n// inline bool merge(int x, int y) {\n// int fx = find(x), fy = find(y);\n// if (fx == fy) return false;\n// if (siz[fx] < siz[fy]) swap(fx, fy);\n// fa[fy] = fx, siz[fx] += siz[fy], siz[fy] = 0;\n// return true;\n// }\n// // x -> y, a.k.a let x be son of y (disable merge by rank).\n// inline bool directed_merge(int x, int y) {\n// int fx = find(x), fy = find(y);\n// if (fx == fy) return false;\n// fa[fx] = fy, siz[fy] += siz[fx], siz[fx] = 0;\n// return true;\n// }\n// };\n// const int N = 1000010;\n// int n, m, k, ans, u[N], v[N], vis[N];\n// inline void optimizeIO(void) {\n// ios::sync_with_stdio(false);\n// cin.tie(NULL), cout.tie(NULL);\n// }\n// int main(int argc, char const *argv[]) {\n// optimizeIO(), cin >> n >> m >> k;\n// for (int i = 1; i <= m; i++) {\n// cin >> u[i] >> v[i];\n// }\n// DSU D(n);\n// for (int i = 1; i <= m; i++) {\n// if (u[i] > k && v[i] > k) {\n// D.merge(u[i], v[i]);\n// vis[i] = 1, ans++;\n// }\n// }\n// for (int i = 1; i <= m; i++) {\n// if (!vis[i] && !D.same(u[i], v[i])) {\n// D.merge(u[i], v[i]), ans++;\n// }\n// }\n// cout << m - ans << endl;\n// return 0;\n// }\n\n/*************************************************************************\n * *\n * XIX Olimpiada Informatyczna *\n * *\n * Problem: Tour de Bajtocja *\n * Author: Mateusz Baranowski *\n * Time complexity: O(n + m) *\n * Description: Model solution *\n * We determine the connected components of the *\n * subgraph with vertices numbered >k. We contract *\n * them (into vertices) and build a maximum forest *\n * for this graph. *\n * *\n *************************************************************************/\n\n#include <cstdio>\n#include <vector>\nusing namespace std;\n\n#define MAXN 1000001\ntypedef pair<int, int> PII;\n\nvector<int> edges[MAXN]; /* induced subgraph of vertices k+1..n */\nvector<PII> candidates; /* edges with one end having a number <=k */\nvector<bool> used; /* whether a candidate has been used */\nvector<PII> blocked; /* edges that will be blocked */\nint component[MAXN]; /* to which components the vertices (without candidates) belong */\nint component2[MAXN]; /* to which components the vertices (whole graph) belong */\nint n, m, k;\n\nvoid read_data() {\n scanf(\"%d %d %d\", &n, &m, &k);\n for (int i = 1; i <= n; ++i) component[i] = i;\n for (int i = 0; i < m; ++i) {\n int a, b;\n scanf(\"%d %d\", &a, &b);\n if (a > k) {\n edges[a].push_back(b);\n edges[b].push_back(a);\n } else {\n candidates.push_back(make_pair(a, b));\n used.push_back(false);\n }\n }\n}\n\nvoid find_components() {\n vector<int> vertices;\n for (int i = k + 1; i <= n; ++i) {\n vertices.push_back(i);\n while (!vertices.empty()) {\n int v = vertices.back();\n vertices.pop_back();\n while (!edges[v].empty()) {\n int w = edges[v].back();\n edges[v].pop_back();\n if (component[w] != i) {\n component[w] = i;\n vertices.push_back(w);\n }\n }\n }\n }\n}\n\nvoid select_blocked() {\n /* convert the edge list to an adjacency list */\n for (size_t i = 0; i < candidates.size(); ++i) {\n PII p = candidates[i];\n edges[p.first].push_back(i + 1);\n edges[component[p.second]].push_back(-i - 1); /* negative number means reversed edge */\n }\n /* build a forest, remaining edges go to blocked */\n for (int i = 1; i <= n; ++i) component2[i] = i;\n vector<int> vertices;\n for (int i = 1; i <= k; ++i)\n if (component2[i] == i) {\n vertices.push_back(i);\n while (!vertices.empty()) {\n int v = vertices.back();\n vertices.pop_back();\n while (!edges[v].empty()) {\n int x, z = edges[v].back();\n edges[v].pop_back();\n if (z >= 0) /* if negative, reverse the edge */\n x = candidates[--z].second;\n else {\n z = -z - 1;\n x = candidates[z].first;\n }\n if (component2[component[x]] != i) {\n vertices.push_back(component[x]);\n component2[component[x]] = i;\n } else if (!used[z]) blocked.push_back(candidates[z]);\n used[z] = true;\n }\n }\n }\n}\n\nint main() {\n read_data();\n find_components();\n select_blocked();\n /* print the result */\n printf(\"%d\\n\", (int)blocked.size());\n for (size_t i = 0; i < blocked.size(); ++i)\n printf(\"%d %d\\n\", blocked[i].first, blocked[i].second);\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2172148, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2978, | |
| "memory": 56064, | |
| "code": "// Homura Akemi a.k.a. Starrykiller (/user/235125)\n// I love Madoka Kaname forever! \n#include <bits/stdc++.h>\n\nusing namespace std;\ntemplate<typename T>\n_GLIBCXX_ALWAYS_INLINE void chmax(T &a, T b) { a=max(a,b); }\ntemplate<typename T>\n_GLIBCXX_ALWAYS_INLINE void chmin(T &a, T b) { a=min(a,b); }\n#define int long long\n\nstruct dsu {\n vector<int> fa;\n dsu() {}\n dsu(int n) { \n fa.resize(n);\n for (int i=0; i<n; ++i) fa[i]=i;\n }\n int get(int x) { return fa[x]==x?x:fa[x]=get(fa[x]); }\n void merge(int x, int y) { fa[get(x)]=get(y); }\n};\n\nsigned main() {\n ios::sync_with_stdio(false);\n cin.tie(nullptr); cout.tie(nullptr);\n[]{\n int n, m, k; cin>>n>>m>>k;\n vector<pair<int,int>> E(m);\n for (auto &[x,y]: E) cin>>x>>y, --x, --y;\n sort(begin(E),end(E),greater<>());\n vector<pair<int,int>> ans;\n dsu d(n);\n for (auto [x,y]: E) {\n if (x>=k && y>=k) d.merge(x,y);\n else {\n if (d.get(x)==d.get(y)) ans.push_back({x,y});\n d.merge(x,y);\n }\n }\n cout<<size(ans)<<'\\n';\n for (auto [x,y]: ans) {\n if (x>y) swap(x,y);\n ++x; ++y;\n cout<<x<<' '<<y<<'\\n';\n }\n}();\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2076812, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 2142, | |
| "memory": 24156, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\nint fa[1000005], fr[2000005], to[2000005];\nint find(int x) {\n\treturn fa[x] == x ? x : fa[x] = find(fa[x]);\n}\nvector<int>v;\nint main() {\n\tint n, m, k, aa, bb;\n\tcin >> n >> m >> k;\n\t\n\tfor (int i = 1; i <= n; i++)\n\t\tfa[i] = i;\n\t\n\tfor (int i = 1; i <= m; i++)\n\t\tscanf(\"%d%d\", &fr[i], &to[i]);\n\t\n\tfor (int i = 1; i <= m; i++)\n\t\tif (fr[i] > k && to[i] > k) {\n\t\t\tint xx = find(fr[i]), yy = find(to[i]);\n\t\t\t\n\t\t\tif (xx != yy)\n\t\t\t\tfa[xx] = yy;\n\t\t}\n\t\n\tfor (int i = 1; i <= m; i++)\n\t\tif (fr[i] <= k || to[i] <= k) {\n\t\t\tint xx = find(fr[i]), yy = find(to[i]);\n\t\t\t\n\t\t\tif (xx != yy)\n\t\t\t\tfa[xx] = yy;\n\t\t\telse\n\t\t\t\tv.push_back(i);\n\t\t}\n\t\n\tcout << v.size() << endl;\n\t\n\tfor (int i = 0; i < v.size(); i++) {\n\t\tif (fr[v[i]] > to[v[i]])\n\t\t\tswap(fr[v[i]], to[v[i]]);\n\t\t\n\t\tprintf(\"%d %d\\n\", fr[v[i]], to[v[i]]);\n\t}\n\t\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1927896, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2693. 「POI2012」比赛路线 Tour de Byteotia", | |
| "time": 1661, | |
| "memory": 28004, | |
| "code": "#include<iostream>\n#include<cstdio>\n#include<string>\n#include<cstring>\n#include<vector>\n#include<algorithm>\nusing namespace std;\ntypedef long long ll;\nconst int N=1000005;\nconst int M=2000005;\nint n,m,k,u[M],v[M];\nint f[N],fx,fy;\nint ans;\nvector<pair<int,int> > e;\ninline void read(int &x)\n{\n\tint f=1;char c;\n\tfor(x=0,c=getchar();c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;\n\tfor(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48); x*=f;\n}\ninline int mn(int _x,int _y){return _x<_y?_x:_y;}\ninline int mx(int _x,int _y){return _x>_y?_x:_y;}\ninline int ab(int _x){return _x<0?-_x:_x;}\ninline int fd(int x){\n\treturn f[x]==x?x:f[x]=fd(f[x]); \n}\nint main()\n{\n\tread(n);read(m);read(k);\n\tfor(int i=1;i<=n;i++) f[i]=i;\n\tfor(int i=1;i<=m;i++){\n\t\tread(u[i]);read(v[i]);\n\t\tif(u[i]>k&&v[i]>k){\n\t\t\tfx=fd(u[i]);fy=fd(v[i]);\n\t\t\tif(fx!=fy) f[fx]=fy;\n\t\t}\n\t}\n\tfor(int i=1;i<=m;i++){\n\t\tif(u[i]<=k||v[i]<=k){\n\t\t\tfx=fd(u[i]);fy=fd(v[i]);\n\t\t\tif(fx==fy){\n\t\t\t\tif(u[i]>v[i]) swap(u[i],v[i]);\n\t\t\t\t++ans;\n\t\t\t\te.push_back(make_pair(u[i],v[i]));\n\t\t\t}\n\t\t\telse f[fx]=fy;\n\t\t} \n\t}\n\tprintf(\"%d\\n\",ans); \n\tfor(int i=0;i<e.size();i++)\n\t\tprintf(\"%d %d\\n\",e[i].first,e[i].second);\n\treturn 0;\n}\n\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2972. 「COCI 2010.04」RESTORAN": [ | |
| { | |
| "id": 2204604, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 118, | |
| "memory": 14308, | |
| "code": "#include <cstdio>\n#include <algorithm>\n\n#define rep( i, a, b ) for( int i = (a) ; i <= (b) ; i ++ )\n#define per( i, a, b ) for( int i = (a) ; i >= (b) ; i -- )\n\nconst int MAXN = 2e5 + 5;\n\ntemplate<typename _T>\ninline void Read( _T &x ) {\n\tx = 0; char s = getchar(); bool f = false;\n\twhile( ! ( '0' <= s && s <= '9' ) ) { f = s == '-', s = getchar(); }\n\twhile( '0' <= s && s <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( s - '0' ), s = getchar(); }\n\tif( f ) x = -x;\n}\n\ntemplate<typename _T>\ninline void Write( _T x ) {\n\tif( x < 0 ) putchar( '-' ), x = -x;\n\tif( 9 < x ) Write( x / 10 );\n\tputchar( x % 10 + '0' );\n}\n\nstruct Edge {\n\tint to, nxt;\n} Graph[MAXN << 1];\n\nint odd[MAXN], len = 0;\nint tour[MAXN], tot = 0;\n\nbool vis[MAXN];\nint q[MAXN], h, t;\n\nint deg[MAXN];\nint head[MAXN], cur[MAXN], cnt = 1;\nint ans[MAXN]; bool edgVis[MAXN];\n\nint N, M;\n\ninline void AddEdge( const int &from, const int &to ) {\n\tGraph[++ cnt].to = to, Graph[cnt].nxt = head[from];\n\thead[from] = cnt, deg[to] ++;\n}\n\ninline void BFS( const int &s ) {\n\th = 1, t = 0;\n\tvis[q[++ t] = s] = true;\n\twhile( h <= t ) {\n\t\tint u = q[h ++];\n\t\tfor( int i = head[u], v ; i ; i = Graph[i].nxt )\n\t\t\tif( ! vis[v = Graph[i].to] ) vis[q[++ t] = v] = true;\n\t}\n}\n\nvoid DFS( const int &u ) {\n\tfor( int &i = cur[u] ; i ; i = Graph[i].nxt )\n\t\tif( ! edgVis[i >> 1] ) {\n\t\t\tint id = i >> 1;\n\t\t\tedgVis[i >> 1] = true;\n\t\t\tDFS( Graph[i].to );\n\t\t\ttour[++ tot] = id;\n\t\t}\n}\n\nint main() {\n\tRead( N ), Read( M );\n\trep( i, 1, M ) {\n\t\tint u, v; Read( u ), Read( v );\n\t\tAddEdge( u, v ), AddEdge( v, u );\n\t}\n\trep( i, 1, N ) if( ! vis[i] ) {\n\t\tBFS( i ), len = 0;\n\t\tint edgCnt = 0;\n\t\trep( j, 1, t ) {\n\t\t\tedgCnt += deg[q[j]];\n\t\t\tif( deg[q[j]] & 1 ) odd[++ len] = q[j];\n\t\t}\n\t\tedgCnt >>= 1, tot = 0;\n\t\tif( edgCnt == t && edgCnt % 2 && ! len )\n\t\t\treturn puts( \"0\" ), 0;\n\t\tif( ! len ) {\n\t\t\tint s = q[1];\n\t\t\trep( j, 2, t )\n\t\t\t\tif( deg[q[j]] > 2 ) {\n\t\t\t\t\ts = q[j]; break;\n\t\t\t\t}\n\t\t\trep( j, 1, t ) cur[q[j]] = head[q[j]];\n\t\t\tDFS( s );\n\t\t} else {\n\t\t\tfor( int j = 3 ; j + 1 <= len ; j += 2 )\n\t\t\t\tAddEdge( odd[j], odd[j + 1] ),\n\t\t\t\tAddEdge( odd[j + 1], odd[j] );\n\t\t\trep( j, 1, t ) cur[q[j]] = head[q[j]];\n\t\t\tDFS( odd[1] );\n\t\t}\n\t\tstd :: reverse( tour + 1, tour + 1 + tot );\n\t\trep( i, 1, tot ) ans[tour[i]] = ( i - 1 ) % 2 + 1;\n\t}\n\trep( i, 1, M ) Write( ans[i] ), putchar( '\\n' );\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2169615, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 302, | |
| "memory": 20032, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\n#define L(i, j, k) for (int i = (j); i <= (k); ++i)\n#define R(i, j, k) for (int i = (j); i >= (k); --i)\n#define ll long long\n#define vi vector < int >\n#define pb emplace_back\n#define sz(a) ((int) a.size())\n#define pii pair < int, int >\n#define fi first\n#define se second\nint n, m, em;\nvector < pii > e[100005];\nint cnt, co, deg[100005], id[100005], col[200005], vse[200005], vsp[100005];\nint cur[100005];\nvoid DFS(int u) {\n vsp[u] = 1;\n for (int &i = cur[u]; i < sz(e[u]); ) {\n int v = e[u][i].fi, id = e[u][i].se;\n ++i;\n if (vse[id]) continue;\n vse[id] = 1;\n ++cnt;\n DFS(v);\n col[id] = (co = 3 - co);\n }\n}\nint main() {\n // freopen(\"restoran.in\", \"r\", stdin);\n // freopen(\"restoran.out\", \"w\", stdout);\n scanf(\"%d%d\", &n, &m);\n L(i, 1, n) id[i] = i;\n L(i, 1, m) {\n int u, v;\n scanf(\"%d%d\", &u, &v);\n e[u].pb(v, i), e[v].pb(u, i);\n ++deg[u], ++deg[v];\n }\n sort(id + 1, id + n + 1, [&](int x, int y) { return deg[x] > deg[y]; });\n em = m;\n L(i, 1, n) {\n if (deg[i] & 1)\n ++em, e[i].pb(0, em), e[0].pb(i, em);\n id[i] = i;\n }\n co = 1;\n DFS(0);\n L(i, 1, n) {\n if (vsp[id[i]]) continue;\n cnt = 0;\n DFS(id[i]);\n if (cnt % 2 == 1 && deg[id[i]] <= 2) return puts(\"0\"), 0;\n }\n L(i, 1, m) printf(\"%d\\n\", col[i]);\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2169613, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 309, | |
| "memory": 20856, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\n#define L(i, j, k) for (int i = (j); i <= (k); ++i)\n#define R(i, j, k) for (int i = (j); i >= (k); --i)\n#define ll long long\n#define vi vector < int >\n#define pb emplace_back\n#define sz(a) ((int) a.size())\n#define pii pair < int, int >\n#define fi first\n#define se second\nint n, m, em;\nvector < pii > e[100005];\nint cnt, co, deg[100005], id[100005], col[200005], vse[200005], vsp[100005], au[100005], av[100005];\nint cur[100005];\nvoid DFS(int u) {\n vsp[u] = 1;\n for (int &i = cur[u]; i < sz(e[u]); ) {\n int v = e[u][i].fi, id = e[u][i].se;\n ++i;\n if (vse[id]) continue;\n vse[id] = 1;\n ++cnt;\n DFS(v);\n col[id] = (co = 3 - co);\n }\n}\nint buc[100005][3];\nint main() {\n // freopen(\"restoran4.in\", \"r\", stdin);\n // freopen(\"restoran.out\", \"w\", stdout);\n scanf(\"%d%d\", &n, &m);\n L(i, 1, n) id[i] = i;\n L(i, 1, m) {\n scanf(\"%d%d\", &au[i], &av[i]);\n e[au[i]].pb(av[i], i), e[av[i]].pb(au[i], i);\n ++deg[au[i]], ++deg[av[i]];\n }\n sort(id + 1, id + n + 1, [&](int x, int y) { return deg[x] > deg[y]; });\n em = m;\n L(i, 1, n) {\n if (deg[i] & 1)\n ++em, e[i].pb(0, em), e[0].pb(i, em);\n id[i] = i;\n }\n co = 1;\n DFS(0);\n L(i, 1, n) {\n if (vsp[id[i]]) continue;\n cnt = 0;\n DFS(id[i]);\n if (cnt % 2 == 1 && deg[id[i]] <= 2) {\n for (auto j : e[id[i]])\n fprintf(stderr, \"%d %d %d\\n\", i, j.fi, col[j.se]);\n return fprintf(stderr, \"? %d %d %d\\n\", id[i], deg[id[i]], cnt), puts(\"0\"), 0;\n }\n }\n L(i, 1, m) printf(\"%d\\n\", col[i]);\n // L(i, 1, m) buc[au[i]][col[i]] = buc[av[i]][col[i]] = 1;\n // L(i, 1, n)\n // if (deg[i] > 1) {\n // if (!(buc[i][1] && buc[i][2])) {\n // fprintf(stderr, \"? %d %d\\n\", i, deg[i]);\n // L(j, 1, m)\n // if (au[j] == i || av[j] == i)\n // fprintf(stderr, \"%d %d %d\\n\", au[j], av[j], col[j]);\n // return 0;\n // }\n // }\n // L(i, 1, m)\n // if (au[i] == 22969 || av[i] == 22969)\n // fprintf(stderr, \"%d %d %d\\n\", au[i], av[i], col[i]);\n // fprintf(stderr, \"%d %d\\n\", buc[22969][1], buc[22969][2]);\n // L(i, 1, m) printf(\"%d %d %d\\n\", au[i], av[i], col[i]);\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2171371, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 359, | |
| "memory": 15324, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\n#define ll long long\n#define rep(i,a,b) for(int i=(a);i<=(b);i++)\nconst int N=1e5+5;\nint n,m,deg[N];\nbool edge[N*2],ans[N*2];\nstruct Edge{int v,id;};vector<Edge>e[N];\nbool vis[N];vector<int>o;int h[N];\nvoid dfs1(int x){\n if(vis[x])return ;\n vis[x]=1;o.push_back(x);\n for(auto i:e[x]){\n dfs1(i.v);\n }\n}\nvoid dfs2(int x,int col){\n for(int& _i=h[x];_i<e[x].size();_i++){\n Edge i=e[x][_i];\n if(!edge[(i.id+1)/2]){\n edge[(i.id+1)/2]=1;\n col^=1;\n ans[(i.id+1)/2]=col;\n dfs2(i.v,col);\n }\n }\n}\nint main(){\n scanf(\"%d%d\",&n,&m);\n rep(i,1,m){\n int a,b;scanf(\"%d%d\",&a,&b);deg[a]++;deg[b]++;assert(a!=b);\n e[a].push_back({b,i*2-1});e[b].push_back({a,i*2});\n }int tm=m;\n rep(i,1,n){\n if(vis[i])continue;\n o.clear();dfs1(i);\n vector<int>ji;int ok=1;\n for(auto j:o){\n if(deg[j]&1)ji.push_back(j);\n ok&=(deg[j]==2);\n }\n if(ok&&(o.size()&1)){\n printf(\"0\");\n return 0;\n }\n int start=0;\n if(ji.size()){\n for(int _i=2;_i+1<ji.size();_i+=2){\n tm++;\n e[ji[_i]].push_back({ji[_i+1],tm*2-1});e[ji[_i+1]].push_back({ji[_i],tm*2});\n }\n start=ji[0];\n }else{\n start=o[0];\n for(int _i=1;_i<o.size();_i++){\n int v=o[_i];\n if(deg[v]>2){start=v;break;}\n }\n }\n dfs2(start,0);\n }\n rep(i,1,m)printf(\"%d\\n\",(int)ans[i]+1);\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++20", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 2201065, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 177, | |
| "memory": 19808, | |
| "code": "#include <cstdio>\n#include <cstring>\nusing namespace std;\nconst int N=100000,M=600000;\nstruct edge{\n\tint v,p;\n\tbool vis;\n}e[(M<<1)+5];\nint n,m,deg[N+5],h[N+5],tot;\nvoid add(int u,int v){\n\te[tot]={v,h[u],0};\n\th[u]=tot++;\n}\nbool vis[N+5],col[N+5][2];\nint ans[M+5],now=1;\nvoid dfs(int u){\n\tvis[u]=1;\n\tfor(int i=h[u],v;~i;i=e[i].p){\n\t\tv=e[i].v;h[u]=i;\n\t\tif(e[i].vis)continue;\n\t\te[i].vis=e[i^1].vis=1;\n\t\tdfs(v);ans[i>>1]=now;\n\t\tcol[u][now-1]=col[v][now-1]=1;now=3-now;\n\t\ti=h[u];\n\t}\n}\nint main(){\n\t//freopen(\"RESTORAN.in\",\"r\",stdin);\n\t//freopen(\"RESTORAN.out\",\"w\",stdout);\n\tscanf(\"%d%d\",&n,&m);\n\tmemset(h,-1,sizeof h);\n\tfor(int i=0,u,v;i<m;++i){\n\t\tscanf(\"%d%d\",&u,&v);\n\t\tadd(u,v);add(v,u);\n\t\t++deg[u];++deg[v];\n\t}\n\tfor(int i=1;i<=n;++i)\n\t\tif(deg[i]&1){add(0,i);add(i,0);++deg[i];}\n\tdfs(0);\n\tfor(int i=1;i<=n;++i)\n\t\tif(!vis[i]&°[i]>=4)dfs(i);\n\tfor(int i=1;i<=n;++i)\n\t\tif(!vis[i])dfs(i);\n\tfor(int i=1;i<=n;++i)\n\t\tif(deg[i]>1&&!(col[i][0]&&col[i][1])){\n\t\t\tputs(\"0\");\n\t\t\treturn 0;\n\t\t}\n\tfor(int i=0;i<m;++i)printf(\"%d\\n\",ans[i]);\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++14", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1656944, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 142, | |
| "memory": 19384, | |
| "code": "#include <set>\n#include <map>\n#include <cmath>\n#include <queue>\n#include <cstdio>\n#include <cassert>\n#include <cstring>\n#include <iostream>\n#include <algorithm>\n#define pii pair <int , int>\n#define pll pair <LL , LL>\n#define mp make_pair\n#define fs first\n#define sc second\nusing namespace std;\ntypedef long long LL;\n\ntemplate <typename T>\nvoid read(T &x) {\n\tT f=1;x=0;char s=getchar();\n\twhile(s<'0'||s>'9') {if(s=='-') f=-1;s=getchar();}\n\twhile(s>='0'&&s<='9') {x=(x<<3)+(x<<1)+(s^'0');s=getchar();}\n\tx *= f;\n}\n\ntemplate <typename T>\nvoid write(T x , char s='\\n') {\n\tif(!x) {putchar('0');putchar(s);return;}\n\tif(x<0) {putchar('-');x=-x;}\n\tT t = 0 , tmp[25] = {};\n\twhile(x) tmp[t ++] = x % 10 , x /= 10;\n\twhile(t -- > 0) putchar(tmp[t] + '0');\n\tputchar(s);\n}\n\nconst int MAXN = 2e5 + 5;\n\nint head[MAXN] , to[MAXN << 1] , nxt[MAXN << 1] , cnt , edge[MAXN << 1] , tag[MAXN << 1];\ninline void add(int u , int v , int id) {nxt[++cnt] = head[u];head[u] = cnt;to[cnt] = v;edge[cnt] = id;}\nint n , m , deg[MAXN] , ans[MAXN] , t , chk[MAXN][2] , vis[MAXN];\n\nvoid dfs(int x) {\n\tvis[x] = 1;\n\tfor (int i = head[x]; i; i = nxt[i]) {\n\t\thead[x] = i;\n\t\tif(tag[i]) continue;\n\t\ttag[i] = tag[i ^ 1] = 1;\n\t\tdfs(to[i]);\n\t\tchk[x][t] = chk[to[i]][t] = 1;\n\t\tans[edge[i]] = t + 1;\n\t\tt ^= 1;\n\t\ti = head[x];\n\t}\n}\n\nint main() {\n\tread(n),read(m);\n\tcnt = 1;\n\tfor (int i = 1; i <= m; ++i) {\n\t\tint u , v;\n\t\tread(u),read(v);\n\t\tadd(u , v , i) , add(v , u , i);\n\t\tdeg[u] ++ , deg[v] ++;\n\t}\n\tfor (int i = 1; i <= n; ++i) if(deg[i] & 1) {\n\t\tadd(n + 1 , i , 0) , add(i , n + 1 , 0);\n\t}\n\tdfs(n + 1);\n\tfor (int i = 1; i <= n; ++i) if(deg[i] >= 4 && !vis[i]) {\n\t\tdfs(i);\n\t}\n\tfor (int i = 1; i <= n; ++i) if(!vis[i]) dfs(i);\n\tfor (int i = 1; i <= n; ++i) if(deg[i] && chk[i][0] + chk[i][1] != 2) {\n\t\tputs(\"0\");\n\t\treturn 0;\n\t}\n\tfor (int i = 1; i <= m; ++i) write(ans[i]); \n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1656942, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 95, | |
| "memory": 15744, | |
| "code": "#include <cstdio>\n#include <algorithm>\n\n#define rep( i, a, b ) for( int i = (a) ; i <= (b) ; i ++ )\n#define per( i, a, b ) for( int i = (a) ; i >= (b) ; i -- )\n\nconst int MAXN = 2e5 + 5;\n\ntemplate<typename _T>\ninline void Read( _T &x ) {\n\tx = 0; char s = getchar(); bool f = false;\n\twhile( ! ( '0' <= s && s <= '9' ) ) { f = s == '-', s = getchar(); }\n\twhile( '0' <= s && s <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( s - '0' ), s = getchar(); }\n\tif( f ) x = -x;\n}\n\ntemplate<typename _T>\ninline void Write( _T x ) {\n\tif( x < 0 ) putchar( '-' ), x = -x;\n\tif( 9 < x ) Write( x / 10 );\n\tputchar( x % 10 + '0' );\n}\n\nstruct Edge {\n\tint to, nxt;\n} Graph[MAXN << 1];\n\nint odd[MAXN], len = 0;\nint tour[MAXN], tot = 0;\n\nbool vis[MAXN];\nint q[MAXN], h, t;\n\nint deg[MAXN];\nint head[MAXN], cur[MAXN], cnt = 1;\nint ans[MAXN]; bool edgVis[MAXN];\n\nint N, M;\n\ninline void AddEdge( const int &from, const int &to ) {\n\tGraph[++ cnt].to = to, Graph[cnt].nxt = head[from];\n\thead[from] = cnt, deg[to] ++;\n}\n\ninline void BFS( const int &s ) {\n\th = 1, t = 0;\n\tvis[q[++ t] = s] = true;\n\twhile( h <= t ) {\n\t\tint u = q[h ++];\n\t\tfor( int i = head[u], v ; i ; i = Graph[i].nxt )\n\t\t\tif( ! vis[v = Graph[i].to] ) vis[q[++ t] = v] = true;\n\t}\n}\n\nvoid DFS( const int &u ) {\n\tfor( int &i = cur[u] ; i ; i = Graph[i].nxt )\n\t\tif( ! edgVis[i >> 1] ) {\n\t\t\tint id = i >> 1;\n\t\t\tedgVis[i >> 1] = true;\n\t\t\tDFS( Graph[i].to );\n\t\t\ttour[++ tot] = id;\n\t\t}\n}\n\nint main() {\n\t// freopen( \"rest.in\", \"r\", stdin );\n\t// freopen( \"rest.out\", \"w\", stdout );\n\tRead( N ), Read( M );\n\trep( i, 1, M ) {\n\t\tint u, v; Read( u ), Read( v );\n\t\tAddEdge( u, v ), AddEdge( v, u );\n\t}\n\trep( i, 1, N ) if( ! vis[i] ) {\n\t\tBFS( i ), len = 0;\n\t\tint edgCnt = 0;\n\t\trep( j, 1, t ) {\n\t\t\tedgCnt += deg[q[j]];\n\t\t\tif( deg[q[j]] & 1 ) odd[++ len] = q[j];\n\t\t}\n\t\tedgCnt >>= 1, tot = 0;\n\t\tif( edgCnt == t && edgCnt % 2 && ! len )\n\t\t\treturn puts( \"0\" ), 0;\n\t\tif( ! len ) {\n\t\t\tint s = q[1];\n\t\t\trep( j, 2, t )\n\t\t\t\tif( deg[q[j]] > 2 ) {\n\t\t\t\t\ts = q[j]; break;\n\t\t\t\t}\n\t\t\trep( j, 1, t ) cur[q[j]] = head[q[j]];\n\t\t\tDFS( s );\n\t\t} else {\n\t\t\tfor( int j = 3 ; j + 1 <= len ; j += 2 )\n\t\t\t\tAddEdge( odd[j], odd[j + 1] ),\n\t\t\t\tAddEdge( odd[j + 1], odd[j] );\n\t\t\trep( j, 1, t ) cur[q[j]] = head[q[j]];\n\t\t\tDFS( odd[1] );\n\t\t}\n\t\tstd :: reverse( tour + 1, tour + 1 + tot );\n\t\trep( i, 1, tot ) ans[tour[i]] = ( i - 1 ) % 2 + 1;\n\t}\n\trep( i, 1, M ) Write( ans[i] ), putchar( '\\n' );\n\treturn 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1656927, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2972. 「COCI 2010.04」RESTORAN", | |
| "time": 243, | |
| "memory": 19052, | |
| "code": "#include <bits/stdc++.h>\nusing namespace std;\n#define int long long\n#define mp make_pair\n#define inf 1e9\n#define pii pair <int, int>\nconst int mod = 1e9 + 7;\ninline int read () {\n\tint x = 0, f = 1;\n\tchar ch = getchar ();\n\twhile (ch < '0' || ch > '9') f = ((ch == '-') ? -1 : f), ch = getchar ();\n\twhile (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar ();\n\treturn x * f;\n}\ninline void write (int x) {\n\tif (x < 0) x = -x, putchar ('-');\n\tif (x >= 10) write (x / 10);\n\tputchar (x % 10 + '0');\n}\nstruct UnionSet {\n\tint fa[100005];\n\tinline void makeSet(int x) {\n\t\tfor(int i = 1; i <= x; i++) fa[i] = i;\n\t}\n\tint findSet(int x) {\n\t\tif(x == fa[x]) return x;\n\t\treturn fa[x] = findSet(fa[x]);\n\t}\n\tinline void unionSet(int x, int y) {\n\t\tx = findSet(x), y = findSet(y);\n\t\tif(x == y) return ;\n\t\tfa[x] = y;\n\t}\n}U;\nint n, m, fl;\nstruct st {\n\tint v, id;\n\tst() {}\n\tst(int A, int B) {\n\t\tv = A, id = B;\n\t}\n}; \nvector <st> G[100005];\nvector <int> V[100005];\nint vis[100005], ans[100005];\nint S[100005], tot;\nvoid dfs(int x) {\n//\tprintf(\"x:%lld\\n\", x);\n\tvis[x] = ++tot;\n\tfor(auto y : G[x]) {\n\t\tif(vis[y.v]) continue;\n\t\tdfs(y.v);\n\t}\n\tfor(auto y : G[x]) {\n\t\tif(vis[y.v]) {\n\t\t\tif(vis[x] < vis[y.v]) continue;\n\t\t\tif(!(S[x] & 1)) S[y.v] |= 1, S[x] |= 1, ans[y.id] = 0;\n\t\t\telse if(!(S[x] & 2)) S[y.v] |= 2, S[x] |= 2, ans[y.id] = 1;\n\t\t\telse if(!(S[y.v] & 1)) S[y.v] |= 1, S[x] |= 1, ans[y.id] = 0;\n\t\t\telse S[y.v] |= 2, S[x] |= 2, ans[y.id] = 1;\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n/*\n7 10\n7 5\n2 6\n4 2\n2 5\n4 7\n1 5\n1 6\n1 4\n2 3\n3 5\n*/\ninline void solve(int id) {\n\tif((int)V[id].size() == 1) return ;\n\tsrand(time(NULL));\n\tdefault_random_engine e(rand());\n\tint rt = 0;\n\tfor(auto x : V[id]) if((int)G[x].size() == 1) rt = x;\n\tif(!rt) {\n\t\tint wro = 1;\n\t\tfor(auto x : V[id]) wro &= ((int)G[x].size() == 2);\n\t\tif(wro) {\n\t\t\tfl = 1;\n\t\t\treturn ;\n\t\t}\n\t\twhile(1) {\n\t\t\ttot = 0;\n\t\t\tshuffle(V[id].begin(), V[id].end(), e);\n\t\t\tfor(auto x : V[id]) vis[x] = S[x] = 0;\n\t\t\tdfs(V[id][0]);\n//\t\t\tprintf(\"?? %lld\\n\", V[id][0]);\n\t\t\tint tag = 1;\n\t\t\tfor(auto x : V[id]) tag &= (S[x] == 3);\n\t\t\tif(tag) break;\n//\t\t\tprintf(\"??\\n\");\n\t\t}\n\t}\n\telse {\n\t\ttot = 0;\n\t\tdfs(rt);\n\t\t\n\t}\n} \nsigned main () {\n//\tfreopen (\"1.in\", \"r\", stdin);\n//\tfreopen (\".out\", \"w\", stdout);\n\tn = read(), m = read();\n\tU.makeSet(n);\n\tfor(int i = 1; i <= m; i++) {\n\t\tint u = read(), v = read();\n\t\tG[u].push_back(st(v, i));\n\t\tG[v].push_back(st(u, i));\n\t\tU.unionSet(u, v);\n\t}\n\tfor(int i = 1; i <= n; i++) V[U.findSet(i)].push_back(i);\n\tfor(int i = 1; i <= n; i++) if(U.findSet(i) == i) solve(i);\n\tif(fl) return printf(\"0\\n\") & 0;\n\tfor(int i = 1; i <= m; i++) write(ans[i] + 1), putchar('\\n');\n\treturn 0;\n}\n/*\n4 4\n1 2\n2 3\n3 4\n4 2\n*/", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ], | |
| "#2530. 「ZJOI2018」保镖": [ | |
| { | |
| "id": 2143444, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 161, | |
| "memory": 2056, | |
| "code": "// what is matter? never mind. \n//#pragma GCC optimize(\"Ofast\")\n//#pragma GCC optimize(\"unroll-loops\")\n//#pragma GCC target(\"sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2\") \n#include<bits/stdc++.h>\n#define For(i,a,b) for(int i=(a);i<=(b);++i)\n#define Rep(i,a,b) for(int i=(a);i>=(b);--i)\n#define ll long long\n//#define int long long\n#define ull unsigned long long\n#define SZ(x) ((int)((x).size()))\n#define ALL(x) (x).begin(),(x).end()\n//#define double long double\nusing namespace std;\ninline int read()\n{\n char c=getchar();int x=0;bool f=0;\n for(;!isdigit(c);c=getchar())f^=!(c^45);\n for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);\n if(f)x=-x;return x;\n}\n\n#define fi first\n#define se second\n#define pb push_back\n#define mkp make_pair\ntypedef pair<int,int>pii;\ntypedef vector<int>vi;\n\ntypedef double db;\nconst db eps=1e-8,pi=3.14159265358979323846;\nint sgn(db x){return x<-eps?-1:x>eps;}\nint cmp(db a,db b){return sgn(a-b);}\n\nstruct P{\n\tdb x,y;\n\tP(db x=0,db y=0):x(x),y(y){}\n\tP&operator +=(P o){return x+=o.x,y+=o.y,*this;}\n\tP&operator -=(P o){return x-=o.x,y-=o.y,*this;}\n\tP&operator *=(db o){return x*=o,y*=o,*this;}\n\tP&operator /=(db o){return x/=o,y/=o,*this;}\n\tfriend P operator +(P a,P b){return a+=b;}\n\tfriend P operator -(P a,P b){return a-=b;}\n\tfriend P operator *(P a,db b){return a*=b;}\n\tfriend P operator /(P a,db b){return a/=b;}\n\tfriend bool operator <(P a,P b){return fabs(a.x-b.x)<eps?a.y<b.y:a.x<b.x;}\n\tfriend bool operator ==(P a,P b){return cmp(a.x,b.x)==0 && cmp(a.y,b.y)==0;}\n\tfriend db operator %(P a,P b){return a.x*b.x+a.y*b.y;} // dot\n\tfriend db operator *(P a,P b){return a.x*b.y-a.y*b.x;} // cross\n\t\n\tP rot(db o){\n\t\tdb s=sin(o),c=cos(o),xx=x*c-y*s,yy=x*s+y*c;\n\t\tx=xx,y=yy;return *this;\n\t}\n\tP rot90(){swap(x,y),x=-x;return *this;}\n\tdb ang(){return atan2(y,x);}\n\tdb len(){return sqrt(x*x+y*y);}\n\tdb len2(){return x*x+y*y;}\n\t\n\tint half(){return sgn(y)==1||(sgn(y)==0&&sgn(x)>=0);}\n\tP unit(){return ((*this))/len();}\n\t\n\tvoid read(){cin>>x>>y;}\n\tvoid out(){cout<<\"(\"<<x<<\",\"<<y<<\")\"<<endl;}\n};\nbool cmp_dir(P a,P b){\n\tif(a.half()!=b.half())return a.half()<b.half();\n\treturn sgn(a*b)>0;\n}\n\ndb dis(P a,P b){return (a-b).len();}\ndb cross(P a,P b,P c){\n\t// (a->b)*(a->c)\n\treturn (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);\n}\nint cmp3(P a,P b,P c){\n\treturn sgn(cross(a,b,c));\n}\n\nbool in_tri(P a,P b,P c,P p){\n\tif(cmp3(a,b,c)<0) swap(b,c);\n\treturn cmp3(a,b,p)>=0 && cmp3(b,c,p)>=0 && cmp3(c,a,p)>=0;\n}\ndb area_tri(P a,P b,P c){\n\treturn fabs(cross(a,b,c))/2;\n}\n\nbool paral(P p1,P p2,P q1,P q2){\n\t// is parallel\n\treturn sgn((p2-p1)*(q2-q1))==0;\n}\nP interl(P p1,P p2,P q1,P q2){\n\t// intersect point\n\tdb s1=cross(q1,q2,p1),s2=-cross(q1,q2,p2);\n\treturn (p1*s2+p2*s1)/(s1+s2);\n}\n\nbool inter(db l1,db r1,db l2,db r2){\n\tif(l1>r1)swap(l1,r1); if(l2>r2)swap(l2,r2);\n\treturn !(cmp(r1,l2)==-1||cmp(r2,l1)==-1);\n}\nbool ismid(db a,db m,db b){\n\treturn sgn(a-m)==0||sgn(b-m)==0||((a<m)!=(b<m));\n}\nbool ismid(P a,P m,P b){\n\treturn ismid(a.x,m.x,b.x)&&ismid(a.y,m.y,b.y);\n}\n\nbool isseg(P p1,P p2,P q1,P q2){\n\treturn inter(p1.x,p2.x,q1.x,q2.x) && inter(p1.y,p2.y,q1.y,q2.y) &&\n\tcmp3(p1,p2,q1)*cmp3(p1,p2,q2)<=0 && cmp3(q1,q2,p1)*cmp3(q1,q2,p2)<=0;\n}\nbool isseg_strict(P p1,P p2,P q1,P q2){\n\treturn cmp3(p1,p2,q1)*cmp3(p1,p2,q2)<0 && cmp3(q1,q2,p1)*cmp3(q1,q2,p2)<0;\n}\n\nstruct L{\n\tP a,b;\n\tL(P aa,P bb){a=aa,b=bb;}\n\tbool in(P p){return sgn((b-a)*(p-a))>0;}\n\tint in_sgn(P p){return sgn((b-a)*(p-a));}\n\tP dir(){return b-a;}\n\tbool onl(P p){\n\t\treturn cmp3(a,b,p)==0;\n\t}\n\tbool onseg(P p){\n\t\treturn onl(p)&&ismid(a,p,b);\n\t}\n\tbool onseg_strict(P p){\n\t\treturn onl(p)&&sgn((p-a)%(a-b))*sgn((p-b)%(a-b))<0;\n\t}\n\tvoid out(){cout<<\"(\"<<a.x<<\",\"<<a.y<<\")---(\"<<b.x<<\",\"<<b.y<<\")\\n\";}\n};\n\nbool isseg(L a,L b){\n\treturn isseg(a.a,a.b,b.a,b.b);\n}\nbool paral(L a,L b){\n\t// is parallel\n\treturn paral(a.a,a.b,b.a,b.b);\n}\nP operator &(L a,L b){\n\treturn interl(a.a,a.b,b.a,b.b);\n}\nbool samedir(L a,L b){\n\treturn paral(a,b) && sgn(a.dir()%b.dir())==1;\n}\nbool operator <(L a,L b){\n\tif(samedir(a,b)) return b.in(a.a);\n\treturn cmp_dir(a.dir(),b.dir());\n}\n\nP proj(L a,P b){\n\tP d=a.dir();\n\treturn a.a+d*((d%(b-a.a))/d.len2());\n}\nP reflect(L a,P b){\n\treturn proj(a,b)*2-b;\n}\ndb dis(L a,P b){\n\tdb s=abs((b-a.a)*(b-a.b));\n\treturn s/dis(a.a,a.b);\n}\ndb dis_seg(L a,P b){\n\tif(a.a==a.b) return\tdis(a.a,b);\n\tP h=proj(a,b);\n\tif(ismid(a.a,h,a.b)) return dis(h,b);\n\treturn min(dis(a.a,b),dis(a.b,b));\n}\n\ndb rad(P a,P b){\n\treturn atan2l(a*b,a%b);\n}\n\n// polygon\ndb area(vector<P>a){\n\tdb res=0;\n\tFor(i,0,(int)a.size()-1)res+=a[i]*a[(i+1)%a.size()];\n\treturn res/2;\n}\nint contain(vector<P>a,P p){\n\tint n=a.size(),res=0;\n\tFor(i,0,n-1){\n\t\tP u=a[i],v=a[(i+1)%n];\n\t\tif(L(u,v).onseg(p))return 1;\n\t\tif(cmp(u.y,v.y)<=0)swap(u,v);\n\t\tif(cmp(p.y,u.y)>0 || cmp(p.y,v.y)<=0)continue;\n\t\tres^=cmp3(p,u,v)>0;\n\t}\n\treturn res*2;\n}\nvector<P>cut(vector<P>&a,P q1,P q2){\n\tvector<P>b; int n=a.size();\n\tFor(i,0,n-1){\n\t\tP p1=a[i],p2=a[(i+1)%n];\n\t\tint d1=cmp3(q1,q2,p1),d2=cmp3(q1,q2,p2);\n\t\tif(d1>=0)b.pb(p1);\n\t\tif(d1*d2<0)b.pb(interl(p1,p2,q1,q2));\n\t}\n\treturn b;\n}\nvector<P>cut(vector<P>&a,L l){\n\treturn cut(a,l.a,l.b);\n}\n\nvector<P>convex(vector<P>a){\n\tint n=a.size(),m=0; if(n<=1)return a;\n\tsort(a.begin(),a.end());\n\tvector<P>st(n*2); int tp=0;\n\tFor(i,0,n-1){\n\t\twhile(tp>1 && cmp3(st[tp-2],st[tp-1],a[i])<=0)--tp;\n\t\tst[tp++]=a[i];\n\t}\n\tint t=tp;\n\tRep(i,n-2,0){\n\t\twhile(tp>t && cmp3(st[tp-2],st[tp-1],a[i])<=0)--tp;\n\t\tst[tp++]=a[i];\n\t}\n\tst.resize(tp-1);\n\treturn st;\n}\ndb diam(vector<P>a){\n\tint n=a.size();\n\tif(n<=1)return 0;\n\tint ii=0,jj=0;\n\tFor(k,1,n-1){\n\t\tif(a[k]<a[ii])ii=k;\n\t\tif(a[jj]<a[k])jj=k;\n\t}\n\tint i=ii,j=jj;\n\tdb res=dis(a[i],a[j]);\n\tdo{\n\t\tif((a[(i+1)%n]-a[i])*(a[(j+1)%n]-a[j])>=0) (++j)%=n;\n\t\telse (++i)%=n;\n\t\tres=max(res,dis(a[i],a[j]));\n\t}while(i!=ii||j!=jj);\n\treturn res;\n}\n\nbool check(L a,L b,L c){\n\treturn c.in(a&b);\n}\nint checksgn(L a,L b,L c){\n\treturn c.in_sgn(a&b);\n}\nvector<P>hpis(vector<L>&l){\n\tsort(l.begin(),l.end());\n\tdeque<L>q;\n\tFor(i,0,(int)l.size()-1){\n\t\tif(i&&samedir(l[i],l[i-1]))continue;\n\t\twhile(q.size()>1 && !check(q[q.size()-2],q[q.size()-1],l[i]))q.pop_back();\n\t\twhile(q.size()>1 && !check(q[1],q[0],l[i]))q.pop_front();\n\t\tq.pb(l[i]);\n\t}\n\twhile(q.size()>2 && !check(q[q.size()-2],q[q.size()-1],q[0]))q.pop_back();\n\twhile(q.size()>2 && !check(q[1],q[0],q[q.size()-1]))q.pop_front();\n\tvector<P>res;\n\tFor(i,0,(int)q.size()-1) res.pb(q[i]&q[(i+1)%q.size()]);\n\treturn res;\n}\n\nmt19937_64 rnd(64);\n\nvector<L>cut(vector<L>&a,L l){\n\tvector<L>b; int n=a.size();\n\tFor(i,0,n-1){\n\t\tL a1=a[i],a2=a[(i+1)%n],a3=a[(i+2)%n];\n\t\tint d1=checksgn(a1,a2,l),d2=checksgn(a2,a3,l);\n\t\tif(d1>0 || d2>0 || (d1==0&&d2==0)) b.pb(a2);\n\t\tif(d1>=0 && d2<0) b.pb(l);\n\t}\n\treturn b;\n}\n\nL bisector(P a,P b){\n\t// contain a\n\tP o=(a+b)*0.5;\n\treturn L(o,o+((b-a).rot90()));\n}\nvector<vector<L>> voronoi(vector<P>a){\n\tint n=a.size();\n\tvector<P>b=a;\n\tshuffle(b.begin(),b.end(),rnd);\n\tconst db U=1e5;\n\tvector<vector<L>> res(n,{\n\t\tL(P(-U,-U),P(U,-U)),\n\t\tL(P(U,-U),P(U,U)),\n\t\tL(P(U,U),P(-U,U)),\n\t\tL(P(-U,U),P(-U,-U))\n\t});\n\tFor(i,0,n-1){\n\t\tfor(auto x:b){\n\t\t\tif(dis(x,a[i])>eps) res[i]=cut(res[i],bisector(a[i],x));\n\t\t}\n\t}\n\treturn res;\n}\n\n// circles\nstruct cir{\n\tP o; db r;\n\tcir(P oo,db rr){o=oo,r=rr;}\n};\nint type(cir a,cir b){\n\tdb d=dis(a.o,b.o);\n\tif(cmp(d,a.r+b.r)==1)return 4;\n\tif(cmp(d,a.r+b.r)==0)return 3;\n\tif(cmp(d,fabs(a.r-b.r))==1)return 2;\n\tif(cmp(d,fabs(a.r-b.r))==0)return 1;\n\treturn 0;\n}\ncir circumcenter(P a,P b,P c){\n\tP A=b-a,B=c-a;\n\tdb dt=0.5/(A*B),na=A.len2(),nb=B.len2();\n\tP ao=P((na*B.y-nb*A.y)*dt,(nb*A.x-na*B.x)*dt);\n\treturn cir(a+ao,ao.len());\n}\ncir incenter(P a,P b,P c){\n\tdb aa=(b-c).len(),bb=(c-a).len(),cc=(a-b).len();\n\tP p=(a*aa+b*bb+c*cc)/(aa+bb+cc);\n\treturn cir(p,fabs(cross(a,b,c))/(aa+bb+cc));\n}\n// cir&line\nvector<P> operator &(cir a,L b){\n\tif(cmp(abs(((a.o-b.a)*(b.b-b.a))/dis(b.a,b.b)),a.r)>0) return {};\n\tdb x=(b.a-a.o)%(b.b-b.a);\n\tdb y=(b.b-b.a).len2();\n\tdb d=x*x-y*((b.a-a.o).len2()-a.r*a.r);\n\td=max(d,(db)0.0);\n\tP m=b.a-(b.b-b.a)*(x/y);\n\tP dr=(b.b-b.a)*(sqrt(d)/y);\n\treturn {m-dr,m+dr}; //along dir: p1->p2\n}\n// cir&cir\nvector<P> operator &(cir a,cir b){ //need to check whether two circles are the same\n\tdb d=dis(a.o,b.o);\n\tif(cmp(d,a.r+b.r)==1 || cmp(d,abs(a.r-b.r))==-1)return {};\n\td=min(d,a.r+b.r);\n\tdb y=(a.r*a.r+d*d-b.r*b.r)/(d*2),x=sqrt(a.r*a.r-y*y);\n\tP dir=(b.o-a.o).unit();\n\tP q1=(a.o+dir*y),q2=((dir.rot90())*x);\n\treturn {q1-q2,q1+q2};\n}\n\nvector<P> tanCP(cir a,P p){\n\tdb x=(p-a.o).len2(),d=x-a.r*a.r;\n\tif(sgn(d)<=0) return {}; // on circle => no tangent\n\tP q1=a.o+(p-a.o)*(a.r*a.r/x);\n\tP q2=(p-a.o).rot90()*(a.r*sqrt(d)/x);\n\treturn {q1-q2,q1+q2}; //counter clock-wise\n}\n// extanCC, intanCC : -r2, tanCP : r2 = 0\nvector<L> tanCC(cir a,cir b){\n\tP d=b.o-a.o;\n\tdb dr=a.r-b.r;\n\tdb d2=d.len2(), h2=d2-dr*dr;\n\tif (sgn(d2)==0 || sgn(h2)<0) return {};\n\th2=max(0.0,h2);\n\tvector<L>res;\n\tfor(db si:{-1, 1}){\n\t\tP v=(d*dr + d.rot90()*sqrt(h2)*si) / d2;\n\t\tres.pb(L(a.o+v*a.r,b.o+v*b.r));\n\t}\n\tif(sgn(h2)==0)res.pop_back();\n\treturn res;\n}\nvector<L> alltanCC(cir a,cir b){\n\tif(sgn(b.r)==0){\n\t\tvector<L>res;\n\t\tfor(auto t:tanCP(a,b.o)) res.pb(L(b.o,t));\n\t\treturn res;\n\t}\n\tauto res1=tanCC(a,b),res2=tanCC(a,cir(b.o,-b.r));\n\tfor(auto t:res2)res1.pb(t);\n\treturn res1;\n}\n\ndb areaCT(db r,P p1,P p2){\n\tvector<P>is=(cir(P(0,0),r)&(L(p1,p2)));\n\tif(!is.size()) return r*r*rad(p1,p2)/2;\n\tbool b1=(cmp(p1.len2(),r*r)>0), b2=(cmp(p2.len2(),r*r)>0);\n\tif(b1&&b2){\n\t\tif(sgn((p1-is[0])%(p2-is[0]))<=0) \n\t\t\treturn (r*r*(rad(p1,is[0])+rad(is[1],p2))+(is[0]*is[1]))/2;\n\t\treturn r*r*rad(p1,p2)/2;\n\t}\n\tif(b1) return (r*r*rad(p1,is[0])+is[0]*p2)/2;\n\tif(b2) return (p1*is[1]+r*r*rad(is[1],p2))/2;\n\treturn (p1*p2)/2;\n}\n\n// 3D geometry\nstruct P3{\n\tdb x,y,z;\n\tP3(db x=0,db y=0,db z=0):x(x),y(y),z(z){}\n\tP3&operator +=(P3 o){return x+=o.x,y+=o.y,z+=o.z,*this;}\n\tP3&operator -=(P3 o){return x-=o.x,y-=o.y,z-=o.z,*this;}\n\tP3&operator *=(db o){return x*=o,y*=o,z*=o,*this;}\n\tP3&operator /=(db o){return x/=o,y/=o,z/=o,*this;}\n\tfriend P3 operator +(P3 a,P3 b){return a+=b;}\n\tfriend P3 operator -(P3 a,P3 b){return a-=b;}\n\tfriend P3 operator *(P3 a,db b){return a*=b;}\n\tfriend P3 operator /(P3 a,db b){return a/=b;}\n\tfriend bool operator <(P3 a,P3 b){\n\t\tif(fabs(a.x-b.x)>=eps)return a.x<b.x;\n\t\tif(fabs(a.y-b.y)>=eps)return a.y<b.y;\n\t\treturn a.z<b.z;\n\t}\n\tfriend bool operator ==(P3 a,P3 b){return cmp(a.x,b.x)==0 && cmp(a.y,b.y)==0 && cmp(a.z,b.z)==0;}\n\t\n\tfriend db operator %(P3 a,P3 b){return a.x*b.x+a.y*b.y+a.z*b.z;}\n\tfriend P3 operator *(P3 a,P3 b){return P3(a.y*b.z-a.z*b.y,a.z*b.x-a.x*b.z,a.x*b.y-a.y*b.x);}\n\t\n\tdb len2(){return x*x+y*y+z*z;}\n\tdb len(){return sqrt(len2());}\n\tP3 unit(){return (*this)/len();}\n\t\n\tvoid read(){cin>>x>>y>>z;}\n\tvoid out(){cout<<\"(\"<<x<<\",\"<<y<<\",\"<<z<<\")\\n\";}\n};\nP to2(P3 p){\n\treturn P(p.x,p.y);\n}\n\ndb rnddb(){return 1.0*rnd()/ULLONG_MAX;}\nP3 rndp3(db e){return P3(e*(rnddb()-0.5),e*(rnddb()-0.5),e*(rnddb()-0.5));}\nvoid shake(P3&p,db t=eps*10){p+=rndp3(t);}\n\ndb dis(P3 a,P3 b){return (a-b).len();}\nP3 cross(P3 a,P3 b,P3 c){\n\treturn (b-a)*(c-a);\n}\ndb volume(P3 a,P3 b,P3 c,P3 d){\n\treturn ((b-a)*(c-a))%(d-a);\n}\nint above(P3 a,P3 b,P3 c,P3 d){\n\treturn sgn(volume(a,b,c,d));\n}\n\nstruct plane{\n\tP3 a[3];\n\tplane(P3 x,P3 y,P3 z){a[0]=x,a[1]=y,a[2]=z;}\n\tP3 &operator [](int x){return a[x];}\n\tP3 norm(){\n\t\treturn (a[1]-a[0])*(a[2]-a[0]);\n\t}\n\tbool above(P3 p){\n\t\treturn sgn(volume(a[0],a[1],a[2],p))>0;\n\t}\n};\n\ndb disLP(P3 p1,P3 p2,P3 q){\n\treturn ((p2-p1)*(q-p1)).len()/(p2-p1).len();\n}\ndb disLL(P3 p1,P3 p2,P3 q1,P3 q2){\n\tP3 o=(p2-p1)*(q2-q1);\n\tif(o.len()<=eps)return disLP(p1,p2,q1);\n\treturn fabs(o.unit()%(p1-p2));\n}\n\nvector<plane>convex3d(vector<P3>p){\n\tauto pp=p;\n\tfor(auto&x:p) shake(x);\n\tint n=p.size();\n\tFor(i,0,n-1) if(p[i]<p[0]) swap(p[0],p[i]),swap(pp[0],pp[i]);\n\tFor(i,2,n-1) if((p[i].x-p[0].x)*(p[1].y-p[0].y)>(p[i].y-p[0].y)*(p[1].x-p[0].x)) swap(p[1],p[i]),swap(pp[1],pp[i]);\n\tvector<plane>res;\n\tset<pii>eg;\n\tfunction<void(int,int)> wrap=[&](int a,int b){\n\t\tif(eg.count(mkp(a,b)))return;\n\t\tint c=-1;\n\t\tFor(i,0,n-1) if(i!=a && i!=b) \n\t\t\tif(c==-1 || volume(p[c],p[a],p[b],p[i])>0) c=i;\n\t\tif(c==-1) return;\n\t\tres.pb(plane(pp[a],pp[b],pp[c]));\n\t\teg.insert(mkp(a,b)),eg.insert(mkp(b,c)),eg.insert(mkp(c,a));\n\t\twrap(c,b),wrap(a,c);\n\t};\n\twrap(0,1);\n\treturn res;\n}\n\n#define maxn 200005\n#define inf 0x3f3f3f3f\n\nint n;\nvector<P>r;\nvector<P3>a;\n\ndb solve(cir t){\n\tdb res=0;\n\tFor(i,0,3) res+=areaCT(t.r,r[i]-t.o,r[(i+1)%4]-t.o);\n\treturn res;\n}\n\nsigned main()\n{\n\tn=read();\n\tr.resize(4);\n\tr[0].read(),r[2].read();\n\tr[1]=P(r[2].x,r[0].y),r[3]=P(r[0].x,r[2].y);\n\t\n\tdb S=(r[2].x-r[0].x)*(r[2].y-r[0].y),res=0;\n\ta.resize(n);\n\tFor(i,0,n-1) {\n\t\tcin>>a[i].x>>a[i].y;\n\t\ta[i].z=a[i].x*a[i].x+a[i].y*a[i].y;\n\t}\n\tauto b=convex3d(a);\n\tfor(auto t:b){\n\t\tP u=to2(t[0]),v=to2(t[1]),w=to2(t[2]);\n\t//\tt[0].out(),t[1].out(),t[2].out();\n\t\tif(cmp3(u,v,w)==0){\n\t\t\tP o=to2(t.norm());\n\t\t\to.rot90();\n\t\t\tres+=area(cut(r,u,u-o));\n\t\t}else{\n\t\t\tcir o=circumcenter(u,v,w);\n\t\t\tdb ar=solve(o);\n\t\t//\to.o.out(); cout<<\"r2 \"<<o.r*o.r<<\"\\n\";\n\t\t//\tcout<<\"ar \"<<ar<<\"\\n\";\n\t\t\tif(sgn(t.norm().z)>=0) ar=S-ar;\n\t\t//\tcout<<\"arr \"<<ar<<\"\\n\";\n\t\t\tres+=ar;\n\t\t}\n\t}\n//\tcout<<\"res \"<<res<<\"\\n\";\n\tres=res/S+2.0;\n\tprintf(\"%.12lf\\n\",res);\n\treturn 0;\n}\n/*\n\n*/", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1251685, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 1432, | |
| "memory": 800, | |
| "code": "#include<bits/stdc++.h>\n#include<vector>\n#define mp make_pair\n#define fi first\n#define se second\n#define pb push_back\n#define y1 y114514\nusing namespace std;\nusing db = long double;\n\nmt19937 eng(time(0));\nint randDb(db a, db b) {\n uniform_real_distribution<db> dis(a, b);\n return dis(eng);\n}\n\nconst db eps = 1e-9;\nconst db pi = acos(-1);\nconst db sc = 1e8;\n\ndb cot(db x) {\n return tan(pi / 2 - x);\n}\n\n// 1: k > 0\n// 0: k = 0\n// -1: k < 0\nint sgn(db k) {\n if (k > eps) return 1; \n else if (k < -eps) return -1; \n return 0;\n}\n\n// 1: k1 > k2\n// 0: k1 = k2\n// -1: k1 < k2\nint cmp(db k1, db k2) {\n return sgn(k1-k2);\n}\n// k3 在 [k1,k2] 内 \nint inmid(db k1,db k2,db k3){return sgn(k1-k3)*sgn(k2-k3)<=0;}\nstruct point{\n db x,y;\n point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}\n point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}\n point operator * (db k1) const{return (point){x*k1,y*k1};}\n point operator / (db k1) const{return (point){x/k1,y/k1};}\n int operator == (const point &k1) const{return cmp(x,k1.x)==0&&cmp(y,k1.y)==0;}\n // 逆时针旋转 \n point turn(db k1){return (point){x*cos(k1)-y*sin(k1),x*sin(k1)+y*cos(k1)};}\n // 返回逆时针旋转90°后的向量\n point rotleft() { return (point){-y,x}; }\n bool operator < (const point k1) const{\n int a=cmp(x,k1.x);\n if (a==-1) return 1; else if (a==1) return 0; else return cmp(y,k1.y)==-1;\n }\n db abs(){return sqrt(x*x+y*y);}\n db abs2(){return x*x+y*y;}\n db dis(point k1){return ((*this)-k1).abs();}\n point unit(){db w=abs(); return (point){x/w,y/w};}\n void scan(){\n double k1, k2; scanf(\"%lf%lf\", &k1, &k2);\n x=k1; y=k2;\n //x += randDb(-1e4, 1e4) * eps, y += randDb(-1e4, 1e4) * eps;\n }\n void print(){printf(\"%.11lf %.11lf\\n\",x,y);}\n db getw(){return atan2(y,x);} \n point getdel(){if (sgn(x)==-1||(sgn(x)==0&&sgn(y)==-1)) return (*this)*(-1); else return (*this);}\n\tint getP() const{return sgn(y)==1||(sgn(y)==0&&sgn(x)==-1);}\n point trans(point o) {\n point k = (*this) - o;\n assert(sgn(k.abs2()) > 0);\n return o + k * (sc / k.abs2());\n }\n};\nint inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);}\ndb cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}\ndb dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}\n\n// check 直线 (k1, k2) 和 (k3, k4),不共线返回1,共线返回0\nint checkLL(point k1,point k2,point k3,point k4){\n return cmp(cross(k3-k1,k4-k1),cross(k3-k2,k4-k2))!=0;\n}\n\npoint getLL(point k1,point k2,point k3,point k4){\n db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3); return (k1*w2+k2*w1)/(w1+w2);\n}\npoint proj(point k1,point k2,point q){ // q 到直线 k1,k2 的投影 \n point k=k2-k1; return k1+k*(dot(q-k1,k)/k.abs2());\n}\n\n\n// 求 k1 -> k2 的有向角\ndb rad(point k1,point k2) {\n return atan2(cross(k1,k2),dot(k1,k2));\n}\n\ndb disSP(point k1,point k2,point q){\n point k3=proj(k1,k2,q);\n if (inmid(k1,k2,k3)) return q.dis(k3); \n else return min(q.dis(k1),q.dis(k2));\n}\n\nstruct circle{\n point o; db r;\n void scan(){o.scan(); scanf(\"%lf\",&r);}\n int inside(point k){return cmp(r,o.dis(k));}\n};\n\nvector<point> getCL(circle k1,point k2,point k3){ // 沿着 k2->k3 方向给出 , 相切给出两个 \n point k=proj(k2,k3,k1.o); db d=k1.r*k1.r-(k-k1.o).abs2();\n if (sgn(d)==-1) return {};\n point del=(k3-k2).unit()*sqrt(max((db)0.0,d)); return {k-del,k+del};\n}\n\n// 圆 k1 与三角形 k2 k3 k1.o 的有向面积交\ndb getarea(circle k1, point k2, point k3) {\n point k = k1.o; \n k1.o = k1.o-k; k2 = k2-k; k3 = k3-k;\n int pd1 = k1.inside(k2), pd2 = k1.inside(k3); \n vector<point> A = getCL(k1, k2, k3);\n if (pd1 >= 0) {\n if (pd2 >= 0) return cross(k2, k3) / 2;\n assert(A.size() == 2);\n return k1.r * k1.r * rad(A[1], k3) / 2 + cross(k2, A[1]) / 2;\n } else if (pd2 >= 0) { \n assert(A.size() == 2);\n return k1.r * k1.r * rad(k2, A[0]) / 2 + cross(A[0], k3) / 2;\n } else {\n int pd = cmp(k1.r, disSP(k2, k3, k1.o));\n if (pd <= 0) return k1.r * k1.r * rad(k2, k3) / 2;\n assert(A.size() == 2);\n return cross(A[0], A[1]) / 2 + k1.r * k1.r * (rad(k2, A[0]) + rad(A[1], k3)) / 2;\n }\n}\n\n// k1 k2 k3 逆时针 1 顺时针 -1 否则 0 \nint clockwise(point k1,point k2,point k3){\n return sgn(cross(k2-k1,k3-k1));\n}\n\n// 保留 k1,k2,p 逆时针的所有点\nvector<point> convexcut(vector<point>A,point k1,point k2){\n int n = A.size(); A.push_back(A[0]); vector<point> ans;\n for (int i=0;i<n;i++){\n int w1=clockwise(k1,k2,A[i]),w2=clockwise(k1,k2,A[i+1]);\n if (w1>=0) ans.push_back(A[i]);\n if (w1*w2<0) ans.push_back(getLL(k1,k2,A[i],A[i+1]));\n }\n return ans;\n}\n\n// 求逆时针凸包, flag=0 不严格 flag=1 严格, 保证无两点重合\nvector<point> ConvexHull(vector<point>A,int flag=1) { \n int n=A.size(); vector<point>ans(n*2); \n sort(A.begin(),A.end()); int now=-1;\n for (int i = 0; i < A.size(); i++) {\n while (now>0 && sgn(cross(ans[now]-ans[now-1],A[i]-ans[now-1]))<flag) now--;\n ans[++now]=A[i];\n } int pre=now;\n for (int i = n - 2; i >= 0; i--) {\n while (now>pre && sgn(cross(ans[now]-ans[now-1],A[i]-ans[now-1]))<flag) now--;\n ans[++now]=A[i];\n } ans.resize(now); return ans;\n}\n\n// 多边形与圆面积交\ndb getarea(vector<point> A, circle c) {\n int n = A.size(); \n if(n <= 2) return 0.0;\n A.push_back(A[0]);\n db res = 0.0;\n for(int i = 0; i < n; i++) {\n point k1 = A[i], k2 = A[i+1];\n res += getarea(c, k1, k2);\n }\n //printf(\"%.15f\\n\", fabs(res));\n return fabs(res);\n}\n\n// 多边形面积,注意是否有向\ndb area(const vector<point>& A){\n db ans=0;\n for (int i=0;i<A.size();i++) ans+=cross(A[i],A[(i+1)%A.size()]);\n return fabs(ans)/2;\n}\n\nvector<point> rec(4);\nvector<point> down;\nvector<point> up;\n\npair<db, db> twoarea(point a, point b, point vec) {\n point m1 = ((a + b) * 0.5);\n point m2 = m1 + (b - a).rotleft();\n point h = a + vec.rotleft();\n if(!checkLL(a, h, m1, m2)) {\n if(sgn(dot(vec, b - a)) >= 0)\n return pair<db, db>{area(down), 0.0};\n else \n return pair<db, db>{0.0, area(up)};\n } else {\n point o = getLL(a, h, m1, m2);\n db r = o.dis(a);\n circle c = (circle){o, r};\n db dS = getarea(down, c);\n db uS = getarea(up, c);\n return pair<db, db>{dS, uS};\n }\n}\n//\ndb calc(point a, point b, point l, point r) {\n assert(sgn(cross(b - a, l)) >= 0 && sgn(cross(b - a, r)) >= 0);\n assert(sgn(cross(l, r)) >= 0);\n up = convexcut(rec, a, b);\n down = convexcut(rec, b, a);\n pair<db, db> lp = twoarea(a, b, l);\n pair<db, db> rp = twoarea(a, b, r);\n return fabs(lp.fi - rp.fi) + fabs(rp.se - lp.se); \n}\n\n// 求 b 相对于 a 坐标系的半平面\n// 0: [-pi, 0)\n// 1: [0, pi)\nint hp(point a, point b) {\n db y = cross(a, b), x = dot(a, b);\n return sgn(y) > 0 || (sgn(y) == 0 && sgn(x) > 0);\n}\n\n\ndb gao(vector<point> a, point o) {\n assert((int) a.size() >= 2);\n int n = a.size();\n db sum = 0.0; // 面积和\n for(int i = 0; i < n; i++) {\n int pre = (i + n - 1); if(pre >= n) pre -= n;\n int suc = (i + 1); if(suc >= n) suc -= n;\n point cur = a[i].trans(o);\n point lvec = a[i] - a[pre], rvec = a[suc] - a[i];\n int lhp = hp(cur - o, lvec);\n int rhp = hp(cur - o, rvec);\n\n if(lhp <= rhp) {\n if(lhp < rhp) {\n sum += calc(o, cur, (point){0.0, 0.0} - lvec, o - cur);\n sum += calc(o, cur, cur - o, rvec);\n } else {\n if(lhp == 0)\n sum += calc(o, cur, (point){0.0, 0.0} - lvec, (point){0.0, 0.0} - rvec);\n else \n sum += calc(o, cur, lvec, rvec);\n }\n } else { // lhp == 1, rhp == 0\n sum += calc(o, cur, lvec, o - cur);\n sum += calc(o, cur, cur - o, (point){0.0, 0.0} - rvec);\n }\n }\n return sum;\n}\n\nint main() {\n int n;\n scanf(\"%d\", &n);\n double x1, y1, x2, y2; scanf(\"%lf%lf%lf%lf\",&x1,&y1,&x2,&y2);\n rec[0] = (point){x1, y1}; rec[1] = (point){x2, y1};\n rec[2] = (point){x2, y2}; rec[3] = (point){x1, y2};\n vector<point> A(n);\n for(int i = 0; i < n; i++) A[i].scan();\n double ans = 0.0;\n for(int i = 0; i < n; i++) {\n vector<point> vec;\n point o = A[i];\n for(int j = 0; j < n; j++) {\n if(j == i) continue;\n vec.push_back(A[j].trans(o));\n }\n ans += gao(ConvexHull(vec, 1), o);\n }\n ans /= 2;\n ans /= (fabs(x2 - x1) * fabs(y2 - y1));\n printf(\"%.15f\\n\", ans);\n //db nan = 1.0 / 0.0;\n //printf(\"%.15f\\n\", atan2(nan * 2.0, 0));\n}\n\n\n\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1251684, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 692, | |
| "memory": 596, | |
| "code": "#include<bits/stdc++.h>\n#include<vector>\n#define mp make_pair\n#define fi first\n#define se second\n#define pb push_back\n#define y1 y114514\nusing namespace std;\nusing db = double;\n\nconst db eps = 1e-5;\nconst db pi = acos(-1);\nconst db sc = 1e8;\n\ndb cot(db x) {\n return tan(pi / 2 - x);\n}\n\n// 1: k > 0\n// 0: k = 0\n// -1: k < 0\nint sgn(db k) {\n if (k > eps) return 1; \n else if (k < -eps) return -1; \n return 0;\n}\n\n// 1: k1 > k2\n// 0: k1 = k2\n// -1: k1 < k2\nint cmp(db k1, db k2) {\n return sgn(k1-k2);\n}\n// k3 在 [k1,k2] 内 \nint inmid(db k1,db k2,db k3){return sgn(k1-k3)*sgn(k2-k3)<=0;}\nstruct point{\n db x,y;\n point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}\n point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}\n point operator * (db k1) const{return (point){x*k1,y*k1};}\n point operator / (db k1) const{return (point){x/k1,y/k1};}\n int operator == (const point &k1) const{return cmp(x,k1.x)==0&&cmp(y,k1.y)==0;}\n // 逆时针旋转 \n point turn(db k1){return (point){x*cos(k1)-y*sin(k1),x*sin(k1)+y*cos(k1)};}\n // 返回逆时针旋转90°后的向量\n point rotleft() { return (point){-y,x}; }\n bool operator < (const point k1) const{\n int a=cmp(x,k1.x);\n if (a==-1) return 1; else if (a==1) return 0; else return cmp(y,k1.y)==-1;\n }\n db abs(){return sqrt(x*x+y*y);}\n db abs2(){return x*x+y*y;}\n db dis(point k1){return ((*this)-k1).abs();}\n point unit(){db w=abs(); return (point){x/w,y/w};}\n void scan(){double k1,k2; scanf(\"%lf%lf\",&k1,&k2); x=k1; y=k2;}\n void print(){printf(\"%.11lf %.11lf\\n\",x,y);}\n db getw(){return atan2(y,x);} \n point getdel(){if (sgn(x)==-1||(sgn(x)==0&&sgn(y)==-1)) return (*this)*(-1); else return (*this);}\n\tint getP() const{return sgn(y)==1||(sgn(y)==0&&sgn(x)==-1);}\n point trans(point o) {\n point k = (*this) - o;\n assert(sgn(k.abs2()) > 0);\n return o + k * (sc / k.abs2());\n }\n};\nint inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);}\ndb cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}\ndb dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}\n\n// check 直线 (k1, k2) 和 (k3, k4),不共线返回1,共线返回0\nint checkLL(point k1,point k2,point k3,point k4){\n return cmp(cross(k3-k1,k4-k1),cross(k3-k2,k4-k2))!=0;\n}\n\npoint getLL(point k1,point k2,point k3,point k4){\n db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3); return (k1*w2+k2*w1)/(w1+w2);\n}\npoint proj(point k1,point k2,point q){ // q 到直线 k1,k2 的投影 \n point k=k2-k1; return k1+k*(dot(q-k1,k)/k.abs2());\n}\n\n\n// 求 k1 -> k2 的有向角\ndb rad(point k1,point k2) {\n return atan2(cross(k1,k2),dot(k1,k2));\n}\n\ndb disSP(point k1,point k2,point q){\n point k3=proj(k1,k2,q);\n if (inmid(k1,k2,k3)) return q.dis(k3); \n else return min(q.dis(k1),q.dis(k2));\n}\n\nstruct circle{\n point o; db r;\n void scan(){o.scan(); scanf(\"%lf\",&r);}\n int inside(point k){return cmp(r,o.dis(k));}\n};\n\nvector<point> getCL(circle k1,point k2,point k3){ // 沿着 k2->k3 方向给出 , 相切给出两个 \n point k=proj(k2,k3,k1.o); db d=k1.r*k1.r-(k-k1.o).abs2();\n if (sgn(d)==-1) return {};\n point del=(k3-k2).unit()*sqrt(max((db)0.0,d)); return {k-del,k+del};\n}\n\n// 圆 k1 与三角形 k2 k3 k1.o 的有向面积交\ndb getarea(circle k1, point k2, point k3) {\n point k = k1.o; \n k1.o = k1.o-k; k2 = k2-k; k3 = k3-k;\n int pd1 = k1.inside(k2), pd2 = k1.inside(k3); \n vector<point> A = getCL(k1, k2, k3);\n if (pd1 >= 0) {\n if (pd2 >= 0) return cross(k2, k3) / 2;\n assert(A.size() == 2);\n return k1.r * k1.r * rad(A[1], k3) / 2 + cross(k2, A[1]) / 2;\n } else if (pd2 >= 0) { \n assert(A.size() == 2);\n return k1.r * k1.r * rad(k2, A[0]) / 2 + cross(A[0], k3) / 2;\n } else {\n int pd = cmp(k1.r, disSP(k2, k3, k1.o));\n if (pd <= 0) return k1.r * k1.r * rad(k2, k3) / 2;\n assert(A.size() == 2);\n return cross(A[0], A[1]) / 2 + k1.r * k1.r * (rad(k2, A[0]) + rad(A[1], k3)) / 2;\n }\n}\n\n// k1 k2 k3 逆时针 1 顺时针 -1 否则 0 \nint clockwise(point k1,point k2,point k3){\n return sgn(cross(k2-k1,k3-k1));\n}\n\n// 保留 k1,k2,p 逆时针的所有点\nvector<point> convexcut(vector<point>A,point k1,point k2){\n int n = A.size(); A.push_back(A[0]); vector<point> ans;\n for (int i=0;i<n;i++){\n int w1=clockwise(k1,k2,A[i]),w2=clockwise(k1,k2,A[i+1]);\n if (w1>=0) ans.push_back(A[i]);\n if (w1*w2<0) ans.push_back(getLL(k1,k2,A[i],A[i+1]));\n }\n return ans;\n}\n\n// 求逆时针凸包, flag=0 不严格 flag=1 严格, 保证无两点重合\nvector<point> ConvexHull(vector<point>A,int flag=1) { \n int n=A.size(); vector<point>ans(n*2); \n sort(A.begin(),A.end()); int now=-1;\n for (int i = 0; i < A.size(); i++) {\n while (now>0 && sgn(cross(ans[now]-ans[now-1],A[i]-ans[now-1]))<flag) now--;\n ans[++now]=A[i];\n } int pre=now;\n for (int i = n - 2; i >= 0; i--) {\n while (now>pre && sgn(cross(ans[now]-ans[now-1],A[i]-ans[now-1]))<flag) now--;\n ans[++now]=A[i];\n } ans.resize(now); return ans;\n}\n\n// 多边形与圆面积交\ndb getarea(vector<point> A, circle c) {\n int n = A.size(); \n if(n <= 2) return 0.0;\n A.push_back(A[0]);\n db res = 0.0;\n for(int i = 0; i < n; i++) {\n point k1 = A[i], k2 = A[i+1];\n res += getarea(c, k1, k2);\n }\n //printf(\"%.15f\\n\", fabs(res));\n return fabs(res);\n}\n\n// 多边形面积,注意是否有向\ndb area(const vector<point>& A){\n db ans=0;\n for (int i=0;i<A.size();i++) ans+=cross(A[i],A[(i+1)%A.size()]);\n return fabs(ans)/2;\n}\n\nvector<point> rec(4);\nvector<point> down;\nvector<point> up;\n\npair<db, db> twoarea(point a, point b, point vec) {\n point m1 = ((a + b) * 0.5);\n point m2 = m1 + (b - a).rotleft();\n point h = a + vec.rotleft();\n if(!checkLL(a, h, m1, m2)) {\n if(sgn(dot(vec, b - a)) >= 0)\n return pair<db, db>{area(down), 0.0};\n else \n return pair<db, db>{0.0, area(up)};\n } else {\n point o = getLL(a, h, m1, m2);\n db r = o.dis(a);\n circle c = (circle){o, r};\n db dS = getarea(down, c);\n db uS = getarea(up, c);\n return pair<db, db>{dS, uS};\n }\n}\n//\ndb calc(point a, point b, point l, point r) {\n assert(sgn(cross(b - a, l)) >= 0 && sgn(cross(b - a, r)) >= 0);\n assert(sgn(cross(l, r)) >= 0);\n up = convexcut(rec, a, b);\n down = convexcut(rec, b, a);\n pair<db, db> lp = twoarea(a, b, l);\n pair<db, db> rp = twoarea(a, b, r);\n return fabs(lp.fi - rp.fi) + fabs(rp.se - lp.se); \n}\n\n// 求 b 相对于 a 坐标系的半平面\n// 0: [-pi, 0)\n// 1: [0, pi)\nint hp(point a, point b) {\n db y = cross(a, b), x = dot(a, b);\n return sgn(y) > 0 || (sgn(y) == 0 && sgn(x) > 0);\n}\n\n\ndb gao(vector<point> a, point o) {\n assert((int) a.size() >= 2);\n int n = a.size();\n db sum = 0.0; // 面积和\n for(int i = 0; i < n; i++) {\n int pre = (i + n - 1); if(pre >= n) pre -= n;\n int suc = (i + 1); if(suc >= n) suc -= n;\n point cur = a[i].trans(o);\n point lvec = a[i] - a[pre], rvec = a[suc] - a[i];\n int lhp = hp(cur - o, lvec);\n int rhp = hp(cur - o, rvec);\n\n if(lhp <= rhp) {\n if(lhp < rhp) {\n sum += calc(o, cur, (point){0.0, 0.0} - lvec, o - cur);\n sum += calc(o, cur, cur - o, rvec);\n } else {\n if(lhp == 0)\n sum += calc(o, cur, (point){0.0, 0.0} - lvec, (point){0.0, 0.0} - rvec);\n else \n sum += calc(o, cur, lvec, rvec);\n }\n } else { // lhp == 1, rhp == 0\n sum += calc(o, cur, lvec, o - cur);\n sum += calc(o, cur, cur - o, (point){0.0, 0.0} - rvec);\n }\n }\n return sum;\n}\n\nint main() {\n int n;\n scanf(\"%d\", &n);\n double x1, y1, x2, y2; scanf(\"%lf%lf%lf%lf\",&x1,&y1,&x2,&y2);\n rec[0] = (point){x1, y1}; rec[1] = (point){x2, y1};\n rec[2] = (point){x2, y2}; rec[3] = (point){x1, y2};\n vector<point> A(n);\n for(int i = 0; i < n; i++) A[i].scan();\n double ans = 0.0;\n for(int i = 0; i < n; i++) {\n vector<point> vec;\n point o = A[i];\n for(int j = 0; j < n; j++) {\n if(j == i) continue;\n vec.push_back(A[j].trans(o));\n }\n ans += gao(ConvexHull(vec, 1), o);\n }\n ans /= 2;\n ans /= (fabs(x2 - x1) * fabs(y2 - y1));\n printf(\"%.15f\\n\", ans);\n //db nan = 1.0 / 0.0;\n //printf(\"%.15f\\n\", atan2(nan * 2.0, 0));\n}\n\n\n\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1066289, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 311, | |
| "memory": 4732, | |
| "code": "#include <bits/stdc++.h>\n#define mp std::make_pair\n#define pb push_back\n#define fi first\n#define se second\n#define gc getchar\n#define pc putchar\n#define ep emplace\n#define eb emplace_back\n#define ctz __builtin_ctz\ntypedef unsigned char u8;\ntypedef unsigned short u16;\ntypedef unsigned int u32;\ntypedef long long ll;\ntypedef long double ld;\ntypedef unsigned long long ull;\ntypedef std::pair <int, int> pii;\ntypedef std::pair <int, ll> pil;\ntypedef std::pair <ll, int> pli;\ntypedef std::pair <ll, ll> pll;\n\nconst int max_N = 2049;\nconst ld eps = 1e-11;\nint n;\nld ans;\n\nint read() {\n\tchar c = gc(); int ans = 0; bool flag = true;\n\twhile (!isdigit(c)) flag &= (c != '-'), c = gc();\n\twhile (isdigit(c)) ans = ans * 10 + c - '0', c = gc();\n\treturn flag ? ans : -ans;\n}\n\nbool le(ld x, ld y) {return x <= y + eps;}\nbool ge(ld x, ld y) {return x >= y - eps;}\nbool lt(ld x, ld y) {return x < y - eps;}\nbool gt(ld x, ld y) {return x > y + eps;}\nbool eq(ld x, ld y) {return le(x, y) && ge(x, y);}\nld sqr(ld x) {return x * x;}\n\nstruct vec2 {\n\tld x, y;\n\tvec2 (ld x_ = 0, ld y_ = 0) : x(x_), y(y_) {}\n\tvec2 &read() {scanf(\"%Lf%Lf\", &x, &y); return *this;}\n\tvec2 operator - () const {return vec2(-x, -y);}\n\tvec2 operator + (const vec2 &b) const {return vec2(x + b.x, y + b.y);}\n\tvec2 operator - (const vec2 &b) const {return vec2(x - b.x, y - b.y);}\n\tvec2 operator * (const ld &b) const {return vec2(x * b, y * b);}\n\tvec2 operator / (const ld &b) const {return *this * (1.0 / b);}\n\tld operator * (const vec2 &b) const {return x * b.x + y * b.y;}\n\tld operator ^ (const vec2 &b) const {return x * b.y - y * b.x;}\n\tld norm2() {return sqr(x) + sqr(y);}\n\tld norm() {return sqrtl(sqr(x) + sqr(y));}\n\tbool operator < (const vec2 &b) const {\n\t\treturn lt(x, b.x) ? true : (gt(x, b.x) ? false : lt(y, b.y));\n\t}\n\tbool operator == (const vec2 &b) const {\n\t\treturn eq(x, b.x) && eq(y, b.y);\n\t}\n\tbool operator << (const vec2 &b) const {\n\t\tif (lt(y, 0) != lt(b.y, 0)) return lt(y, 0); ld cross = *this ^ b;\n\t\treturn gt(cross, 0) || (ge(cross, 0) && gt(x, 0) && lt(b.x, 0));\n\t}\n\tld angle() {return atan2(y, x);}\n\tvec2 trans(ld A, ld B, ld C, ld D) {return vec2(A * x + B * y, C * x + D * y);}\n}P[max_N];\n\nstruct line {\n\tld A, B, C;\n\tline (ld A_ = 0, ld B_ = 0, ld C_ = 0) : A(A_), B(B_), C(C_) {}\n\tline (const vec2 &u, const vec2 &v) : A(u.y - v.y), B(v.x - u.x), C(u ^ v) {}\n\tvec2 normVec() {return vec2(A, B);}\n\tld norm2() {return sqr(A) + sqr(B);}\n\tld norm() {return sqrtl(sqr(A) + sqr(B));}\n\tld operator () (const vec2 &b) const {return A * b.x + B * b.y + C;}\n};\n\nld angle(vec2 A, vec2 B) {return atan2(A ^ B, A * B);}\nint collinear(vec2 A, vec2 B, vec2 C) {\n\treturn eq((A - C) ^ (B - C), 0) ? le((A - C) * (B - C), 0) + 1 : 0;\n}\nvec2 intersection(line u, line v) {\n\treturn vec2(u.B * v.C - u.C * v.B, u.C * v.A - u.A * v.C) / (u.A * v.B - u.B * v.A);\n}\nbool parallel(line u, line v) {return eq(u.normVec() ^ v.normVec(), 0);}\nbool perpendicular(line u, line v) {return eq(u.normVec() * v.normVec(), 0);}\nbool sameDir(line u, line v) {return parallel(u, v) && gt(u.normVec() * v.normVec(), 0);}\nline bisector(vec2 u, vec2 v) {return line(v.x - u.x, v.y - u.y, 0.5 * (u.norm2() - v.norm2()));}\nld dist(vec2 u, vec2 v) {return (u - v).norm();}\nld dist2(vec2 u, vec2 v) {return (u - v).norm2();}\nld dist(vec2 u, line v) {return v(u) / v.norm();}\nld dist2(vec2 u, line v) {return sqr(v(u)) / v.norm2();}\nvec2 projection(vec2 u, line v) {return u - v.normVec() * (v(u) / v.norm2());}\nvec2 symmetry(vec2 u, line v) {return u - v.normVec() * (2 * v(u) / v.norm2());}\n\nstd::vector <vec2> intersection(vec2 O, ld r2, line l) {\n\tld d2 = dist2(O, l);\n\tif (gt(d2, r2)) return std::vector <vec2> {};\n\tif (eq(d2, r2)) return std::vector <vec2> {projection(O, l)};\n\tif (eq(d2, 0)) {\n\t\tvec2 dir = l.normVec() * sqrtl(r2 / l.norm2());\n\t\treturn std::vector <vec2> {O + dir.trans(0, -1, 1, 0), O + dir.trans(0, 1, -1, 0)};\n\t}\n\telse {\n\t\tld T = copysign(sqrtl(r2 / d2 - 1), l(O));\n\t\tvec2 dir = -l.normVec() * (l(O) / l.norm2());\n\t\treturn std::vector <vec2> {O + dir.trans(1, T, -T, 1), O + dir.trans(1, -T, T, 1)};\n\t}\n}\nld interArea(ld r2, vec2 A, vec2 B) {\n\tif (eq(A ^ B, 0)) return 0;\n\tstd::vector <vec2> vec = intersection(vec2(), r2, line(A, B));\n\tif (vec.empty()) return 0.5 * r2 * angle(A, B);\n\tif (vec.size() == 1) vec.pb(vec[0]);\n\tswitch (gt(A.norm2(), r2) * 2 + gt(B.norm2(), r2)) {\n\t\tcase 0 : return 0.5 * (A ^ B);\n\t\tcase 1 : return 0.5 * ((A ^ vec[1]) + r2 * angle(vec[1], B));\n\t\tcase 2 : return 0.5 * ((vec[0] ^ B) + r2 * angle(A, vec[0]));\n\t\tcase 3 : {\n\t\t\tif (lt((A - vec[0]) * (B - vec[0]), 0))\n\t\t\t\treturn 0.5 * (r2 * (angle(A, vec[0]) + angle(vec[1], B)) + (vec[0] ^ vec[1]));\n\t\t\telse return 0.5 * r2 * angle(A, B);\n\t\t}\n\t}\n}\nld interArea(vec2 O, ld r2, std::vector <vec2> poly) {\n\tld ans = interArea(r2, poly.back() - O, poly.front() - O);\n\tfor (int i = 1; i < poly.size(); i++)\n\t\tans += interArea(r2, poly[i - 1] - O, poly[i] - O);\n\treturn ans;\n}\nld area(std::vector <vec2> poly) {\n\tld ans = poly.back() ^ poly.front();\n\tfor (int i = 1; i < poly.size(); i++) ans += poly[i - 1] ^ poly[i];\n\treturn ans / 2;\n}\nld convCutArea(std::vector <vec2> poly, line l) {\n\tstd::vector <vec2> vec; vec.reserve(poly.size());\n\tfor (int i = 0, j = poly.size() - 1; i < poly.size(); j = i++) {\n\t\tif (ge(l(poly[j]), 0)) vec.pb(poly[j]);\n\t\tif (lt(l(poly[i]) * l(poly[j]), 0))\n\t\t\tvec.pb(intersection(line(poly[i], poly[j]), l));\n\t}\n\treturn vec.empty() ? 0 : area(vec);\n}\nvec2 circumCenter(vec2 A, vec2 B, vec2 C) {\n\tvec2 a = B - A, b = C - A; ld na = a.norm2(), nb = b.norm2();\n\treturn A + vec2(na * b.y - nb * a.y, nb * a.x - na * b.x) * (0.5 / (a ^ b));\n}\n\nstruct vec3 {\n\tld x, y, z;\n\tvec3 (ld x_ = 0, ld y_ = 0, ld z_ = 0) : x(x_), y(y_), z(z_) {}\n\tvec3 &read() {scanf(\"%Lf%Lf%Lf\", &x, &y, &z); return *this;}\n\tvec3 operator - () const {return vec3(-x, -y, -z);}\n\tvec3 operator + (const vec3 &b) const {return vec3(x + b.x, y + b.y, z + b.z);}\n\tvec3 operator - (const vec3 &b) const {return vec3(x - b.x, y - b.y, z - b.z);}\n\tvec3 operator * (const ld &b) const {return vec3(x * b, y * b, z * b);}\n\tvec3 operator / (const ld &b) const {return *this * (1.0 / b);}\n\tld operator * (const vec3 &b) const {return x * b.x + y * b.y + z * b.z;}\n\tvec3 operator ^ (const vec3 &b) const {return vec3(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);}\n\tld norm2() {return sqr(x) + sqr(y) + sqr(z);}\n\tld norm() {return sqrtl(sqr(x) + sqr(y) + sqr(z));}\n\tbool operator < (const vec3 &b) const {\n\t\tif (lt(x, b.x)) return true; if (lt(b.x, x)) return false;\n\t\tif (lt(y, b.y)) return true; if (lt(b.y, y)) return false;\n\t\treturn lt(z, b.z);\n\t}\n\tbool operator == (const vec3 &b) const {\n\t\treturn eq(x, b.x) && eq(y, b.y) && eq(z, b.z);\n\t}\n};\n\nld triple(vec3 A, vec3 B, vec3 C) {return A * (B ^ C);}\nld volume(vec3 A, vec3 B, vec3 C, vec3 D) {return triple(B - A, C - A, D - A);}\n\nnamespace CH3D {\n\tconst int max_N = 2049;\n\tint n, cntF, cntG;\n\tvec3 P[max_N];\n\tbool vis[max_N][max_N];\n\tvec3 rand_vec3() {\n\t\treturn vec3((ld)rand() / RAND_MAX, (ld)rand() / RAND_MAX, (ld)rand() / RAND_MAX);\n\t}\n\tstruct triangle {\n\t\tint v[3];\n\t\ttriangle (int v0 = 0, int v1 = 0, int v2 = 0) {\n\t\t\tv[0] = v0, v[1] = v1, v[2] = v2;\n\t\t}\n\t\tvec3 normVec() {return (P[v[1]] - P[v[0]]) ^ (P[v[2]] - P[v[0]]);}\n\t\tld area() {return normVec().norm() / 2;}\n\t}F[max_N * 2], G[max_N * 2];\n\tbool see(triangle A, vec3 B) {return ge(((B - P[A.v[0]]) * A.normVec()), 0);}\n\tvoid solve() {\n\t\tF[1] = triangle(1, 2, 3), F[2] = triangle(3, 2, 1), cntF = 2;\n\t\tfor (int i = 1; i <= n; i++) P[i] = P[i] + rand_vec3() * 1e-8;\n\t\tfor (int i = 4; i <= n; i++) {\n\t\t\tcntG = 0;\n\t\t\tfor (int j = 1, tmp; j <= cntF; j++) {\n\t\t\t\tif (!(tmp = see(F[j], P[i]))) G[++cntG] = F[j];\n\t\t\t\tfor (int k = 0; k < 3; k++)\n\t\t\t\t\tvis[F[j].v[k]][F[j].v[(k + 1) % 3]] = tmp;\n\t\t\t}\n\t\t\tfor (int j = 1; j <= cntF; j++) for (int k = 0; k < 3; k++)\n\t\t\t\tif (vis[F[j].v[k]][F[j].v[(k + 1) % 3]] && !vis[F[j].v[(k + 1) % 3]][F[j].v[k]])\n\t\t\t\t\tG[++cntG] = triangle(F[j].v[k], F[j].v[(k + 1) % 3], i);\n\t\t\tcntF = cntG; std::copy(G + 1, G + cntG + 1, F + 1);\n\t\t}\n\t}\n}\n\nvec2 planarize(vec3 A) {return vec2(A.x, A.y);}\n\nint main() {\n\tn = read(); std::vector <vec2> vec(4);\n\tvec[0].x = vec[3].x = read(), vec[0].y = vec[1].y = read();\n\tvec[1].x = vec[2].x = read(), vec[2].y = vec[3].y = read();\n\tld all = (vec[2].x - vec[0].x) * (vec[2].y - vec[0].y);\n\tfor (int i = 1; i <= n; i++) P[i].x = read(), P[i].y = read();\n\tfor (int i = 1; i <= n; i++)\n\t\tCH3D::P[i] = vec3(P[i].x, P[i].y, sqr(P[i].x) + sqr(P[i].y));\n\tCH3D::n = n, CH3D::solve();\n\tfor (int i = 1; i <= n; i++)\n\t\tCH3D::P[i] = vec3(P[i].x, P[i].y, sqr(P[i].x) + sqr(P[i].y)); \n\tfor (int i = 1; i <= CH3D::cntF; i++) {\n\t\tvec2 A = P[CH3D::F[i].v[0]], B = P[CH3D::F[i].v[1]], C = P[CH3D::F[i].v[2]];\n\t\tif (collinear(A, B, C)) {\n\t\t\tvec2 tmp = planarize(CH3D::F[i].normVec());\n\t\t\tans += convCutArea(vec, line(tmp.x, tmp.y, -(tmp * A)));\n\t\t}\n\t\telse {\n\t\t\tvec2 O = circumCenter(A, B, C);\n\t\t\tif (gt(CH3D::F[i].normVec().z, 0))\n\t\t\t\tans += all - interArea(O, (A - O).norm2(), vec);\n\t\t\telse ans += interArea(O, (A - O).norm2(), vec);\n\t\t}\n\t}\n\treturn printf(\"%.15Lf\", ans / all + 2), 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 954985, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 3576, | |
| "memory": 6524, | |
| "code": "#pragma GCC optimize(3)\r\n#pragma GCC optimize(\"inline\")\r\n#include<bits/stdc++.h>\r\n#define db __float128\r\n#define N 100005\r\n#define rep(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)\r\nconst db eps=1e-10;\r\ninline db _reps(){return rand()/(db)RAND_MAX;}\r\ninline db reps(){int ty=rand()&1?1:-1; return _reps()*eps*ty;}\r\ninline int eq(const db&p){return p<-eps?-1:p>eps;}\r\ninline int eq(const db&x,const db&y){return eq(x-y);}\r\n#define v2 point\r\nstruct point{\r\n\tdb x,y;\r\n\tinline point operator+(const point&p)const{return point{x+p.x,y+p.y};}\r\n\tinline point operator-(const point&p)const{return point{x-p.x,y-p.y};}\r\n\tinline point operator*(const db&p)const{return point{x*p,y*p};}\r\n\tinline point operator/(const db&p)const{return point{x/p,y/p};}\r\n\t// multiply cross\r\n\tinline db operator^(const point&p)const{return x*p.y-y*p.x;}\r\n\t// point multiply\r\n\tinline db operator&(const point&p)const{return x*p.x+y*p.y;}\r\n\tinline db norm2(){return x*x+y*y;}\r\n\tinline db norm(){return sqrt(norm2());}\r\n\tinline void inv(){std::swap(x,y); x=-x;}\r\n} rec[4];\r\nint n,cnt;\r\nbool vis[2005][2005];\r\nstruct vector{\r\n\tdb x,y,z;\r\n\tinline vector operator+(const vector&p)const{return vector{x+p.x,y+p.y,z+p.z};}\r\n\tinline vector operator-(const vector&p)const{return vector{x-p.x,y-p.y,z-p.z};}\r\n\tinline vector operator^(const vector&p)const{return vector{y*p.z-z*p.y,z*p.x-x*p.z,x*p.y-y*p.x};}\r\n\tinline db operator&(const vector&p)const{return x*p.x+y*p.y+z*p.z;}\r\n\tinline void rnd(){x+=reps(),y+=reps(),z+=reps();}\r\n} poi[N];\r\n\r\ninline point intersection(point a1,point a2,point b1,point b2){\r\n\tpoint a=a2-a1,b=b2-b1,c=b1-a1;\r\n\treturn a1+(a*((b^c)/(b^a)));\r\n}\r\n\r\nstruct plane{\r\n\tint id[3];\r\n\tinline plane(int x=0,int y=0,int z=0){id[0]=x,id[1]=y,id[2]=z;}\r\n\tinline vector norm(){return (poi[id[1]]-poi[id[0]])^(poi[id[2]]-poi[id[0]]);}\r\n} f[N],cpy[N];\r\n\r\ninline bool isplane(plane x,vector y){return ((y-poi[x.id[0]])&x.norm())>0;}\r\ninline db angle(point x,point y){return atan2(x^y,x&y);}\r\ninline db calc(point x,point y,db r){\r\n\tpoint p=(x-y)/(x-y).norm();\r\n\tpoint q=p; p.inv();\r\n\tpoint mid=intersection(x,y,point{0,0},p);\r\n\tif(mid.norm()>r) return r*r*angle(x,y)/2;\r\n\tdb d=sqrt(r*r-mid.norm2());\r\n\tpoint w1=mid+(q*d),w2=mid-(q*d);\r\n\tint b1=eq(x.norm2(),r*r)==1,b2=eq(y.norm2(),r*r)==1;\r\n\tif(b1&&b2){\r\n\t\tif(eq((x-w1)&(y-w1))<=0)\r\n\t\t\treturn r*r*(angle(x,w1)+angle(w2,y))/2+(w1^w2)/2;\r\n\t\treturn r*r*angle(x,y)/2;\r\n\t}\r\n\tif(b1) return (r*r*angle(x,w1)+(w1^y))/2;\r\n\tif(b2) return (r*r*angle(w2,y)+(x^w2))/2;\r\n\treturn (x^y)/2;\r\n}\r\ninline db merge(point o,db r){\r\n\tdb ret=0;\r\n\trep(i,0,3) ret+=calc(rec[i]-o,rec[i+1&3]-o,r);\r\n\treturn ret;\r\n}\r\nvoid convex_hull(){\r\n\tf[++cnt]=plane(1,2,3),f[++cnt]=plane(3,2,1);\r\n\trep(i,4,n){\r\n\t\tint num=0;\r\n\t\trep(j,1,cnt){\r\n\t\t\tint ty=isplane(f[j],poi[i]);\r\n\t\t\tif(!ty) cpy[++num]=f[j];\r\n\t\t\trep(k,0,2) vis[f[j].id[k]][f[j].id[(k+1)%3]]=ty;\r\n\t\t}\r\n\t\trep(j,1,cnt){\r\n\t\t\trep(k,0,2){\r\n\t\t\t\tint x=f[j].id[k],y=f[j].id[(k+1)%3];\r\n\t\t\t\tif(vis[x][y]&&!vis[y][x]) cpy[++num]=plane(x,y,i);\r\n\t\t\t}\r\n\t\t}\r\n\t\trep(j,1,num) f[j]=cpy[j]; cnt=num,num=0;\r\n\t}\r\n}\r\nint main(){\r\n\tsrand(19260817);\r\n\tstd::cin>>n;\r\n\tdouble stx,sty,edx,edy;\r\n\tstd::cin>>stx>>sty>>edx>>edy;\r\n\trec[0]={stx,sty},rec[1]={edx,sty},rec[2]={edx,edy},rec[3]={stx,edy};\r\n\tdb area=0,ret=0;\r\n\tarea=(edx-stx)*(edy-sty);\r\n\trep(i,1,n){\r\n\t\tdouble x,y; std::cin>>x>>y;\r\n\t\tpoi[i]=vector{x,y,x*x+y*y};\r\n\t\tpoi[i].rnd();\r\n\t}\r\n\tconvex_hull();\r\n\trep(i,1,cnt){\r\n\t\tvector center=f[i].norm();\r\n\t\tpoint from1,to1,from2,to2,st,ed,a,b;\r\n\t\tst=point{poi[f[i].id[0]].x,poi[f[i].id[0]].y},ed=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom1=a,to1=b+a;\r\n\t\tst=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y},ed=point{poi[f[i].id[2]].x,poi[f[i].id[2]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom2=a,to2=b+a;\r\n\t\tpoint inter=intersection(from1,to1,from2,to2);\r\n\t\tdb dis=(inter-point{poi[f[i].id[0]].x,poi[f[i].id[0]].y}).norm();\r\n\t\tif(center.z>0) ret+=area-merge(inter,dis);\r\n\t\telse ret+=merge(inter,dis);\r\n\t}\r\n\tprintf(\"%.15lf\\n\",(double)(ret/area)+2);\r\n\treturn 0;\r\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "x32" | |
| } | |
| }, | |
| { | |
| "id": 954978, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 3608, | |
| "memory": 6524, | |
| "code": "#pragma GCC optimize(3)\r\n#pragma GCC optimize(\"inline\")\r\n#include<bits/stdc++.h>\r\n#define db __float128\r\n#define N 100005\r\n#define rep(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)\r\nconst db eps=1e-10;\r\ninline db _reps(){return rand()/(db)RAND_MAX;}\r\ninline db reps(){int ty=rand()&1?1:-1; return _reps()*eps*ty;}\r\ninline int eq(const db&p){return p<-eps?-1:p>eps;}\r\ninline int eq(const db&x,const db&y){return eq(x-y);}\r\n#define v2 point\r\nstruct point{\r\n\tdb x,y;\r\n\tinline point operator+(const point&p)const{return point{x+p.x,y+p.y};}\r\n\tinline point operator-(const point&p)const{return point{x-p.x,y-p.y};}\r\n\tinline point operator*(const db&p)const{return point{x*p,y*p};}\r\n\tinline point operator/(const db&p)const{return point{x/p,y/p};}\r\n\t// multiply cross\r\n\tinline db operator^(const point&p)const{return x*p.y-y*p.x;}\r\n\t// point multiply\r\n\tinline db operator&(const point&p)const{return x*p.x+y*p.y;}\r\n\tinline db norm2(){return x*x+y*y;}\r\n\tinline db norm(){return sqrt(norm2());}\r\n\tinline void inv(){std::swap(x,y); x=-x;}\r\n} rec[4];\r\nint n,cnt;\r\nbool vis[2005][2005];\r\nstruct vector{\r\n\tdb x,y,z;\r\n\tinline vector operator+(const vector&p)const{return vector{x+p.x,y+p.y,z+p.z};}\r\n\tinline vector operator-(const vector&p)const{return vector{x-p.x,y-p.y,z-p.z};}\r\n\tinline vector operator^(const vector&p)const{return vector{y*p.z-z*p.y,z*p.x-x*p.z,x*p.y-y*p.x};}\r\n\tinline db operator&(const vector&p)const{return x*p.x+y*p.y+z*p.z;}\r\n\tinline void rnd(){x+=reps(),y+=reps(),z+=reps();}\r\n} poi[N];\r\n\r\ninline point intersection(point a1,point a2,point b1,point b2){\r\n\tpoint a=a2-a1,b=b2-b1,c=b1-a1;\r\n\treturn a1+(a*((b^c)/(b^a)));\r\n}\r\n\r\nstruct plane{\r\n\tint id[3];\r\n\tinline plane(int x=0,int y=0,int z=0){id[0]=x,id[1]=y,id[2]=z;}\r\n\tinline vector norm(){return (poi[id[1]]-poi[id[0]])^(poi[id[2]]-poi[id[0]]);}\r\n} f[N],cpy[N];\r\n\r\ninline bool isplane(plane x,vector y){return ((y-poi[x.id[0]])&x.norm())>0;}\r\ninline db angle(point x,point y){return atan2(x^y,x&y);}\r\ninline db calc(point x,point y,db r){\r\n\tpoint p=(x-y)/(x-y).norm();\r\n\tpoint q=p; p.inv();\r\n\tpoint mid=intersection(x,y,point{0,0},p);\r\n\tif(mid.norm()>r) return r*r*angle(x,y)/2;\r\n\tdb d=sqrt(r*r-mid.norm2());\r\n\tpoint w1=mid+(q*d),w2=mid-(q*d);\r\n\tint b1=eq(x.norm2(),r*r)==1,b2=eq(y.norm2(),r*r)==1;\r\n\tif(b1&&b2){\r\n\t\tif(eq((x-w1)&(y-w1))<=0)\r\n\t\t\treturn r*r*(angle(x,w1)+angle(w2,y))/2+(w1^w2)/2;\r\n\t\treturn r*r*angle(x,y)/2;\r\n\t}\r\n\tif(b1) return (r*r*angle(x,w1)+(w1^y))/2;\r\n\tif(b2) return (r*r*angle(w2,y)+(x^w2))/2;\r\n\treturn (x^y)/2;\r\n}\r\ninline db merge(point o,db r){\r\n\tdb ret=0;\r\n\trep(i,0,3) ret+=calc(rec[i]-o,rec[i+1&3]-o,r);\r\n\treturn ret;\r\n}\r\nvoid convex_hull(){\r\n\tf[++cnt]=plane(1,2,3),f[++cnt]=plane(3,2,1);\r\n\trep(i,4,n){\r\n\t\tint num=0;\r\n\t\trep(j,1,cnt){\r\n\t\t\tint ty=isplane(f[j],poi[i]);\r\n\t\t\tif(!ty) cpy[++num]=f[j];\r\n\t\t\trep(k,0,2) vis[f[j].id[k]][f[j].id[(k+1)%3]]=ty;\r\n\t\t}\r\n\t\trep(j,1,cnt){\r\n\t\t\trep(k,0,2){\r\n\t\t\t\tint x=f[j].id[k],y=f[j].id[(k+1)%3];\r\n\t\t\t\tif(vis[x][y]&&!vis[y][x]) cpy[++num]=plane(x,y,i);\r\n\t\t\t}\r\n\t\t}\r\n\t\trep(j,1,num) f[j]=cpy[j]; cnt=num,num=0;\r\n\t}\r\n}\r\nint main(){\r\n\tsrand(time(NULL));\r\n\tstd::cin>>n;\r\n\tdouble stx,sty,edx,edy;\r\n\tstd::cin>>stx>>sty>>edx>>edy;\r\n\trec[0]={stx,sty},rec[1]={edx,sty},rec[2]={edx,edy},rec[3]={stx,edy};\r\n\tdb area=0,ret=0;\r\n\tarea=(edx-stx)*(edy-sty);\r\n\trep(i,1,n){\r\n\t\tdouble x,y; std::cin>>x>>y;\r\n\t\tpoi[i]=vector{x,y,x*x+y*y};\r\n\t\tpoi[i].rnd();\r\n\t}\r\n\tconvex_hull();\r\n\trep(i,1,cnt){\r\n\t\tvector center=f[i].norm();\r\n\t\tpoint from1,to1,from2,to2,st,ed,a,b;\r\n\t\tst=point{poi[f[i].id[0]].x,poi[f[i].id[0]].y},ed=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom1=a,to1=b+a;\r\n\t\tst=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y},ed=point{poi[f[i].id[2]].x,poi[f[i].id[2]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom2=a,to2=b+a;\r\n\t\tpoint inter=intersection(from1,to1,from2,to2);\r\n\t\tdb dis=(inter-point{poi[f[i].id[0]].x,poi[f[i].id[0]].y}).norm();\r\n\t\tif(center.z>0) ret+=area-merge(inter,dis);\r\n\t\telse ret+=merge(inter,dis);\r\n\t}\r\n\tprintf(\"%.15lf\\n\",(double)(ret/area)+2);\r\n\treturn 0;\r\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "x32" | |
| } | |
| }, | |
| { | |
| "id": 954977, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 3542, | |
| "memory": 6524, | |
| "code": "#pragma GCC optimize(3)\r\n#pragma GCC optimize(\"inline\")\r\n#include<bits/stdc++.h>\r\n#define db __float128\r\n#define N 100005\r\n#define rep(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)\r\nconst db eps=1e-10;\r\ninline db _reps(){return rand()/(db)RAND_MAX;}\r\ninline db reps(){int ty=rand()&1?1:-1; return _reps()*eps*ty;}\r\ninline int eq(const db&p){return p<-eps?-1:p>eps;}\r\ninline int eq(const db&x,const db&y){return eq(x-y);}\r\n#define v2 point\r\nstruct point{\r\n\tdb x,y;\r\n\tinline point operator+(const point&p)const{return point{x+p.x,y+p.y};}\r\n\tinline point operator-(const point&p)const{return point{x-p.x,y-p.y};}\r\n\tinline point operator*(const db&p)const{return point{x*p,y*p};}\r\n\tinline point operator/(const db&p)const{return point{x/p,y/p};}\r\n\t// multiply cross\r\n\tinline db operator^(const point&p)const{return x*p.y-y*p.x;}\r\n\t// point multiply\r\n\tinline db operator&(const point&p)const{return x*p.x+y*p.y;}\r\n\tinline db norm2(){return x*x+y*y;}\r\n\tinline db norm(){return sqrt(norm2());}\r\n\tinline void inv(){std::swap(x,y); x=-x;}\r\n} rec[4];\r\nint n,cnt;\r\nbool vis[2005][2005];\r\nstruct vector{\r\n\tdb x,y,z;\r\n\tinline vector operator+(const vector&p)const{return vector{x+p.x,y+p.y,z+p.z};}\r\n\tinline vector operator-(const vector&p)const{return vector{x-p.x,y-p.y,z-p.z};}\r\n\tinline vector operator^(const vector&p)const{return vector{y*p.z-z*p.y,z*p.x-x*p.z,x*p.y-y*p.x};}\r\n\tinline db operator&(const vector&p)const{return x*p.x+y*p.y+z*p.z;}\r\n\tinline void rnd(){x+=reps(),y+=reps(),z+=reps();}\r\n} poi[N];\r\n\r\ninline point intersection(point a1,point a2,point b1,point b2){\r\n\tpoint a=a2-a1,b=b2-b1,c=b1-a1;\r\n\treturn a1+(a*((b^c)/(b^a)));\r\n}\r\n\r\nstruct plane{\r\n\tint id[3];\r\n\tinline plane(int x=0,int y=0,int z=0){id[0]=x,id[1]=y,id[2]=z;}\r\n\tinline vector norm(){return (poi[id[1]]-poi[id[0]])^(poi[id[2]]-poi[id[0]]);}\r\n} f[N],cpy[N];\r\n\r\ninline bool isplane(plane x,vector y){return ((y-poi[x.id[0]])&x.norm())>0;}\r\ninline db angle(point x,point y){return atan2(x^y,x&y);}\r\ninline db calc(point x,point y,db r){\r\n\tpoint p=(x-y)/(x-y).norm();\r\n\tpoint q=p; p.inv();\r\n\tpoint mid=intersection(x,y,point{0,0},p);\r\n\tif(mid.norm()>r) return r*r*angle(x,y)/2;\r\n\tdb d=sqrt(r*r-mid.norm2());\r\n\tpoint w1=mid+(q*d),w2=mid-(q*d);\r\n\tint b1=eq(x.norm2(),r*r)==1,b2=eq(y.norm2(),r*r)==1;\r\n\tif(b1&&b2){\r\n\t\tif(eq((x-w1)&(y-w1))<=0)\r\n\t\t\treturn r*r*(angle(x,w1)+angle(w2,y))/2+(w1^w2)/2;\r\n\t\treturn r*r*angle(x,y)/2;\r\n\t}\r\n\tif(b1) return (r*r*angle(x,w1)+(w1^y))/2;\r\n\tif(b2) return (r*r*angle(w2,y)+(x^w2))/2;\r\n\treturn (x^y)/2;\r\n}\r\ninline db merge(point o,db r){\r\n\tdb ret=0;\r\n\trep(i,0,3) ret+=calc(rec[i]-o,rec[i+1&3]-o,r);\r\n\treturn ret;\r\n}\r\nvoid convex_hull(){\r\n\tf[++cnt]=plane(1,2,3),f[++cnt]=plane(3,2,1);\r\n\trep(i,4,n){\r\n\t\tint num=0;\r\n\t\trep(j,1,cnt){\r\n\t\t\tint ty=isplane(f[j],poi[i]);\r\n\t\t\tif(!ty) cpy[++num]=f[j];\r\n\t\t\trep(k,0,2) vis[f[j].id[k]][f[j].id[(k+1)%3]]=ty;\r\n\t\t}\r\n\t\trep(j,1,cnt){\r\n\t\t\trep(k,0,2){\r\n\t\t\t\tint x=f[j].id[k],y=f[j].id[(k+1)%3];\r\n\t\t\t\tif(vis[x][y]&&!vis[y][x]) cpy[++num]=plane(x,y,i);\r\n\t\t\t}\r\n\t\t}\r\n\t\trep(j,1,num) f[j]=cpy[j]; cnt=num,num=0;\r\n\t}\r\n}\r\nint main(){\r\n\tsrand(time(NULL));\r\n\tstd::cin>>n;\r\n\tdouble stx,sty,edx,edy;\r\n\tstd::cin>>stx>>sty>>edx>>edy;\r\n\trec[0]={stx,sty},rec[1]={edx,sty},rec[2]={edx,edy},rec[3]={stx,edy};\r\n\tdb area=0,ret=0;\r\n\tarea=(edx-stx)*(edy-sty);\r\n\trep(i,1,n){\r\n\t\tdouble x,y; std::cin>>x>>y;\r\n\t\tpoi[i]=vector{x,y,x*x+y*y};\r\n\t\tpoi[i].rnd();\r\n\t}\r\n\tconvex_hull();\r\n\trep(i,1,cnt){\r\n\t\tvector center=f[i].norm();\r\n\t\tpoint from1,to1,from2,to2,st,ed,a,b;\r\n\t\tst=point{poi[f[i].id[0]].x,poi[f[i].id[0]].y},ed=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom1=a,to1=b+a;\r\n\t\tst=point{poi[f[i].id[1]].x,poi[f[i].id[1]].y},ed=point{poi[f[i].id[2]].x,poi[f[i].id[2]].y};\r\n\t\ta=(st+ed)/2,b=ed-st,b.inv();\r\n\t\tfrom2=a,to2=b+a;\r\n\t\tpoint inter=intersection(from1,to1,from2,to2);\r\n\t\tdb dis=(inter-point{poi[f[i].id[0]].x,poi[f[i].id[0]].y}).norm();\r\n\t\tif(center.z>0) ret+=area-merge(inter,dis);\r\n\t\telse ret+=merge(inter,dis);\r\n\t}\r\n\tprintf(\"%.15lf\\n\",(double)(ret/area)+2);\r\n\treturn 0;\r\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "clang++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "x32" | |
| } | |
| }, | |
| { | |
| "id": 857918, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#2530. 「ZJOI2018」保镖", | |
| "time": 143, | |
| "memory": 17532, | |
| "code": "/*好像精度出问题了*/\r\n/*也可能是其他问题,但我不想调了*/\r\n#include <cstdio>\r\n#include <algorithm>\r\n#include <cmath>\r\n#pragma GCC optimize(2)\r\n//#define db __float128\r\n//#define db long double\r\n#define db double\r\nusing std::pair;\r\nusing std::sort;\r\n\r\nconst int MAXN =5000;\r\n\r\nconst db eps =1e-10;\r\n\r\n/*------------------------------Computational geometry------------------------------*/\r\n\r\nstruct vect{\r\n\tdb x, y, z;\r\n\tvect(){}\r\n\tvect(db xx, db yy, db zz):x(xx), y(yy), z(zz){}\r\n\tvect operator - (vect v){ return vect(x-v.x, y-v.y, z-v.z); }\r\n\tvect operator / (vect v){ return vect(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); }\r\n\tdb operator * (vect v){ return x*v.x+y*v.y+z*v.z; }\r\n\tdb m(){ return sqrt(x*x+y*y+z*z); }\r\n}pts[MAXN];\r\n\r\nstruct plane{\r\n\tint v[3];\r\n\tplane(){}\r\n\tplane(int v1, int v2, int v3){ v[0] =v1, v[1] =v2, v[2] =v3; }\r\n\tvect normal(){ return (pts[v[1]]-pts[v[0]])/(pts[v[2]]-pts[v[0]]); }\r\n};\r\n\r\ninline bool gtr(db a, db b){ return (a-b > eps); }\r\n\r\ninline bool eq(db a, db b){ return (a-b > -eps && a-b < eps); }\r\n\r\ninline db dist(vect v, plane p){ return p.normal()*(v-pts[p.v[0]])/p.normal().m(); }\r\n\r\ninline db dist(vect v, vect f1, vect f2){ return ((f2-f1)/(v-f1)).m()/(f2-f1).m(); }\r\n\r\ninline bool isabove(vect v, plane p){ return gtr((v-pts[p.v[0]])*p.normal(), 0); }\r\n\r\n/*------------------------------Convex Hulls------------------------------*/\r\n\r\nint vise[MAXN][MAXN];\r\nplane res[MAXN];\r\n\r\n/*不要 del,但期望效率应该会慢些*/\r\ninline int getConvexHulls(int totp, plane facets[]){\r\n\tint s[4];\r\n\ts[0] =0, s[1] =1, s[2] =0, s[3] =0;\r\n\twhile(eq(dist(pts[s[2]], pts[s[0]], pts[s[1]]), 0)) ++s[2];\r\n\twhile(s[3] < totp && eq(dist(pts[s[3]], plane(s[0], s[1], s[2])), 0)) ++s[3];\r\n\tif(s[3] == totp) return -1;\r\n\tif(gtr(0, dist(pts[s[3]], plane(s[0], s[1], s[2])))) s[1] ^=s[2] ^=s[1] ^=s[2];\r\n\tint totf =0;\r\n\tfacets[totf++] =plane(s[0], s[2], s[1]);\r\n\tfacets[totf++] =plane(s[0], s[1], s[3]);\r\n\tfacets[totf++] =plane(s[1], s[2], s[3]);\r\n\tfacets[totf++] =plane(s[2], s[0], s[3]);\r\n\tfor(int i =0; i < totp; ++i){\r\n\t\tif(i == s[0] || i == s[1] || i == s[2] || i == s[3]) continue;\r\n\t\tint totr =0;\r\n\t\tfor(int j =0; j < totf; ++j){\r\n\t\t\tif(isabove(pts[i], facets[j]))\r\n\t\t\t\tfor(int k =0; k < 3; ++k)\r\n\t\t\t\t\tvise[facets[j].v[k]][facets[j].v[(k+1)%3]] =i+1;\r\n\t\t\telse res[totr++] =facets[j];\r\n\t\t}\r\n\t\ttotf =0;\r\n\t\tfor(int j =0; j < totr; ++j){\r\n\t\t\tfacets[totf++] =res[j];\r\n\t\t\tfor(int k =0; k < 3; ++k)\r\n\t\t\t\tif(vise[res[j].v[(k+1)%3]][res[j].v[k]] == i+1)// && vise[res[j].v[k]][res[j].v[(k+1)%3]] != i+1)\r\n\t\t\t\t\tfacets[totf++] =plane(res[j].v[(k+1)%3], res[j].v[k], i);\r\n\t\t}\r\n\t}\r\n\treturn totf;\r\n}\r\n\r\n/*------------------------------Computational geometry 2D------------------------------*/\r\n\r\nstruct vect2{\r\n\tdb x, y;\r\n\tvect2(){}\r\n\tvect2(db xx, db yy):x(xx), y(yy){}\r\n\tvect2 operator + (vect2 v){ return vect2(x+v.x, y+v.y); }\r\n\tvect2 operator - (vect2 v){ return vect2(x-v.x, y-v.y); }\r\n\tdb operator / (vect2 v){ return x*v.y-y*v.x; }\r\n\tdb operator * (vect2 v){ return x*v.x+y*v.y; }\r\n\tvect2 operator * (db k){ return vect2(x*k, y*k); }\r\n\tvect2 operator / (db k){ return vect2(x/k, y/k); }\r\n\tdb m(){ return sqrt(x*x+y*y); }\r\n\tdb m2(){ return x*x+y*y; }\r\n};\r\n\r\nstruct line{\r\n\tvect2 u, v;\r\n\tdb angle;\r\n\tline(){}\r\n\tline(vect2 uu, vect2 vv):u(uu), v(vv){ angle =atan2(vv.y-uu.y, vv.x-uu.x); }\r\n};\r\n\r\ntypedef pair<vect2, db> pad;\r\n\r\ninline vect2 getMidpoint(vect2 x, vect2 y){ return vect2((x.x+y.x)/2, (x.y+y.y)/2); }\r\n\r\n/*向逆时针旋转 90 度*/\r\ninline vect2 rotateRA(vect2 v){ return vect2(-v.y, v.x); }\r\n\r\ninline vect2 getIntersection(line f, line g){\r\n\tvect2 w =g.v-f.u, F =f.v-f.u, G =g.v-g.u;\r\n\treturn g.v+(g.u-g.v)*((F/w)/(F/G));\r\n}\r\n\r\ninline pad getCircle(vect2 pt1, vect2 pt2, vect2 pt3){\r\n\tvect2 mid1 =getMidpoint(pt1, pt2), mid2 =getMidpoint(pt1, pt3);\r\n\tline li1(mid1, mid1+rotateRA(pt2-pt1)), li2(mid2, mid2+rotateRA(pt3-pt1));\r\n\tvect2 sect =getIntersection(li1, li2);\r\n\treturn pad(sect, (pt1-sect).m());\r\n}\r\n\r\n/*u 到 v 的逆时针夹角*/\r\ninline db rad(vect2 u, vect2 v){ return atan2(u/v, u*v); }\r\n\r\ninline db fabs(db x){ return (x < 0) ? -x : x; }\r\n\r\ninline db dist(line f, vect2 w){ return fabs((w-f.u)/(f.v-f.u)/(f.v-f.u).m()); }\r\n\r\ninline db getArea_Circle_Rectangle(db r, vect2 LL/*LowerLeft*/, vect2 TR/*TopRight*/){\r\n\t/*从矩形左上角开始的逆时针四个点*/\r\n\tvect2 v[4];\r\n\tv[0] =vect2(LL.x, TR.y), v[1] =vect2(LL.x, LL.y), v[2] =vect2(TR.x, LL.y), v[3] =vect2(TR.x, TR.y);\r\n\tdb S =0;\r\n\tfor(int i =0; i < 4; ++i){\r\n\t\tdb d =dist(line(v[i], v[(i+1)%4]), vect2(0, 0));\r\n\t\tif(gtr(d, r))\r\n\t\t\tS +=r*r*rad(v[i], v[(i+1)%4])/2;\r\n\t\telse{\r\n\t\t\t/*与边同向的单位向量*/\r\n\t\t\tvect2 e =(v[(i+1)%4]-v[i]); e =e/e.m();\r\n\t\t\t/*vertical line 中垂线*/\r\n\t\t\tvect2 vtc =getIntersection(line(v[i], v[(i+1)%4]), line(vect2(0, 0), rotateRA(e)));\r\n\t\t\t/*圆与矩形边交点,逆时针顺序*/\r\n\t\t\tdb k =sqrt(r*r-d*d);/*勾股*/\r\n\t\t\tvect2 sect1 =vtc-e*k, sect2 =vtc+e*k;\r\n\t\t\tbool flg1 =gtr(v[i].m(), r), flg2 =gtr(v[(i+1)%4].m(), r);\r\n\t\t\tif(flg1 && flg2){\r\n\t\t\t\t/*上面是 d < r 且线段和圆没有交点*/\r\n\t\t\t\tif(gtr((v[i]-vtc)*(v[(i+1)%4]-vtc), 0)) S +=r*r*rad(v[i], v[(i+1)%4])/2;\r\n\t\t\t\telse S +=r*r*rad(v[i], sect1)/2+sect1/sect2/2+r*r*rad(sect2, v[(i+1)%4])/2;\r\n\t\t\t}\r\n\t\t\telse if(flg1)\r\n\t\t\t\tS +=r*r*rad(v[i], sect1)/2+sect1/v[(i+1)%4]/2;\r\n\t\t\telse if(flg2)\r\n\t\t\t\tS +=v[i]/sect2/2+r*r*rad(sect2, v[(i+1)%4])/2;\r\n\t\t\telse\r\n\t\t\t\tS +=v[i]/v[(i+1)%4]/2;\r\n\t\t}\r\n\t}\r\n\treturn S;\r\n}\r\n\r\ninline bool onright(line f, vect2 w){ return gtr((w-f.u)/(f.v-f.u), 0); }\r\n\r\nint cmp(line A, line B){\r\n\tif(eq(A.angle, B.angle)) return onright(B, A.u);\r\n\telse return (gtr(B.angle, A.angle));\r\n}\r\n\r\ninline db getArea_Plane_Rectangle(plane p, vect2 LL, vect2 TR){\r\n\tvect TL2(LL.x, TR.y, 0), LL2(LL.x, LL.y, 0), TR2(TR.x, TR.y, 0), LR2(TR.x, LL.y, 0);\r\n\tbool flg1 =isabove(TL2, p), flg2 =isabove(LL2, p),\r\n\t\t flg3 =isabove(TR2, p), flg4 =isabove(LR2, p);\r\n\tif(flg1 && flg2 && flg3 && flg4) return 0;/*保证下面是有交的*/\r\n\telse if((!flg1) && (!flg2) && (!flg3) && (!flg4)) return (TR.x-LL.x)*(TR.y-LL.y);\r\n\telse{\r\n\t\tline li(vect2(pts[p.v[0]].x, pts[p.v[0]].y), vect2(pts[p.v[1]].x, pts[p.v[1]].y));\r\n\t\t/*使得最后求出的面积包含顶点 LL*/\r\n\t\tif(onright(li, LL)){/*之前极角忘记改 qaq*/\r\n\t\t\tli =line(li.v, li.u);\r\n\t\t}\r\n\t\t/*从左上角开始逆时针四个顶点*/\r\n\t\tvect2 v[4];\r\n\t\tv[0] =vect2(LL.x, TR.y), v[1] =LL, v[2] =vect2(TR.x, LL.y), v[3] =TR;\r\n\t\tline ls[5];\r\n\t\tfor(int i =0; i < 4; ++i) ls[i] =line(v[i], v[(i+1)%4]);\r\n\t\tls[4] =li;\r\n\t\t/*类似半平面交的处理,不过删去了一些不必要的代码*/\r\n\t\tsort(ls, ls+5, cmp);\r\n\t\tline stk[6];\r\n\t\tint l =0, r =0;\r\n\t\t/*去除极角相同的直线*/\r\n\t\tfor(int i =0; i < 5; ++i){\r\n\t\t\twhile(i < 4 && eq(ls[i].angle, ls[i+1].angle)) ++i;\r\n\t\t\twhile(r-l > 1 && onright(ls[i], getIntersection(stk[r-1], stk[r-2]))) --r;\r\n\t\t\tstk[r++] =ls[i];\r\n\t\t}\r\n\t\twhile(r-l > 1){\r\n\t\t\tif(onright(stk[r-1], getIntersection(stk[l], stk[l+1]))) ++l;\r\n\t\t\telse if(onright(stk[l], getIntersection(stk[r-1], stk[r-2]))) --r;\r\n\t\t\telse break;/*已经没有更新了*/\r\n\t\t}\r\n\t\tline hull[6];\r\n\t\tint h =0;\r\n\t\tfor(int i =l; i < r; ++i) hull[h++] =stk[i];\r\n\t\thull[h++] =hull[0];\r\n\t\tdb S =0;\r\n\t\tvect2 v0 =getIntersection(hull[0], hull[1]), v1, v2 =getIntersection(hull[1], hull[2]);\r\n\t\tfor(int i =0; i+3 < h; ++i){\r\n\t\t\tv1 =v2, v2 =getIntersection(hull[i+2], hull[i+3]);\r\n\t\t\tS +=(v1-v0)/(v2-v1)/2;\r\n\t\t}\r\n\t\t\r\n\t\t//printf(\"%d %d %d\\n\", p.v[0], p.v[1], p.v[2]);\r\n\t\tif(flg2) return (TR.x-LL.x)*(TR.y-LL.y)-S;\r\n\t\telse return S;\r\n\t}\r\n}\r\n\r\n/*------------------------------Main------------------------------*/\r\n\r\ninline int read(){\r\n\tint x =0; bool f =0; char c =getchar();\r\n\twhile(c < '0' || c > '9') (c == '-') ? f =1, c =getchar() : c =getchar();\r\n\twhile(c >= '0' && c <= '9') x = (x<<3) + (x<<1) + (48^c), c =getchar();\r\n\treturn (f) ? -x : x;\r\n}\r\n\r\nplane facets[MAXN];\r\n\r\ninline bool eq2(db a, db b){ return (a-b > -1e-3 && a-b < 1e-3); }\r\n\r\nint main(){\r\n\t//freopen(\"P4502.in\", \"r\", stdin);\r\n\tint n =read();\r\n\tdb x1 =read(), y1 =read(), x2 =read(), y2 =read();\r\n\t/*LowerLeft, TopRight*/\r\n\tvect2 LL =vect2(x1, y1), TR =vect2(x2, y2);\r\n\tfor(int i =0; i < n; ++i){\r\n\t\tdb a =read(), b =read();\r\n\t\tpts[i] =vect(a, b, a*a+b*b);\r\n\t}\r\n\tint h =getConvexHulls(n, facets);\r\n\tif(h == -1) return printf(\"%d\", n) && 0;\r\n\tdb ans =0, Sr =(x2-x1)*(y2-y1);\r\n\tint cnt =0;\r\n\tfor(int i =0; i < h; ++i){\r\n\t\tvect N =facets[i].normal();\r\n\t\tif(gtr(N.z, 0)){\r\n\t\t\tvect v[3];\r\n\t\t\tv[0] =pts[facets[i].v[0]], v[1] =pts[facets[i].v[1]], v[2] =pts[facets[i].v[2]];\r\n\t\t\tpad c =getCircle(vect2(v[0].x, v[0].y), vect2(v[1].x, v[1].y), vect2(v[2].x, v[2].y));\r\n\t\t\tans +=getArea_Circle_Rectangle(c.second, LL-c.first, TR-c.first)/Sr;\r\n\t\t}\r\n\t\telse if(gtr(0, N.z)){\r\n\t\t\tvect v[3];\r\n\t\t\tv[0] =pts[facets[i].v[0]], v[1] =pts[facets[i].v[1]], v[2] =pts[facets[i].v[2]];\r\n\t\t\tpad c =getCircle(vect2(v[0].x, v[0].y), vect2(v[1].x, v[1].y), vect2(v[2].x, v[2].y));\r\n\t\t\tans +=(Sr-getArea_Circle_Rectangle(c.second, LL-c.first, TR-c.first))/Sr;\r\n\t\t}\r\n\t\telse\r\n\t\t\tans +=getArea_Plane_Rectangle(facets[i], LL, TR)/Sr, ++cnt;\r\n\t}\r\n\tprintf(\"%.8lf\", (double)(2*n-2-ans));\r\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "x32" | |
| } | |
| } | |
| ], | |
| "#6630. 跳一跳 加强版": [ | |
| { | |
| "id": 1959628, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 53, | |
| "memory": 420, | |
| "code": "#include <iostream>\n#include <iomanip>\n#include <algorithm>\n#include <cmath>\nconst double euler_v=0.5772156649015328606;\nint main(){\n long long n,ans=0;\n std::cin>>n;\n if(n!=1) ans=static_cast<long long>(std::floor(static_cast<double>(n+1)*(std::log(n)+euler_v)));\n std::cout<<ans<<std::endl;\n return 0;\n}", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++17", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1959626, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 23, | |
| "memory": 432, | |
| "code": "#include <iostream>\n#include <iomanip>\n#include <algorithm>\n#include <cmath>\nconst double euler_v=0.5772156649015328606;\nint main(){\n long long n,ans=0;\n std::cin>>n;\n if(n!=1) ans=static_cast<long long>(std::floor(static_cast<double>(n+1)*(std::log(n)+euler_v)));\n std::cout<<ans<<std::endl;\n return 0;\n}\n", | |
| "compileAndRunOptions": { | |
| "std": "c++17", | |
| "compiler": "clang++", | |
| "m": "64", | |
| "O": "2" | |
| } | |
| }, | |
| { | |
| "id": 1254949, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 177, | |
| "memory": 332, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef __float128 T;\nlong long n;\nT ans;\nconst T ga=0.577215664901532860606512090082402431042159335;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1254948, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 210, | |
| "memory": 412, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef __float128 T;\nlong long n;\nT ans;\nconst T ga=0.577215664901532860606512090082402431042159335;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans+0);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1254958, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 206, | |
| "memory": 392, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef double T;\nlong long n;\nT ans;\nconst T ga=0.57721566490153;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1254957, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 194, | |
| "memory": 412, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef double T;\nlong long n;\nT ans;\nconst T ga=0.57721566490153286;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1254954, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 211, | |
| "memory": 384, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef double T;\nlong long n;\nT ans;\nconst T ga=0.577215664901532860606512090082402431042159335;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| }, | |
| { | |
| "id": 1254953, | |
| "lang": "cpp", | |
| "status": "Accepted", | |
| "score": 100, | |
| "problem": "#6630. 跳一跳 加强版", | |
| "time": 185, | |
| "memory": 396, | |
| "code": "#include<bits/stdc++.h>\nusing namespace std;\ntypedef long double T;\nlong long n;\nT ans;\nconst T ga=0.577215664901532860606512090082402431042159335;\nT H(long long n){\n\treturn log(n+1)+ga;\n}\nsigned main(){\n\tcin>>n;\n\tans=n*H(n-1)*n/(n-1.0);\n\tcout<<(long long)(ans);\n}\n", | |
| "compileAndRunOptions": { | |
| "compiler": "g++", | |
| "std": "c++11", | |
| "O": "2", | |
| "m": "64" | |
| } | |
| } | |
| ] | |
| } |
Xet Storage Details
- Size:
- 352 kB
- Xet hash:
- ec831266ddbceabeac341f489227c0bae44787d2636bd6001393eca3f24b1b74
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.