2.14模拟总结

前言

节日快乐!

(逃)
day10
50pts
期望:10+30+20=60
实际:0+30+20=50
rnk11

彻彻底底的摆烂局了。
但是rnk竟然没有太掉,所以我应该并不孤独…
和KH并排坐在机房里,各自看着电脑,痴痴想着各自的心事,一坐就是三个小时。
半小时三题了属于是
T1挂分是因为把题目描述的"连线"理解成了线段,但实际上是直线。
我不太确定还和KH统一了一下意见
个人感觉这个题意是真的很模糊,为什么不在比赛主页强调而要在钉钉啊!谁比赛的时候还会看钉钉啊qwq
事实是我那个靠着毁天灭地的剪枝竟然能过30,我也是惊了。

题目解析

圆与连线(circle)

挺妙的题目。
其实没有想像中那么难。
但完全没有往这边想过。
(而且题意都混淆不清)

考虑每个点落在圆上的两个切点,其对应两个旋转角组成一个区间。两个点可以同时存在的充要条件是其对应的区间相交且不包含。
然后就变成了线段问题,先按照左端点排序,然后暴力枚举第一条线段,把所有与它合法相交的线段提出来,拿右端点直接做一个最长上升子序列就行了。
(好久没写队列的最长上升子序列了,竟然莫名其妙的有些怀念)

转移石子(rock)

都叫它模拟费用流,但个人感觉这更像反悔贪心吧…
其实我考场上的大方向是对的,但是这个反悔没太整明白。
关键是给每配一对的权值加个-inf,这样就自然而然的保证必然会选满。
然后就是尝试在LCA处合并,并将反悔元素重新插入。
讨论一下几个深度的大小关系就可以得出,配对后两个反悔元素同时选取必然是不优的,所以不必担心同时取式子出bug的问题。(个人认为题解这个地方的讲解十分草率

藏宝地图(treasure)

神仙扫描线dp。
完全没有往这方面想过…由于看到连通块一共只有 O(k)O(k)O(k) 个,所以一直以为是数据结构题,疯狂尝试建 k 棵树套树。
这个题最妙的地方应该就是对于障碍的处理了,通过奇技淫巧避免了十分麻烦的上下转移,确实十分巧妙。
一个细节问题是要注意障碍要先加后删。

代码

T1

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
void write(ll x){if(x>9) write(x/10);putchar('0'+x%10);
}
const int N=2e3+100;
const double pai=acos(-1.0);
const double eps=1e-10;int n,m;
int r;
int x[N],y[N];
struct line{double x,y;bool operator < (const line oth)const{return abs(x-oth.x)>eps?x<oth.x:y<oth.y;}
}l[N];
int ans;
double a[N],q[N];
int tot,num;
int f=0;
void calc(){num=0;for(int i=1;i<=tot;i++){if(!num||a[i]>q[num]-eps) q[++num]=a[i];else{int st=1,ed=num;while(st<ed){int mid=(st+ed)>>1;if(q[mid]>a[i]-eps) ed=mid;else st=mid+1;}q[st]=a[i];}//printf("i=%d num=%d\n",i,num);}ans=max(ans,num);if(f){for(int i=1;i<=tot;i++) printf("%lf ",a[i]);printf("\nnum=%d\n\n",num);}
}signed main(){//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);n=read();r=read();for(int i=1;i<=n;i++){x[i]=read();y[i]=read();double g=atan2(y[i],x[i]),d=acos(1.0*r/sqrt(x[i]*x[i]+y[i]*y[i]));l[i].x=g-d;l[i].y=g+d;if(l[i].x<-pai) l[i].x+=2*pai;if(l[i].y>pai) l[i].y-=2*pai;if(f) printf("(%lf %lf)\n",l[i].x/pai,l[i].y/pai);if(l[i].x>l[i].y) swap(l[i].x,l[i].y);}	if(f) puts("");sort(l+1,l+1+n);if(f) for(int i=1;i<=n;i++) printf("(%lf %lf)\n",l[i].x,l[i].y);for(int now=1;now<=n;now++){a[tot=1]=l[now].y;for(int i=now+1;i<=n&&l[i].x<l[now].y+eps;i++){if(l[i].y>l[now].y-eps) a[++tot]=l[i].y;}calc();}printf("%d\n",ans);return 0;
}
/*
*/

T2

#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
void write(ll x){if(x>9) write(x/10);putchar('0'+x%10);
}
const int N=3e5+100;
const int M=2e6+100;
const double pai=acos(-1.0);
const ll inf=1e12;int n,m;
int dis[M],ls[M],rs[M];
ll val[M],tot,rub[M],num;
inline int New(ll v){int now=num?rub[num--]:++tot;val[now]=v;ls[now]=rs[now]=0;dis[now]=0;//printf(" New: now=%d v=%lld\n",now,v);return now;
}
int merge(int x,int y){if(!x||!y) return x|y;if(val[x]>val[y]) swap(x,y);rs[x]=merge(rs[x],y);if(dis[rs[x]]>dis[ls[x]]) swap(ls[x],rs[x]);dis[x]=dis[rs[x]]+1;return x;
}
inline ll top(int &x,int op=0){if(!x) return 1e18;ll res=val[x];if(op) rub[++num]=x,x=merge(ls[x],rs[x]);return res;
}
struct node{int to,nxt,w;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],w};fi[x]=cnt;
}
ll dep[N];
__gnu_pbds::priority_queue<ll,greater<ll>>a[N],b[N];
int xx[N],yy[N];
ll ans,S;
void dfs(int x,int f){for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;dep[to]=dep[x]+p[i].w;dfs(to,x);a[x].join(a[to]);b[x].join(b[to]);}//printf("\ndfs: x = %d\n",x);int o=min(xx[x],yy[x]);xx[x]-=o;yy[x]-=o;S-=o;if(xx[x]){for(int i=1;i<=xx[x];i++){//printf("  ins A: %lld\n",dep[x]);a[x].push(dep[x]);}}else if(yy[x]){//printf("  ins B: %lld\n",dep[x]-inf);for(int i=1;i<=yy[x];i++){b[x].push(dep[x]-inf);}}//printf("  a=%d topa=%lld b=%d topb=%lld\n",a[x],top(a[x]),b[x],top(b[x]));while(!a[x].empty()&&!b[x].empty()){ll u=a[x].top(),v=b[x].top();if(u+v-2*dep[x]>=0) break;ans+=u+v-2*dep[x];a[x].pop();b[x].pop();a[x].push(-v+2*dep[x]);b[x].push(-u+2*dep[x]);}return;
}signed main(){//freopen("rock.in","r",stdin);//freopen("rock.out","w",stdout);memset(fi,-1,sizeof(fi));cnt=-1;dis[0]=-1;n=read();for(int i=1;i<n;i++){int x=read(),y=read(),w=read();//printf("(%d %d %d)\n",x,y,w);addline(x,y,w);addline(y,x,w);}for(int i=1;i<=n;i++) xx[i]=read(),yy[i]=read(),S+=yy[i];dfs(1,0);printf("%lld\n",ans+S*inf);return 0;
}
/*
*/

