2019.10.30 csp-s模拟测试94 反思总结
头一次做图巨的模拟题OWO
自从上一次听图巨讲课然后骗了小礼物以后一直对图巨印象挺好的233
T1:
对于XY取对数=Y*log(x)
对于Y!取对数=log(1*2*3*...*Y)=log1+log2+log3+...+logY
因为数字大小不超过1e5,直接累加最后比较就可以了
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int t,x,y;
double a,b;
int main()
{
freopen("yuuutsu.in","r",stdin);
freopen("yuuutsu.out","w",stdout);
scanf("%d",&t);
while(t--){
scanf("%d%d",&x,&y);
a=y*log(x);
b=;
for(int i=;i<=y;i++){
b+=log(i);
}
if(a<=b)printf("Yes\n");
else printf("No\n");
}
return ;
}
T2:
每一次操作会让区间整体加或减->在差分数组上首位加减
列出目标序列的差分数组,可以进行操作让一个位置的数字移动k步,如果有大小相同的数字撞在一起就会消掉,不同的话可以合并。想起星空这道题,不同的是今天的T2只能走k一种步数且差分值并不只代表一种状态
目标是要让所有的值变成0,又想到一道跳斑马线的题……?考虑把位置对于k取模余数不同的数字分开处理。维护位置对于k取模后余数为下标,记录差分值之和的m数组。用树状数组维护当前的m是否都为0。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e6+;
int n,k,q,a[N],sum[N],m[N];
long long tree[N];
void add(int x,int y){
for(;x<=k;x+=(x&-x))tree[x]+=y;
}
long long ask(int x){
long long num=;
for(;x;x-=(x&-x))num+=tree[x];
return num;
}
int main()
{
freopen("august.in","r",stdin);
freopen("august.out","w",stdout);
scanf("%d%d%d",&n,&k,&q);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
m[i%k]+=a[i]-a[i-];
}
m[(n+)%k]+=-a[n];
for(int i=;i<k;i++){
add(i+,(m[i]!=));
}
if(!ask(k))printf("Yes\n");
else printf("No\n");
for(int i=,x,pos;i<=q;i++){
scanf("%d%d",&pos,&x);
int pos0=pos%k,pos1=(pos+)%k;
int val=(m[pos0]!=),val1=(m[pos1]!=);
m[pos0]=m[pos0]-a[pos]+a[pos-];
m[pos1]=m[pos1]-a[pos+]+a[pos];
a[pos]+=x;
m[pos0]=m[pos0]+a[pos]-a[pos-];
m[pos1]=m[pos1]+a[pos+]-a[pos];
add(pos0+,(m[pos0]!=)-val);
add(pos1+,(m[pos1]!=)-val1);
if(!ask(k))printf("Yes\n");
else printf("No\n");
}
return ;
}
发现自己对于m是否都为0的处理过于麻烦了…这是何种山路十八弯的脑回路才会想到这种处理…
其实是中途思路锅了,保留了树状数组的写法XD其实直接记一个m不为0的数量,每次m变化的时候进行更新就好了
T3:
将问题转化成,对于树上的一个点,会对多少区间产生贡献。
线段树维护子树中存在哪些位置的点,线段树下标是在a数组中的位置。如果这个点可以对一段区间产生贡献,那么这段区间在线段树种一定是连续的1,中间若存在0则代表这段区间中在更高的地方存在点。在线段树上统计答案,记录线段树每个节点从左端点开始最长的一段1的长度lonl,从右端点开始最长的一段1的长度lonr,以及包含的区间个数val。val=左儿子的val+右儿子的val+左儿子lonr*右儿子lonl(端点在两边的区间数量)。这样计算一定不重不漏,有线段树分治的意味。
维护节点x的线段树的时候,对所有儿子进行线段树合并,再把x点insert进去。注意当前节点线段树root的区间个数要减去节点儿子们的区间个数,才能用来累计答案。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=;
int n,tot,cnt;
int ver[N],Next[N],head[N];
int a[N],b[N],pos[N],T[N],L[N*],R[N*],lonl[N*],lonr[N*];
long long ans,sum[N],val[N*];
void add(int x,int y){
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
}
void update(int p,int l,int r){
int mid=(l+r)/;
if(lonl[L[p]]==mid-l+)lonl[p]=mid-l++lonl[R[p]];
else lonl[p]=lonl[L[p]];
if(lonr[R[p]]==r-mid)lonr[p]=r-mid+lonr[L[p]];
else lonr[p]=lonr[R[p]];
val[p]=val[L[p]]+val[R[p]]+1ll*lonr[L[p]]*lonl[R[p]];
}
void change(int &p,int p0,int l,int r){
if(!p){
p=p0;
return;
}
int mid=(l+r)/;
if(L[p0])change(L[p],L[p0],l,mid);
if(R[p0])change(R[p],R[p0],mid+,r);
update(p,l,r);
}
void ins(int &p,int l,int r,int pos){
if(!p)p=++cnt;
if(l==r){
lonl[p]=lonr[p]=;
val[p]=;
return;
}
int mid=(l+r)/;
if(pos<=mid)ins(L[p],l,mid,pos);
else ins(R[p],mid+,r,pos);
update(p,l,r);
}
void dfs(int x){
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
dfs(y);
sum[x]+=sum[y];
change(T[x],T[y],,n);
}
ins(T[x],,n,pos[x]);
long long num=val[T[x]];
ans+=(num-sum[x])*b[x];
sum[x]=num;
}
int main()
{
freopen("sagittarius.in","r",stdin);
freopen("sagittarius.out","w",stdout);
scanf("%d",&n);
for(int i=,x;i<=n;i++){
scanf("%d",&x);
add(x,i);
// st[i][0]=x;
}
for(int i=;i<=n;i++)scanf("%d",&a[i]),pos[a[i]]=i;
for(int i=;i<=n;i++)scanf("%d",&b[i]),ans+=b[i];
dfs();
printf("%lld\n",ans);
return ; }
2019.10.30 csp-s模拟测试94 反思总结的更多相关文章
- csp-s模拟测试94
csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- 2019/10/17 CSP模拟 总结
T1 补票 Ticket 没什么好说的,不讲了 T2 删数字 Number 很后悔的是其实考场上不仅想出了正解的方程,甚至连优化都想到了,却因为码力不足只打了\(O(n^2)\)暴力,甚至还因为细节挂 ...
- 2019.8.10 NOIP模拟测试16 反思总结【基本更新完毕忽视咕咕咕】
一如既往先放代码,我还没开始改… 改完T1滚过来了,先把T1T2的题解写了[颓博客啊] 今天下午就要走了,没想到还有送行的饯别礼,真是欣喜万分[并没有] 早上刚码完前面的总结,带着不怎么有希望的心情开 ...
随机推荐
- VI/VIM 无法使用系统剪贴板(clipboard)
来自: http://www.bubuko.com/infodetail-469867.html vim 系统剪贴板 "+y 复制到系统剪切板 "+p 把系统粘贴板里的内容粘贴到v ...
- 6_5.springboot2.x数据整合springData JPA
1.配置文件 pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</g ...
- 查出当前操作数据库的登入名SUSER_NAME()
select SUSER_NAME() 一般和触发器一起用来监控是谁对表做了操作
- 透视jvm之垃圾回收
JVM是JAVA世界的核心,了解它有助于我们更好调试,调优和开发程序,最近散仙在看JAVA特种兵一书,看完觉得,作者写的内容还是挺不错,大家感兴趣的,也可以购买本温故而知新下. 在JVM中,我们经常提 ...
- python requests 高级用法 -- 包括SSL 证书错误的解决方案
Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.S ...
- logger----->模块级别的函数
#_author:star#date:2019/11/6#logger----->模块级别的函数#文件与屏幕同时显示日志信息import logginglogger=logging.getLog ...
- 数论整除——cf1059D
用map是卡着过去的..题解用vector+离散化后常数小了十倍.. 总之就是把所有模数给保存下来然后离散化,再去匹配一下即可,最后有个细节 自己的 #include<bits/stdc++.h ...
- LUOGU P4163 [SCOI2007]排列
传送门 解题思路 首先我们发现这道题s的长度很小,所以考虑点暴力的做法,状压dp或搜索.本蒟蒻搜索永远调不对,所以就写了个状压dp.因为所有s里的数都要出现一次,并且最后的答案是要求整除,那么我们设d ...
- springboot导入excel到mysql
@Controller @RequestMapping(path = "/excel") public class ImportController { @Autowired pr ...
- memcache课程---4、php+memcache如何让用户跨域登录
memcache课程---4.php+memcache如何让用户跨域登录 一.总结 一句话总结: 让所有服务器共用一台memcache缓存,即可达到跨域的目的 1.session跨域:修改php配置文 ...