CSP-S全国模拟赛第四场 【nan?】
本来想抢三题的 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;
}
CSP-S全国模拟赛第四场 【nan?】的更多相关文章
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- nowcoder(牛客网)提高组模拟赛第四场 解题报告
T1 动态点分治 就是模拟..... 但是没有过!! 看了题解之后发现.... 坑点:有可能 \(x<=r\),但是
- CSP-S全国模拟赛第三场 【nan死了】
mmt 居然第一步膜化乘除 都没看出来,没救了... 大概是贡献前缀和优化的做法 巨兔式讲解:大家都学会了么? 咱发现有大量的 (i/j , i%j ) 同时 对很多 c 产生了贡献,咱可以去优化这一 ...
- 【noi.ac-CSP-S全国模拟赛第三场】#705. mmt
给定数组a[],b[] 求$$c_i=\sum_{j=1}^{i} a_{\left \lfloor \frac{n}{j} \right \rfloor}·b_{i \bmod j}$$ 大概就是对 ...
- 「NOWCODER」CSP-S模拟赛第3场
「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
随机推荐
- python实现一个朴素贝叶斯分类方法
1.公式 上式中左边D是需要预测的测试数据属性,h是需要预测的类:右边式子分子是属性的条件概率和类别的先验概率,可以从统计训练数据中得到,分母对于所有实例都一样,可以不考虑,所有只需 ,返回最大概率的 ...
- MySQL数据库入门——备份数据库
mysqldump可以针对单个表.多个表.单个数据库.多个数据库.所有数据库进行导出的操作 mysqldump常用选项 -h, --host=name:服务器IP -u, --user=name:登录 ...
- plsql developer连接数据库时出现ORA-01033错误的解决方法
1.首先以管理员的身份登录本地数据库:sqlplus "/as sysdba"如下图: 2.卸载数据: shutdown normal 3. 重新装 ...
- Uploading multiple files asynchronously by blueimp jquery-fileupload
Uploading multiple files asynchronously by blueimp jquery-fileupload Solved. Fiddle: http://jsfidd ...
- DeepFaceLab参数详解之FPS与Image format
DeepFaceLab参数详解之FPS与Image format , 本文讲解两个非常简单的参数,也是大家玩这个软件最先接触到的.参数虽然非常的简单,但是非常有用,适当调整可以为你节省大量硬盘空间,大 ...
- 1.2.1 Maven到底是什么鬼
解释之前,提1个小问题. 1.1.假如你正在Eclipse下开发两个Java项目,姑且把它们称为A.B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢? 很简单,这不就是跟 ...
- 一篇非常好的分析 Selenium 2 和 3 的原理: selenium3:你安装 geckodriver 了吗?
转自:https://testerhome.com/topics/10248 另一篇:Selenium WebDriver的工作原理 https://blog.csdn.net/yoyocat915/ ...
- golang 通过reflect反射修改值
不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...
- Python中的super()用法
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不 必显式传递,系统会自动传递. 今天我们介绍的主角是su ...
- 使程序在Linux下后台运行,程序运行前后台切换
一.为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期.我们用的环境是用putty远程连接到日本Linux服务器.所以使程序在后台跑有以下三个好处: 1:我们这边是否关 ...