T3

#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
void write(ll x){if(x>9) write(x/10);putchar('0'+x%10);
}
const int N=1e6;
const ll inf=1e12;int n,m;
int o=1e6;#define mid ((l+r)>>1)
#define ls (k<<1)
#define rs (k<<1|1)
int tr[N<<2],laz[N<<2];
inline void pushup(int k){tr[k]=tr[ls]+tr[rs];
}
inline void tag(int k){tr[k]=0;laz[k]=0;return;
}
inline void pushdown(int k){if(laz[k]!=-1){laz[k]=-1;tag(ls);tag(rs);}return;
}
int ask(int k,int l,int r,int x,int y){if(x>y) return 0;if(x<=l&&r<=y) return tr[k];pushdown(k);int res(0);if(x<=mid) res+=ask(ls,l,mid,x,y);if(y>mid) res+=ask(rs,mid+1,r,x,y);return res;
}
void add(int k,int l,int r,int p,int w){if(l==r){tr[k]+=w;return;}pushdown(k);if(p<=mid) add(ls,l,mid,p,w);else add(rs,mid+1,r,p,w);pushup(k);return;
}
void clear(int k,int l,int r,int x,int y){if(x<=l&&r<=y){tag(k);return;}pushdown(k);if(x<=mid) clear(ls,l,mid,x,y);if(y>mid) clear(rs,mid+1,r,x,y);pushup(k);
}//0:block
//1:treasure
//2:query
struct ope{int op,f;int x,y,id;int l,r;bool operator < (const ope oth)const{if(y!=oth.y) return y>oth.y;else if(op!=oth.op) return op<oth.op;else return f>oth.f;}
}q[N<<1];
int tot;
int val[N],ans[N];multiset<int>s;
multiset<int>::iterator it;signed main(){//freopen("treasure.in","r",stdin);//freopen("treasure.out","w",stdout);	o+=2;memset(laz,-1,sizeof(laz));m=read();for(int i=1;i<=m;i++){int a=read(),b=read(),c=read(),d=read();++a;++b;++c;++d;q[++tot]=(ope){0,1,0,d,i,a,c};q[++tot]=(ope){0,-1,0,b-1,i,a,c};}m=read();for(int i=1;i<=m;i++){int x=read(),y=read();++x;++y;q[++tot]=(ope){1,0,x,y,0,0,0};}n=read();for(int i=1;i<=n;i++){int x=read(),y=read();++x;++y;q[++tot]=(ope){2,0,x,y,i,0,0};}sort(q+1,q+1+tot);s.insert(o);for(int i=1;i<=tot;i++){if(q[i].op==0){int l=q[i].l,r=q[i].r,id=q[i].id,ed=(*s.lower_bound(q[i].l));if(q[i].f==1){s.insert(l-1);s.insert(r);int res=ask(1,1,o,l,ed);val[id]=ask(1,1,o,r+1,ed);clear(1,1,o,l,r);add(1,1,o,l-1,res);}else{s.erase(s.find(l-1));s.erase(s.find(r));add(1,1,o,l-1,-val[id]);clear(1,1,o,l,r);}}else if(q[i].op==1) add(1,1,o,q[i].x,1);else{int pos=q[i].x;int ed=(*s.lower_bound(pos));ans[q[i].id]=ask(1,1,o,pos,ed);}}for(int i=1;i<=n;i++) printf("%d\n",ans[i]);return 0;
}
/*1 3*/

