2020.11.28模拟赛
2020.11.28
这个水印真的讨厌






T1 prime
\(\mathcal{先考虑n+1为质数的时候}\)
\[\mathcal{原式=}\sum_{i=2}^n\frac{1}{v(i)u(i)}\\
=\sum_{i=1}^{|prime|-1}\frac{prime[i+1]-prime[i]}{prime[i]prime[i+1]}\\
=\sum_{i=1}^{|prime|-1}\frac{1}{prime[i]}-\frac{1}{prime[i+1]}\\
=\frac{1}{2}-\frac{1}{prime[|prime|]}
\]
\(\mathcal{不为质数时减去多余即可。}\\ \mathcal{至于寻找大于n和小于n的素数,暴力找加miller测试验证就行了。}\\ \mathcal{根据素数分布定理可知时间复杂度为O(Tln\ nlog_2n)}\)
\(\mathfrak{Emmm,赛上打挂了}\)
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
T t=0;
char k;
bool vis=0;
do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return vis?-t:t;
}
int qkpow(int n,int m,int mod){
if(!m)return 1;
ll t=qkpow(n,m>>1,mod);
t=t*t%mod;
if(m&1)t=t*n%mod;
return t;
}
bool judge(int v){return v==2||v==3||v==5||v==7||qkpow(2,v-1,v)==1&&qkpow(3,v-1,v)==1&&qkpow(5,v-1,v)==1&&qkpow(7,v-1,v)==1;}
ll gcd(ll x,ll y){return !y?x:gcd(y,x%y);}
int main(){
for(int T=read;T--;){
int x=read,w=x,l=x;
if(x==2){puts("1/6");continue;}
while(!judge(++w));
if(!judge(l)){while(!judge(l-1))--l;--l;}
ll o=w-x-1,lx=1ll*l*w-2*l-2*o,rx=2ll*w*l,v=gcd(lx,rx);
lx/=v;rx/=v;
printf("%lld/%lld\n",lx,rx);
}
return 0;
}
T2 go
\(\mathcal{硬dp即可}\)
\(\mathfrak{Emmm...}\)
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
T t=0;
char k;
bool vis=0;
do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return vis?-t:t;
}
struct A{
int a,b,t;
bool operator <(const A &x)const{return a<x.a;}
}a[105];
int n,K,s,w,dp[2105][105][105][2];
int dis(int x,int y){return fabs(a[x].a-a[y].a);}
int main(){
n=read,K=read,s=read;
for(int i=1;i<=s;++i)
a[i].a=read,a[i].b=read,a[i].t=read;
++s;a[s].a=K,a[s].b=0,a[s].t=1;
sort(a+1,a+s+1);
for(int i=1;i<=s;++i)
if(a[i].a==K)w=i;
memset(dp,-0x7f,sizeof(dp));
dp[1][w][w][0]=dp[1][w][w][1]=0;
int ans=0;
for(int k=1;k<=2000;++k)
for(int len=1;len<=s;++len)
for(int i=1,j;(j=i+len-1)<=s;++i){
if(i!=1){
if(k+dis(i-1,i)<=2000){
int &xv=dp[k+dis(i-1,i)][i-1][j][0];
xv=max(xv,dp[k][i][j][0]+(dis(i,i-1)+k<=a[i-1].t?a[i-1].b:0));
}
if(k+dis(i-1,j)<=2000){
int &yv=dp[k+dis(i-1,j)][i-1][j][0];
yv=max(yv,dp[k][i][j][1]+(dis(j,i-1)+k<=a[i-1].t?a[i-1].b:0));
}
}
if(j!=s){
if(k+dis(j,j+1)<=2000){
int &xv=dp[k+dis(j,j+1)][i][j+1][1];
xv=max(xv,dp[k][i][j][1]+(dis(j,j+1)+k<=a[j+1].t?a[j+1].b:0));
}
if(k+dis(i,j+1)<=2000){
int &yv=dp[k+dis(i,j+1)][i][j+1][1];
yv=max(yv,dp[k][i][j][0]+(dis(i,j+1)+k<=a[j+1].t?a[j+1].b:0));
}
}
}
for(int k=0;k<=2100;++k)
for(int len=1;len<=s;++len)
for(int i=1,j;(j=i+len-1)<=s;++i)
ans=max(ans,max(dp[k][i][j][0],dp[k][i][j][1]));
printf("%d",ans);
return 0;
}
T3 shuru
\(\mathcal{是我题读错了?中位数}\)
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
T t=0;
char k;
bool vis=0;
do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return vis?-t:t;
}
int x[100005],y[100005],s;
ll ans;
int main(){
read;s=read;read;
for(int i=1;i<=s;++i)
x[i]=read,y[i]=read,ans+=read;
sort(x+1,x+s+1);
sort(y+1,y+s+1);
int mx=x[s+1>>1],my=y[s+1>>1];
for(int i=1;i<=s;++i)
ans+=fabs(x[i]-mx)+fabs(y[i]-my);
printf("%lld\n%d %d",ans,mx,my);
return 0;
}
T4 watch
\(\mathcal{害,打了个O(nlog_2n)\ Or\ O(nlog^2_2n)的}\)
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
T t=0;
char k;
bool vis=0;
do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return vis?-t:t;
}
int s,q,top[800005],si[800005],son[800005],v[800005],la[800005],qu[800005],fa[800005],h[800005];
vector<int>W[3200005],G[800005];
void dfs1(int n){
si[n]=1;h[n]=h[fa[n]]+1;
for(int i=0;i<G[n].size();++i){
fa[G[n][i]]=n;
dfs1(G[n][i]);
si[n]+=si[G[n][i]];
if(si[G[n][i]]>si[son[n]])son[n]=G[n][i];
}
}
void dfs2(int n,int w){
top[n]=w;
if(son[n])dfs2(son[n],w);
for(int i=0;i<G[n].size();++i)
if(G[n][i]!=son[n])
dfs2(G[n][i],G[n][i]);
}
void ins(int tl,int tr,int l,int r,int x,int d){
if(l==tl&&r==tr)W[d].push_back(x);
else{
int mid=tl+tr>>1;
if(r<=mid)ins(tl,mid,l,r,x,d<<1);
else if(mid<l)ins(mid+1,tr,l,r,x,d<<1|1);
else ins(tl,mid,l,mid,x,d<<1),ins(mid+1,tr,mid+1,r,x,d<<1|1);
}
}
stack<int>sta,sta1;
void add(int x){
if(!x)return;
int la=v[top[x]];
if(h[la]<h[x]){
sta.push(top[x]);
sta1.push(la);
v[top[x]]=x;
}
if(!la)add(fa[top[x]]);
}
int query(int x){
if(!x)return 0;
if(v[top[x]])return h[v[top[x]]]>h[x]?x:v[top[x]];
return query(fa[top[x]]);
}
void print(int l,int r,int d){
int wz=sta.size(),mid=l+r>>1;
for(int i=0;i<W[d].size();++i)
add(W[d][i]);
if(l==r)
if(qu[l])printf("%d\n",query(qu[l]));
else;
else{
print(l,mid,d<<1);
print(mid+1,r,d<<1|1);
}
while(sta.size()>wz)v[sta.top()]=sta1.top(),sta.pop(),sta1.pop();
}
int main(){
s=read;q=read;
for(int i=2;i<=s;++i)
G[read].push_back(i);
dfs1(1);dfs2(1,1);
for(int i=1;i<=q;++i){
int x=read;
if(x>0)
if(!la[x])la[x]=i;
else{
ins(1,q,la[x],i,x,1);
la[x]=0;
}
else qu[i]=-x;
}
for(int i=1;i<=s;++i)
if(la[i])ins(1,q,la[i],q,i,1);
print(1,q,1);
return 0;
}
因果乃旋转纺车,光彩之多面明镜
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存

浙公网安备 33010602011771号