Noip模拟34 2021.8.9
T1 Merchant
一眼二分,然后想了想维护凸包,好像并没有什么关系,
然后又想了想维护一个栈,发现跳指针细节过多不想打
最后直接打了二分,大点跑的飞快,感觉比较稳,出来$78$分
是没用神奇的$\textit{nth_element}$导致排序时间长了,加上就$A$了
1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int NN=1e6+5;
5 int n,m,S,tmp1,zhi[NN];
6 struct SNOW{int k,b;}p[NN];
7 inline bool cmp1(SNOW a,SNOW b){return a.b==b.b?a.k>b.k:a.b>b.b;}
8 inline bool cmp(int a,int b){return a>b;}
9 inline bool check(int t){
10 int ans=0;
11 for(int i=1;i<=n;i++) zhi[i]=p[i].k*t+p[i].b;
12 nth_element(zhi+1,zhi+m+1,zhi+n+1,cmp);
13 for(int i=1;i<=m;i++){
14 if(zhi[i]<=0) continue;
15 ans+=zhi[i];
16 if(ans>=S) return 1;
17 }
18 if(ans<S) return 0;
19 else return 1;
20 }
21 namespace WSN{
22 inline short main(){
23 // freopen("merchant3.in","r",stdin);
24 scanf("%lld%lld%lld",&n,&m,&S);
25 for(int i=1;i<=n;i++){
26 scanf("%lld%lld",&p[i].k,&p[i].b);
27 if(p[i].k<=0) ++tmp1;
28 }
29 if(tmp1==n){puts("0");return 0;}
30 sort(p+1,p+n+1,cmp1);int tot=0;
31 for(int i=1;i<=m;i++){
32 tot+=p[i].b;
33 if(tot>=S){puts("0");return 0;}
34 }
35 int l=0,r=1e9,ans=l;
36 while(l<=r){
37 int mid=l+r>>1;
38 if(check(mid)) ans=mid,r=mid-1;
39 else l=mid+1;
40 }printf("%lld\n",ans);
41 return 0;
42 }
43 }
44 signed main(){return WSN::main();}
没有鸭行的优秀代码
T2 Equation
大力的进行跳爹,期望加上个$spj$能多拿几分,只是因为思想太清奇把题想难了。。
直接用柿子等量带换往下推,能推出来加入的方程用$x_1$怎么表示,
然后发现可以直接预处理出来任意一个点的只关于$x_1$一个未知数的表达式里边的常量
用线段树维护这个常量即可实现对$x_1$的$log$级求解
发现对于一个深度为偶数的点,他满足奇加偶减(奇偶对于深度)的关系(就是那个求$x_1$的表达式)
那么我们只把所有的点当作偶点,进行维护,每次查询的时候判断一下新加入方程两点的深度奇偶性,适当进行反转即可
线段树要卡一下常,建议快读。。。
1 #include<bits/stdc++.h>
2 #define lid (id<<1)
3 #define rid (id<<1|1)
4 #define LL long long
5 #define rint register int
6 using namespace std;
7 inline LL read(){
8 int x=0,f=1; char ch=getchar();
9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
11 return x*f;
12 }
13 int n,q,w[1000001],sm[1000001],opt,uu,vv,xx,cha,dfn[1000001],dep[1000001],siz[1000001],cnt,head[1000001],rp;
14 LL ss,ans1,ans2;
15 struct SNOW{int to,next;};SNOW e[1000001];
16 inline void add(int x,int y){e[++rp]=(SNOW){y,head[x]}; head[x]=rp;}
17 struct SNOWtree{
18 LL sum[1000001<<2],laz[1000001<<2];
19 inline void pushdown(int id){
20 if(!laz[id]) return;
21 laz[lid]+=laz[id]; laz[rid]+=laz[id];
22 sum[lid]+=laz[id]; sum[rid]+=laz[id];
23 laz[id]=0;
24 }
25 inline void insert(int id,int l,int r,int pos,LL v){
26 if(l==r){sum[id]=v;return;}
27 int mid=l+r>>1;
28 if(pos<=mid) insert(lid,l,mid,pos,v);
29 else insert(rid,mid+1,r,pos,v);
30 }
31 inline void update(int id,int l,int r,int L,int R,int v){
32 if(L<=l&&r<=R){
33 sum[id]+=v*1ll;laz[id]+=v*1ll;
34 return;
35 }pushdown(id); int mid=l+r>>1;
36 if(R<=mid) update(lid,l,mid,L,R,v);
37 else if(L>mid) update(rid,mid+1,r,L,R,v);
38 else update(lid,l,mid,L,mid,v),update(rid,mid+1,r,mid+1,R,v);
39 }
40 inline LL query(int id,int l,int r,int pos){
41 if(l==r) return sum[id];
42 pushdown(id);int mid=l+r>>1;
43 if(pos<=mid) return query(lid,l,mid,pos);
44 else return query(rid,mid+1,r,pos);
45 }
46 }tr;
47 inline void dfs(int f,int x){
48 dep[x]=dep[f]+1; dfn[x]=++cnt; siz[x]=1;
49 (dep[x]&1)?(sm[x]=sm[f]-w[x]):(sm[x]=sm[f]+w[x]); tr.insert(1,1,n,dfn[x],sm[x]);
50 for(rint i=head[x];i;i=e[i].next) dfs(x,e[i].to),siz[x]+=siz[e[i].to];
51 }
52 namespace WSN{
53 inline short main(){
54 // freopen("1.in","r",stdin);
55 n=read();q=read();
56 if(!q) return 0;
57 for(rint i=1,u;i<n;++i){
58 u=read(); w[i+1]=read();
59 add(u,i+1);
60 }dfs(0,1);
61 while(q--){
62 opt=read();
63 if(opt==2){
64 uu=read();vv=read();
65 cha=w[uu]-vv;w[uu]=vv;
66 tr.update(1,1,n,dfn[uu],dfn[uu]+siz[uu]-1,(dep[uu]&1)?cha:-cha);
67 continue;
68 }
69 if(opt==1){
70 uu=read();vv=read();ss=read();
71 ans1=tr.query(1,1,n,dfn[uu]),ans2=tr.query(1,1,n,dfn[vv]);
72 if(dep[uu]&1) ans1=-ans1;
73 if(dep[vv]&1) ans2=-ans2;
74 ss-=ans1+ans2;
75 xx=((dep[uu]&1)?1:-1)+((dep[vv]&1)?1:-1);
76 if(!xx&&!ss){puts("inf");continue;}
77 if(!xx||(ss*1.0/xx*1.0-ss/xx!=0)){puts("none");continue;}
78 printf("%lld\n",ss/(xx*1ll));continue;
79 }
80 }
81 return 0;
82 }
83 }
84 signed main(){return WSN::main();}
T3 Rectangle
如果题解看不明白就看它
再不明白就看它
再再不明白就看:
1 #include<bits/stdc++.h>
2 #define rin register int
3 #define pii pair<int,int>
4 #define mp make_pair
5 #define val first
6 #define num second
7 using namespace std;
8 inline int read(){
9 int x=0,f=1; char ch=getchar();
10 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
11 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
12 return x*f;
13 }
14 const int p=1e9+7;
15 int n,maxn;
16 long long ans;
17 pii bin[5005];
18 bool vis[2505];
19 struct SNOW{int x,y;}s[10005];
20 vector<int> pos[2505];
21 struct tree{
22 pii tr[2505];
23 inline int lowbit(int x){return x&(-x);}
24 inline void update(int x,pii v){for(rin i=x;i<=2501;i+=lowbit(i)) tr[i].val+=v.val,tr[i].num+=v.num;}
25 inline pii query(int x){pii ans=mp(0,0);for(rin i=x;i;i-=lowbit(i)) ans.val+=tr[i].val,ans.num+=tr[i].num;return ans;}
26 }S[2505];
27 namespace WSN{
28 inline short main(){
29 n=read();
30 for(rin i=1;i<=n;++i){
31 s[i].x=read(),s[i].y=read();
32 pos[s[i].x].push_back(s[i].y);
33 maxn=max(maxn,s[i].x);
34 }
35 for(rin i=1;i<=maxn;++i) sort(pos[i].begin(),pos[i].end());
36 for(rin i=1;i<=maxn;++i){
37 memset(vis,0,sizeof(vis));
38 for(rin j=0;j<pos[i].size();++j) if(!vis[pos[i][j]]){
39 S[i].update(pos[i][j],mp(pos[i][j],1));
40 vis[pos[i][j]]=1;
41 }
42 for(rin j=i-1;j>=1;--j){
43 int it1=0,it=0;
44 for(rin k=0;k<pos[j].size();++k){
45 if(!vis[pos[j][k]]){
46 S[i].update(pos[j][k],mp(pos[j][k],1));
47 vis[pos[j][k]]=1;
48 }
49 while(it1<pos[i].size()&&pos[i][it1]<pos[j][k]) bin[++it]=mp(pos[i][it1],0),++it1;
50 bin[++it]=mp(pos[j][k],1);
51 }
52 while(it1<pos[i].size()) bin[++it]=mp(pos[i][it1],0),++it1;
53 it1=it-1; int it0=2501;
54 if(it1>=1){
55 for(rin k=it;k>=it1;--k){
56 while(it1>=1&&bin[k].num==bin[it1].num) --it1;
57 if(it1){
58 pii sum1,sum3=S[i].query(it0),sum4=S[i].query(bin[k].val-1);
59 sum1=mp(sum3.val-sum4.val,sum3.num-sum4.num);
60 pii sum2=S[i].query(bin[it1].val);
61 (ans+=1ll*(i-j)*(sum1.val*sum2.num-sum2.val*sum1.num))%=p;
62 it0=bin[k].val-1;
63 }
64 else break;
65 }
66 }
67 }
68 }
69 printf("%lld\n",ans);
70 return 0;
71 }
72 }
73 signed main(){return WSN::main();}
Noip模拟34 2021.8.9的更多相关文章
- noip模拟34[惨败]
noip模拟34 solutions 我从来不为失败找借口,因为败了就是败了,没人听你诉说任何事情 今天很伤感,以来考试没考好,二来改题改半天也改不出来 这次算是炸出来了我经常范的一些错误,比如除以0 ...
- 2021.8.9考试总结[NOIP模拟34]
T1 Merchant 如果$t=0$时不能达到$s$,那么所拿物品的价值一定关于时间单调递增,答案单调.因此可以特判$0$后二分. 用$sort$复杂度被卡,要用$\textit{nth_eleme ...
- Noip模拟70 2021.10.6
T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...
- Noip模拟76 2021.10.14
T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...
- Noip模拟69 2021.10.5
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...
- Noip模拟63 2021.9.27(考场惊现无限之环)
T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判 ...
- Noip模拟61 2021.9.25
T1 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万 ...
- Noip模拟59 2021.9.22
新机房首模拟变倒数 T1 柱状图 关于每一个点可以做出两条斜率分别为$1,-1$的直线, 然后题意转化为移动最少的步数使得所有点都在某一个点的两条直线上 二分出直线的高度,判断条件是尽量让这条直线上部 ...
- Noip模拟52 2021.9.13
T1 异或 比较稳的切掉 观察数据范围,无法线性筛啥的,根号复杂度也会死,于是只能考虑$log$级 然后打表 发现当$n$为$2^i$时的答案是一个可递归数列: $1,3,7,15,31,63,127 ...
随机推荐
- redis跨实例迁移 & redis上云
1)redis跨实例迁移--源实例db11迁移至目标实例db30 root@fe2e836e4470:/data# redis-cli -a pwd1 -n 11 keys \* |while rea ...
- Vue状态管理Vuex简单使用
状态管理保存在store\index.js中,简单说明如下 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export def ...
- SpringAOP-动态代理,日志注入
SpringAOP 前言: 1.AOP定义? 用来干啥的? 怎么用?(怎么跑通它的思路) 代理模式 为啥要学代理模式? -- 因为是SpringAop的底层 原有的代码不敢动,一动就是Bug,.所以使 ...
- 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 百篇博客分析OpenHarmony源码 | v33.02
百篇博客系列篇.本篇为: v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁 ...
- P7295-[USACO21JAN]Paint by Letters P【平面图欧拉公式】
正题 题目链接:https://www.luogu.com.cn/problem/P7295 题目大意 给出\(n*m\)的网格,每个格子上有字母,相同字母的四联通相邻格子为连通,每次询问一个子矩阵求 ...
- salesforce零基础学习(一百零八)MFA
本篇参考:https://security.salesforce.com/mfa https://sfdc.co/bvtuQT (MFA官方研讨会的文档) https://sfdc.co/iwiQK ...
- Mysql explain中key_len的作用及计算规则
key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要. 在计算key_len时,下面是一些需要考虑的点: 索引字段的附加信 ...
- windows下将Anaconda移位置(C盘转移至D盘)
1.首先说明一下我的安装情况: (1)Window10系统 (2)Anaconda安装在C盘 2.由于Anaconda安装在C盘经常会涉及权限问题,在安装torch的时候让我萌发了转移磁盘的想法(拒绝 ...
- 自定义view---仪表盘--kotlin
我们知道一个自定义view一般来说需要继承view或者viewGroup并实现onMeasure, onLayout, onDraw方法. 其中onMeasure用于测量计算该控件的宽高, onLay ...
- MSSQL还原数据库,更改用户登陆权限
有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...