总结

昨天:“现在大部分题目基本上考场上都能想到正确的方向了”
今天就直接两道题完全抓瞎…
《天 高 地 厚》
就这考试也有人AK是我没想到的。
收下我的膝盖!

明天加油吧!awa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

文章目录A - CenturyB - 200th ABC-200C - Ringos Favorite Numbers 2D - Happy Birthday! 2E - Patisserie ABC 2F - Minflip SummationKYOCERA Programming Contest 2021&#xff08;AtCoder Beginner Contest 200&#xff09; A - Century 简单的除以200200200向上取整 B…

高级进阶:Azure DevOps搞定.NET Core编译版本号自增

点击上方蓝字关注“汪宇杰博客”熟悉.NET Framework的人知道&#xff0c;我们可以通过指定AssemblyVersion为10.0.*来让编译器自增版本号。但是.NET Core和.NET Standard不行。即使有MSBump这样的开源项目&#xff0c;也有一定的缺陷。一般这样的需求会出现在CI/CD服务器上。我…

Little Boxes UVALive - 8209

Little Boxes UVALive - 8209 题意&#xff1a; 给你四个数&#xff0c;输出四个数之和&#xff0c;四个数小于等于262之内 题解&#xff1a; 这。。。这。。水题 unsigned int 0&#xff5e;4294967295 (10位数&#xff0c;4e9) int -2147483648&#xff5e;2147483647 (…

2.15模拟总结

前言 day11 期望&#xff1a;406030130 实际&#xff1a;4003070 rnk16 挂大分了。。 T2树边不加双向&#xff1a;60->0。 这什么伞兵bug啊&#xff01; 整体状态也不太好&#xff0c;T2死磕无果。 T1看出正解结果写不出来拉插&#xff0c;乐。 题目解析 T1 网格序列&am…

Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)题解

文章目录A - Tiny Arithmetic SequenceB - Do you know the second highest mountain?C - Secret NumberD - Game in Momotetsu WorldE - Xor DistancesF - Insertion SortMynavi Programming Contest 2021&#xff08;AtCoder Beginner Contest 201&#xff09;A - Tiny Arit…

Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架...

本文是关于 Newbe.Claptrap 项目主体内容的介绍&#xff0c;读者可以通过这篇文章&#xff0c;大体了解项目内容。轮子源于需求随着互联网应用的蓬勃发展&#xff0c;相关的技术理论和实现手段也在被不断创造出来。诸如 “云原生架构”、“微服务架构”、“DevOps” 等一系列关…

Rabbits UVALive - 8211

Rabbits UVALive - 8211 题意&#xff1a; n个兔子的位置&#xff0c;兔子每次可以跳到两个兔子之间&#xff0c;问最多可以跳多少下&#xff1f; 题解&#xff1a; 求出所有相邻两数的间隔&#xff0c;然后减去最小间隔就是答案 代码&#xff1a; #include <bits/std…

2.16模拟总结

前言 期望&#xff1a;100700170 实际&#xff1a;400040 rnk14 分全部挂没了&#xff0c;太行了。 T1不开longlong见祖宗&#xff0c;而且KH说的那个也有道理&#xff0c;带权之后树的重心可以不只有两个&#xff0c;所以最后还应该倍增的跳。&#xff08;然而这个地方题解似…

Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解

Caddi Programming Contest 2021(AtCoder Beginner Contest 193) A - Discount 打折浮点数除即可 B - Play Snuke 枚举判断符合要求的求最小值即可 C - Unexpressed O(n)O(\sqrt{n})O(n​)枚举aaa&#xff0c;暴力翻倍&#xff08;最小的222最多乘323232次就会超过nnn的上…

NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享

对于普通系统或者服务来说&#xff0c;一般通过打日志来进行埋点&#xff0c;然后再通过elk或splunk进行定位及分析问题&#xff0c;更有甚者直接远程服务器&#xff0c;直接操作查看日志&#xff0c;那么&#xff0c;随着业务越来越复杂&#xff0c;企业应用也进入了分布式服务…

YBTOJBZOJ:大根堆(启发式合并)

解析 如果到了链上&#xff0c;本题就是求LIS。 考虑LIS的常见队列做法&#xff0c;其本质就是维护长度为 xxx 的序列的结尾的最小值 qxq_xqx​。 那么在本题尝试如法炮制&#xff0c;对于每个节点&#xff0c;都开一个队列&#xff0c;qxq_xqx​ 表示子树内选了 xxx 个节点后…

Tree UVALive - 8212

Tree UVALive - 8212 题意&#xff1a; 有n个点&#xff0c;k个颜色&#xff0c;每个点都要被染色&#xff0c;相同颜色之间的边算是被该颜色覆盖&#xff0c;问有多少边被所有颜色覆盖 题解&#xff1a; 题目给的是无根树&#xff0c;我们可以将1默认为根然后求所有点的子…

dotnetcore-officeaddin-toolbox : Office 365 Add-in开发人员的工具箱

在上一篇文章&#xff08;.NET Core开源行动&#xff1a;一键创建Excel Add-in&#xff09; 中我给大家展示了一套为Office 365 Add-in开发人员准备的模板库&#xff0c;你可以通过 dotnet new excel & dotnet run 命令即可完成一个新的Add-in的创建和运行。关于如何加载这…

NOMURA Programming Contest 2021(AtCoder Regular Contest 121)

文章目录A - 2nd Greatest DistanceB - RGB MatchingC - Odd Even SortD - 1 or 2E - Directed TreeF - Logical Operations on TreeNOMURA Programming Contest 2021(AtCoder Regular Contest 121)A - 2nd Greatest Distance 大模拟讨论yyds 将点按x,yx,yx,y分别排序 xxx贡献…

F - Heron and His Triangle UVALive - 8206

F - Heron and His Triangle UVALive - 8206 题意&#xff1a; 给你应该n&#xff0c;然后求一个最小的t&#xff0c;问长度为t-1&#xff0c;t&#xff0c;t1所组成的三角形的面积为整数,t>n 题解&#xff1a; 这题我一开始被题目的-1给迷惑了&#xff0c;以为筛出所有…

YBTOJ:最短时间(长链剖分、线段树)

解析 不难得到最优策略&#xff1a;先尽可能的快的送死直到路径畅通无组&#xff0c;然后一口气冲到t点。 现在的难点就在于如何尽可能的快的送掉特定的次数。 不难发现&#xff0c;花费时间关于死亡次数的函数必然是一个下凸包。 设 fx,if_{x,i}fx,i​ 表示子树内距离 xxx 不…

Asp.Net Core对接钉钉群机器人

钉钉作为企业办公越来越常用的软件&#xff0c;对于企业内部自研系统提供接口支持&#xff0c;以此来打通多平台下的数据&#xff0c;本次先使用最简单的钉钉群机器人完成多种形式的消息推送&#xff0c;参考钉钉开发文档中自定义机器人环节&#xff0c;此次尝试所花的时间不多…

转录组无参比对教程

写在前面 2023年将结束&#xff0c;小杜的生信笔记分享个人学习笔记也有2年的时间。在这2年的时间中&#xff0c;分享算是成为工作、学习和生活中的一部分。自己为了运行和维护社群也算花费大量的时间和精力&#xff0c;自己认为还算满意吧。对于个人来说&#xff0c;自己一直…

【学习笔记】左偏树的可持久化(【模板】k短路 / [SDOI2010]魔法猪学院)

文章目录descriptionsolutioncode【模板】k短路 / [SDOI2010]魔法猪学院description iPig 在假期来到了传说中的魔法猪学院&#xff0c;开始为期两个月的魔法猪训练。经过了一周理论知识和一周基本魔法的学习之后&#xff0c;iPig 对猪世界的世界本原有了很多的了解&#xff1…

Infinite Fraction Path UVALive - 8207

Infinite Fraction Path UVALive - 8207 题意&#xff1a; 给你n个数&#xff0c;每个数在0到9之间&#xff0c;每个数的下标一次是0~n-1&#xff0c;然后他所能走到的数为(i^21)%n,i为他本身的下标&#xff0c;然后让你求走n步&#xff0c;每一步的数相连&#xff0c;形成的…