本来想抢三题的 rk1 ?【无耻

最后发现 T2 好像还是慢了些,只搞了个 rk2

子段与子段

第一题随便分析一下,发现一段区间中某个元素的贡献次数就是 \((x+1)·(y+1)\) x 是他左边的元素个数, y 是右边(当然指的是询问区间内)

由于异或的性质,一个元素最终贡献次数膜 2 后结果一样

那么我们发现对于长度为偶数的区间答案必然是 0

proof: 不难证明每个元素的贡献次数都是偶数次的

对于长度为奇数的区间,我们发现答案是以区间左端点开始,右端点结束的步长为 2 的序列的异或和

那么处理一下这个比较特殊的前缀异或和就好了

//by Judge
#include<cstdio>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
using namespace std;
const int M=2e5+3;
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int Max(int x,int y){return x>y?x:y;}
inline int read(){ int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} char sr[1<<21],z[20];int CCF=-1,Z;
inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
inline void print(int x,char chr='\n'){
if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
} int n,q,L,R,a[M];
int main(){ n=read(),q=read(),a[1]=read();
fp(i,2,n) a[i]=a[i-2]^read();
while(q--){ L=read(),R=read();
if((L^R)&1) print(0);
else print(a[R]^a[Max(L-2,0)]);
} return Ot(),0;
}

练级

我们发现对于所有的二元组搞个并查集然后判断每个连通块内边数减去点数后的值是不是偶数就好了,如果不是的话就要 ans-1

Proof : 懒得说

//by Judge
#include<cstdio>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
using namespace std;
const int M=2e5+3;
typedef int arr[M];
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int read(){ int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} int n,m,ans; arr fa,num,siz;
int find(int x){return x^fa[x]?fa[x]=find(fa[x]):x;}
inline void merge(int x,int y){ x=find(x),y=find(y);
if(x==y) return num[x]^=1,void();
fa[y]=x,siz[x]+=siz[y],num[x]^=num[y];
}
int main(){ n=read(),m=read();
fp(i,1,n) fa[i]=i,num[i]=0,siz[i]=1;
while(m--) merge(read(),read());
fp(i,1,n) if(fa[i]==i) ans+=siz[i]-(num[i]^1);
return !printf("%d\n",ans);
}

魔术

一眼没看出来,最后发现(不管复杂度的话)是水题...

CDQ 暴力分治然后去搞背包就好了,复杂度 \(n ·m log n\)

这 tm 都能过,noi.ac 的机子也是很棒棒的哦

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const int M=2e4+3,inf=1e9+7;
typedef int arr[M];
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline void cmin(int& x,int y){if(x>y)x=y;}
inline int read(){ int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} char sr[1<<21],z[20];int CCF=-1,Z;
inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
inline void print(ll x,char chr='\n'){
if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
} int n,m,f[17][2003]; arr a,c;
#define Inc(x,y) (x+y>m?x+y-m:x+y)
inline void update(int d,int v,int w){
memcpy(f[16],f[d],(m+1)<<2);
fp(i,0,m-1) cmin(f[d][Inc(i,v)],f[16][i]+w);
}
inline void CDQ(int l,int r,int d){ Rg int mid=(l+r)>>1;
if(l==r){ Rg ll ans=0; fp(i,0,m-1) ans+=f[d][i]<inf?f[d][i]:-1; return print(ans); }
memcpy(f[d+1],f[d],(m+1)<<2); fp(i,mid+1,r) update(d+1,a[i],c[i]); CDQ(l,mid,d+1);
memcpy(f[d+1],f[d],(m+1)<<2); fp(i,l,mid) update(d+1,a[i],c[i]); CDQ(mid+1,r,d+1);
}
int main(){ n=read(),m=read(); fp(i,1,n) a[i]=read(),c[i]=read();
return memset(f[0],0x3f,(m+1)<<2),f[0][0]=0,CDQ(1,n,0),Ot(),0;
}

最新文章

  1. 在虚拟机发布网站,设置服务器外网访问ip端口号
  2. three.js 之旅 (二)
  3. Windows下WEB服务器的选择与搭建
  4. Fix an “Unapproved Caller” SecurityAgent Message in Mac OS X
  5. php安装扩展模块(curl模块)
  6. Linux下 nginx + 最新版php5.5 安装配置详解
  7. 快速注册Uber司机,兼职月入轻松过万
  8. CDLinux环境下WiFi密码破解
  9. android 实现透明状态栏
  10. Android基本控件和事件以及消息总结
  11. 2017-4-24 WinForm开发基础、窗体的属性CenterScreen
  12. linux 迁移项目ProtocolException
  13. 01 HTML快速入门
  14. 在idea中设置记住git的用户名和密码
  15. Kudu的集群安装(1.6.0-cdh5.14.0)
  16. Response的Content-Type一览
  17. ubuntu 16.04 搭建git小型服务器
  18. day 60 pyMySQL 的安装及其 增删改查的应用
  19. iOS Dev (25) 解决“The executable was signed with invalid entitlements.”问题
  20. 前端在js中获取用户所在地区的时间与时区

热门文章

  1. APIView源码与Request源码分析
  2. mybatis resultType=map时,value为null时返回结果没有对应的key
  3. Linux 压缩方式测试
  4. sqli-labs(38)
  5. Idea如何生成JPA的相关model,以及运行JPA项目的时候启动错误
  6. 3分割线左右间距(LinearLayoutManager.VERTICAL)
  7. 动态数组C语言实现
  8. oj.1677矩形嵌套,动态规划 ,贪心
  9. [NLP] 语义网络与知识图谱入门(二)
  10. Appium测试框架