T1 yuuustu:

可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$

然后我就用神奇0.4骗分水过

 #include<bits/stdc++.h>
using namespace std;
const int N=1e6+;
struct BigInt{
int a[];
BigInt(){memset(a,,sizeof(a));a[]=a[]=;}
BigInt friend operator * (BigInt x,int y){
int len=x.a[],las=;
for(register int i=;i<=len;++i){
x.a[i]=x.a[i]*y+las;
las=x.a[i]/;
x.a[i]%=;
if(i==len&&las) ++len;
}
return x.a[]=len,x;
}
void print(){
for(int i=a[];i>=;--i) cout<<a[i];
}
};
inline bool chk(BigInt a,BigInt b){
for(int i=;i<=a.a[];++i) if(a.a[i]!=b.a[i]) return ;
return ;
}
inline bool cmp(BigInt a,BigInt b){//x^y y!
if(a.a[]==b.a[]) if(chk(a,b)) return ;
if(a.a[]^b.a[]) return a.a[]<b.a[];
else{
for(register int i=a.a[];i>=;--i){
if(a.a[i]==b.a[i]) continue;
if(a.a[i]>b.a[i]) return ;
else if(a.a[i]<b.a[i]) return ;
}
}
}
void work_1(int x,int y){
if(x>y*0.4) puts("No");
else puts("Yes");
}
int main(){
freopen("yuuutsu.in","r",stdin);
freopen("yuuutsu.out","w",stdout);
int T;
scanf("%d",&T);register int x,y;
while(T--){
scanf("%d%d",&x,&y);
if(x>||y>){work_1(x,y);continue;}
BigInt Fir,Sec;
Fir.a[]=Fir.a[]=;
Sec.a[]=Sec.a[]=;
for(register int i=;i<=y;++i) Fir=Fir*x;
for(register int i=;i<=y;++i) Sec=Sec*i;
//Fir.print();puts("");Sec.print();
if(cmp(Fir,Sec)) puts("Yes");
else puts("No");
}
fclose(stdin);
fclose(stdout);
return ;
}

yuuutsu

T2 august:

先考虑暴力,我们一个一个考虑每个位置,暴力每个位置置为零,当到最后k个时,看一下是否都为零,如果是Yes,否则No。

考虑优化这个过程因为是个区间修改,所以考虑差分,我们维护一个差分数组,发现只有在模k相等的位置才会互相影响,所以维护一个sum数组,含义为模k为i的下标的差分数组之和,这样只要看他是否全为0即可。每次修改只需维护一个桶,每次修改两个位置就好。

 #include<bits/stdc++.h>
using namespace std;
const int N=2e6+;
int a[N],tong[N];
int main(){
freopen("august.in","r",stdin);
freopen("august.out","w",stdout);
int n,k,q,cnt=;
scanf("%d%d%d",&n,&k,&q);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<=n+;++i) tong[i%k]+=(a[i]-a[i-]);
for(int i=;i<k;++i) if(tong[i]) cnt++;
if(cnt) puts("No");
else puts("Yes");
for(int i=;i<=q;++i){
int pos,w;
scanf("%d%d",&pos,&w);
if(tong[pos%k]){
tong[pos%k]+=w;
if(!tong[pos%k]) cnt--;
}
else{
tong[pos%k]+=w;
if(tong[pos%k]) cnt++;
}
++pos,w*=-;
if(tong[pos%k]){
tong[pos%k]+=w;
if(!tong[pos%k]) cnt--;
}
else{
tong[pos%k]+=w;
if(tong[pos%k]) cnt++;
}
if(cnt) puts("No");
else puts("Yes");
}
}

august

T3 sagittarius:

考场上一直想如何去掉非LCA的祖先的贡献,没有想出来,看了题解后发现是非常巧妙的差分处理,即我们设出一个新权值$wt[x]=val[x]-val[fa[x]]$,这样就避免了重复贡献,再用新权值乘以他的子树中所有连续区间即可,发现这个东西暴力统计是布星的,所以我们考虑用线段树合并维护每一个区间(这里所说的区间是子树)从左端点开始的最长连续区间,从右端点开始的最长连续区间和区间内的连续子区间数,则$sn[x]=sn[ls[x]]+sn[rs[x]]+rm[ls[x]]*lm[rs[x]]$,$lm$和$rm$的维护分类讨论即可。

 #include<bits/stdc++.h>
