被彼此笼罩 任回忆将我们缠绕 狂欢者戴上了镣铐 得益者撕裂了嘴角 吞下这毒药
test9
蛋糕(cake)
首先 \(n\) 个点有 \(n-2\) 块,我们考虑非选点怎么贡献,只有差在两个选点间贡献。那我们考虑可以插的间隔的贡献,设间隔点数分别为 \(u_1,\dots,u_m\),间隔差一个多一个贡献,如果插满一个奇数 \(u\) 额外多一个贡献,注意 \(y\) 可能贡献不满。
#include<bits/stdc++.h>
#define int long long
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pb push_back
using namespace std;
const int N=200005;
int T, n, x, y, p[N], d[N], Ans;
void mian() {
cin >> n >> x >> y, Ans=x+y-2;
up(i,1,x) cin >> p[i];
sort(p+1,p+1+x), d[1]=p[1]-1+n-p[x];
up(i,2,x) d[i]=p[i]-p[i-1]-1;
sort(d+1,d+1+x);
// cout << "d : "; up(i,1,x) cout << d[i] << ' '; cout << '\n';
up(i,1,x) if(d[i]%2==1) {
int k=(d[i]-1)/2;
if(k<=y) {
y-=k;
Ans+=k+1;
d[i]=0;
}
}
up(i,1,x) if(d[i]) {
int k=min(y,d[i]/2);
y-=k;
Ans+=k;
}
cout << Ans-y << '\n';
}
signed main() {
freopen("cake.in","r",stdin);
freopen("cake.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--) mian();
return 0;
}
梦灯笼(lam)
集合不是很好表示,但这个很经典的可以哈希,然后考虑枚举对点,查找多少对点对哈希亦或和一致,枚举行的点对,状态数 \(O(n^2m)\),注意计数题要双哈希和常数不要太大。
#define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include<bits/stdc++.h>
#define int long long
#define ull unsigned int
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define mp make_pair
#define pb push_back
using namespace std;
const int N=155, M=1005;
int n, m, k, Ans;
ull hsh1[N][M], hsh2[N][M];
map<pair<ull,ull>,int> cnt;
signed main() {
// freopen("1.txt","r",stdin);
freopen("lam.in","r",stdin);
freopen("lam.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
srand((unsigned)time(0));
cin >> n >> m >> k, ++n, ++m;
while(k--) {
ull L=(int)rand()*rand();
ull R=(int)rand()*rand();
int x, y;
cin >> x >> y, hsh1[x+1][y+1]^=L, hsh2[x+1][y+1]^=R;
cin >> x >> y, hsh1[x+1][y+1]^=L, hsh2[x+1][y+1]^=R;
}
up(i,0,n) up(j,1,m) hsh1[i][j]^=hsh1[i][j-1], hsh2[i][j]^=hsh2[i][j-1];
up(i,1,n) up(j,0,m) hsh1[i][j]^=hsh1[i-1][j], hsh2[i][j]^=hsh2[i-1][j];
up(l,0,n) up(r,l+2,n) {
up(j,0,m-2) {
ull p=hsh1[l][j]^hsh1[r][j], q=hsh2[l][j]^hsh2[r][j];
++cnt[mp(p,q)];
ull x=hsh1[l][j+2]^hsh1[r][j+2], y=hsh2[l][j+2]^hsh2[r][j+2];
Ans+=cnt[mp(x,y)];
}
cnt.clear();
}
cout << Ans << '\n';
return 0;
}

浙公网安备 33010602011771号