using namespace std;
const int N=2e5+,M=N*;
#define int long long
int first[N],nex[N<<],to[N<<],tot;
int fa[N],d[N],val[N],rk[N],ans,n,a[N],wt[N];
int root[M],lm[M],rm[M],sn[M],ls[M],rs[M];
void add(int a,int b){
to[++tot]=b,nex[tot]=first[a],first[a]=tot;
}
void update(int p,int l,int r){ int mid=l+r>>;
if(lm[ls[p]]==mid-l+) lm[p]=lm[ls[p]]+lm[rs[p]];
else lm[p]=lm[ls[p]];
if(rm[rs[p]]==r-mid) rm[p]=rm[rs[p]]+rm[ls[p]];
else rm[p]=rm[rs[p]];
sn[p]=sn[ls[p]]+sn[rs[p]]+lm[rs[p]]*rm[ls[p]];
}
int merge(int x,int y,int l,int r){
if(!x||!y) return x|y;
int mid=(l+r)>>;
ls[x]=merge(ls[x],ls[y],l,mid);
rs[x]=merge(rs[x],rs[y],mid+,r);
update(x,l,r);
return x;
}
int cnt=;
void insert(int &x,int l,int r,int pos){
if(!x) x=++cnt;
if(l==r) return lm[x]=,rm[x]=,sn[x]=,void();
int mid=(l+r)>>;
if(pos<=mid) insert(ls[x],l,mid,pos);
else insert(rs[x],mid+,r,pos);
update(x,l,r);
}
void dfs(int x){
insert(root[x],,n,rk[x]);
wt[x]=val[x]-val[fa[x]];
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(y==fa[x]) continue;
dfs(y);
root[x]=merge(root[x],root[y],,n);
}
ans+=wt[x]*sn[root[x]];
//cout<<"x=="/*<<x<<" ans=="*/<<sn[root[x]]<<endl;
}
signed main(){
freopen("sagittarius.in","r",stdin);
freopen("sagittarius.out","w",stdout);
scanf("%lld",&n);
for(int i=;i<=n;++i) {
scanf("%lld",&fa[i]);
add(fa[i],i);
add(i,fa[i]);
}
//for(int i=1;i<=n;++i) cout<<fa[i]<<" ";cout<<endl;
for(int i=;i<=n;++i) scanf("%lld",&a[i]),rk[a[i]]=i;
//for(int i=1;i<=n;++i) cout<<rk[i]<<" ";cout<<endl;
for(int i=;i<=n;++i) scanf("%lld",&val[i]);
dfs();
printf("%lld\n",ans);
}

sagittarius

CSP-S 模拟测试94题解的更多相关文章

  1. [CSP-S模拟测试94]题解

    A.凉宫春日的忧郁 高精硬上似乎跑不过,其实可以都取个$log$.那么只需要比较$y\times log ^x$和$\sum \limits _{i=1}^y log^i$就好了. #include& ...

  2. csp-s模拟测试94

    csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...

  3. CSP-S模拟测试 88 题解

    T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...

  4. CSP-S 模拟测试92 题解

    话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...

  5. CSP-S 模拟测试57题解

    人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念. 题解: T1 天空龙: 大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物. T ...

  6. CSP-S 模拟测试 51 题解

    考试过程: 惯例先看一遍三道题,T1 一开始反应要求割点,但是这是有向图,肯定不能求割点,康了一下数据范围,有40%是树的,还不错,决定待会在打. 看T2 字符串题,完了我字符串最弱了,肯定只能打暴力 ...

  7. CSP-S 模拟测试 45 题解

    由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...

  8. [CSP-S模拟测试97]题解

    A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...

  9. [CSP-S模拟测试96]题解

    以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...

随机推荐

  1. asp.net core-14.JWT认证授权 生成 JWT Token

    源码下载 语言组织能力不好 ,看这个 视频 用visual studio code打开文件,运行dotnet watch run 之后在postman里面去访问 拿到Token后

  2. Vs code 下设置python tasks.json

    { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.jso ...

  3. Nginx学习笔记(四):基本数据结构

    目录 Nginx的一些特点 Nginx自定义整数类型 异常机制错误处理 内存池 字符串 时间与日期 运行日志   Nginx的一些特点 高性能 采用事件驱动模型,可以无阻塞的处理海量并发连接 高稳定性 ...

  4. nacos搭建

    1.下载执行包 直接官网 https://nacos.io/zh-cn/docs/quick-start.html 2. 建表 3. 启动 http://10.0.0.113:8848/nacos/i ...

  5. 谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN

    谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN 朱晓霞发表于目标检测和深度学习订阅 235 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 ...

  6. C# Entity Framework The ObjectContext instance has been disposed and can no longer be used for operations that require a connection

    The ObjectContext instance has been disposed and can no longer be used for operations that require a ...

  7. (十四)Activitivi5之个人任务分配

    一.个人任务分配 1.1 方式一:直接流程图配置中写死: 1.2 方式二:使用流程变量 我们在启动流程的时候设置流程变量即可 /** * 启动流程实例 */ @Test public void sta ...

  8. (二十四)JSP标签之基本标签(<jsp:标签名>)

    一.常用标签 1.1 jsp中标签一共有8中,其中常用的有6中,本文将介绍这6种常用的标签. 1.2 6种标签 1. <jsp:include> <jsp:include>标签 ...

  9. LeetCode 1047. Remove All Adjacent Duplicates In String

    1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项) 链接:https://leetcode-cn.com/problems/r ...

  10. Sqlserver查询每组数据中最大的一条数据

    select * from ( SELECT ROW_NUMBER() over (PARTITION By name order by val) as rowId,tb_test.* FROM tb ...