Full_of_Boys训练1总结

题目来源: 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)

A. Archery Tournament

每次查询,找这个位置前面的15个圆,后边15个圆来更新答案。set维护一下圆就行。为什么对,官方题解:可以证明经过某一条竖线的圆不超过logC个(C=1e9)

#include <bits/stdc++.h>
#define pb(x) push_back(x)
const int maxn = 200000+5;
const int lim = 15;
typedef long long ll;
using namespace std;
int n;
struct qq{int opt;ll x,y;}Q[maxn];
struct node{int id;ll x,y;node(){}node(ll a,ll b,int c){x=a;y=b;id=c;}bool operator < (const node a)const{if(a.x==x)return y < a.y;return x < a.x;}
};
set<node>s;
set<node>::iterator it,it1;
ll dis(ll x1,ll y1,ll x2,ll y2){return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
ll in_cir(ll x1,ll y1,ll x2,ll y2){if(dis(x1,y1,x2,y2)<y1*y1)return 1;return 0;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;++i){int opt;ll x,y;scanf("%d%I64d%I64d",&opt,&x,&y);Q[i].opt=opt;Q[i].x=x;Q[i].y=y;}for(int i=1;i<=n;++i){if(Q[i].opt==1)s.insert(node(Q[i].x,Q[i].y,i));else{int cc=0,ans=-1;it = s.lower_bound(node(Q[i].x,0,0));for(;it!=s.end()&&cc<=lim;++cc,++it){if(in_cir((*it).x,(*it).y,Q[i].x,Q[i].y)){s.erase(it);ans=(*it).id;break;}}cc=0;it1=s.lower_bound(node(Q[i].x,0,0));for(;it1!=s.begin()&&cc<=lim;--it1,++cc){if(in_cir((*it1).x,(*it1).y,Q[i].x,Q[i].y)){s.erase(it1);ans=(*it1).id;break;}}it1=s.begin();if(in_cir((*it1).x,(*it1).y,Q[i].x,Q[i].y)){s.erase(it1);ans=(*it1).id;}printf("%d\n",ans);}}return 0;
}

反思:这种重圆不多,现场猜测到了。。。xi ka xi。。。我的思路是直接将,每个圆包含的关键点暴力的加上,这个圆的标记,会Mle,但应该不会Tle,队友说线段树,当场只想到一种比暴力还糟的做法。。。下来思考了一下,既然直接暴力mle,那我分块暴力。每个块维护一个set存圆,然后添加和删除圆,就直接更新这个圆覆盖过的块。对于查询,每次暴力这个块和他左右两边的块。??后来觉得不对,毕竟按横坐标分块暴力,直觉上无法保证复杂度。那可不可以在块内二分出那个横坐标最近的圆?然后小范围暴力一下?那还分啥块?一个set就搞定了?后来,看了下题解发现小范围暴力,是有正确性的。艰难AC。。。另一种思路,我们分块到底?既然不能按横坐标分块,那就按照圆分块?这样每个圆内最多有3*√n个x坐标?复杂度还很稳定。思考一下,发现如果不用这个结论,还是没有特别真的做法。。。还是直接set做吧。223

现场时,脑子就跟挂机了一样,下来分析一下,感觉并不是一道不可做的题。这是辣鸡RRRR_wys长期的问题。。。希望有高人,能指点一下,如何保证现场赛脑子在线。。。

B. Box

分类讨论

#include <bits/stdc++.h>
using namespace std;
int a[3],w,h,ww,hh;
bool ck1(){ww=a[1]*2+a[2]*2;hh=a[0]+a[2]*2;if(ww<=w&&hh<=h)return 1;ww=a[1]*2+a[2]*2;hh=a[0]+a[1]+a[2];if(ww<=w&&hh<=h)return 1;ww=a[0]+a[1]+a[2]*3;hh=a[0]+a[1];if(ww<=w&&hh<=h)return 1;ww=a[0]+a[1]+a[2]*2;hh=a[0]+a[1]+a[2];if(ww<=w&&hh<=h)return 1;ww=a[0]+a[1]*2+a[2];hh=a[0]+a[2]*2;if(ww<=w&&hh<=h)return 1;ww=a[0]*2+a[1]+a[2];hh=a[0]+a[1]+a[2];if(ww<=w&&hh<=h)return 1;ww=a[0]*2+a[1];hh=a[0]+a[1]+a[2]*2;if(ww<=w&&hh<=h)return 1;return 0;
}
bool ck(){sort(a,a+3);for(int ti=0;ti<6;++ti){if(ck1())return 1;next_permutation(a,a+3);}return 0;
}
int main()
{scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&w,&h);if(ck()){puts("Yes");return 0;}swap(w,h);if(ck()){puts("Yes");return 0;}puts("No");return 0;
}

C. Connections

题意可以理解为:求一些有向边使得整张图是一个强连通图。删除这些分量中的边就是答案。根据一种贪心的构造,最多加入2(n-1)条边,一定可以使得整张图强连通。相当于一颗树,它的每一条边都是双向边。那么就可以通过Kosaraju算法,处理出在强联通分量中的边做了。

#include <bits/stdc++.h>
#define pb(x) push_back(x)
typedef long long ll;
const int maxn = 300000+7;
using namespace std;
int n,m;
struct edge{int u,v,nxt;}E[maxn][2];
int h[maxn][2],cc;
void add(int u,int v){++cc;E[cc][0].u=u;E[cc][0].v=v;E[cc][0].nxt=h[u][0];h[u][0]=cc;E[cc][1].u=v;E[cc][1].v=u;E[cc][1].nxt=h[v][1];h[v][1]=cc;
}
bool vis[maxn],used[maxn];int stc[maxn],tp;
void dfs1(int u){vis[u]=1;for(int i=h[u][0];~i;i=E[i][0].nxt){int v=E[i][0].v;if(!vis[v]){used[i]=1;dfs1(v);}}stc[++tp]=u;
}
void dfs2(int u){vis[u]=0;for(int i=h[u][1];~i;i=E[i][1].nxt){int v=E[i][1].v;if(vis[v]){used[i]=1;dfs2(v);}}
}
int T;
int main()
{scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);cc=tp=0;memset(h,-1,sizeof(h));memset(used,0,sizeof(used));for(int i=1;i<=m;++i){int x,y;scanf("%d%d",&x,&y);add(x,y);}for(int i=1;i<=n;++i)if(!vis[i])dfs1(i);for(int i=n;i>=1;--i)if(vis[stc[i]])dfs2(stc[i]);int tn = 2*n;for(int i=1;i<=m;++i)if(used[i])--tn;for(int i=1;i<=m;++i)if(!used[i]&&tn>0)--tn,used[i]=1;for(int i=1;i<=m;++i)if(!used[i]){printf("%d %d\n",E[i][0].u,E[i][0].v);}}return 0;
}

反思:做这道题的时候,看到榜上ac人数较多,就猜测是个计算度数,然后胡乱贪心,wa掉之后,依然不死心,导致gg。zyc赛中提到一种,一边判环缩环,记录边数的做法(有问题)。并没有被我重视。。。仔细考虑一下,就会发现这个思路与强联通相似之处,Kosaraju算法通过在第一次dfs的标记的顺序,进行第二次dfs,使得我们不会指向多余的边(感觉上......不会证明)。胡思乱想坑队友。。。

 D. Designing the Toy

E. Easy Quest

F. The Final Level

G. The Great Wall

H. Hack

I. Interactive Sort

J. Journey from Petersburg to Moscow

K. Knapsack Cryptosystem

L. Laminar Family

把每条路径按照长度降序排列,每次随机一个值把他异或到整个路径上,然后查询这个路径是否所有数字都相同即可。实现方法,先树剖,用线段树区间间异或,区间询问是否所有数全部相同,为了完成合并,还要维护区间左右端点的值。可是,wa在test26 。。。各位聚聚,能不能给施舍弱几组数据。。。wa的:https://paste.ubuntu.com/p/dy4sBzXrVZ/

-------------------------------------------------------------------------------------------2018/04/27 更新

之后,想了一下,为什么要用区间异或,这种东西呢?排序之后,直接区间赋值,存下数字不同的两个位置,当给定区间包含某一对这样的位置时,区间数字就不相同。这个直接开个set在里面二分第一个大于左端点的左点,check一下就行了。嘴完了。。。

感觉不对。。。凉了。

 

转载于:https://www.cnblogs.com/RRRR-wys/p/8879075.html

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

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

相关文章

CF311B-Cats Transport【斜率优化dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF311B 题目大意 nnn座山在一条线上&#xff0c;有mmm只猫&#xff0c;第iii只从tit_iti​开始在第xix_ixi​座山上游玩结束。 派ppp个人在不同时间从111走到nnn接走所有游玩结束的猫&#xff0c;求所有猫的最小等待时间。 解…

【并查集】黑魔法师之门(codevs 1995/joyoi-codevs 1995)

黑魔法师之门 codevs 1995 joyoi-codevs 1995 题目大意&#xff1a; 有一堆点&#xff0c;每一次操作添加一条边&#xff0c;并要输出每个点的度数都大于1并为偶数的子图的个数 原题&#xff1a; 题目描述 经过了16个工作日的紧张忙碌&#xff0c;未来的人类终于收集到了…

.NET+PostgreSQL实践与避坑指南

简介.NETPostgreSQL(简称PG)这个组合我已经用了蛮长的一段时间&#xff0c;感觉还是挺不错的。不过大多数人说起.NET平台&#xff0c;还是会想起跟它“原汁原味”配套的Microsoft SQL Server(简称MSSQL)&#xff0c;其实没有MSSQL也没有任何问题&#xff0c;甚至没有Windows Se…

Full_of_Boys训练2总结

题目来源:&#xff1a;西安电子科技大学第16届程序设计竞赛网络同步赛 A, B, C: easy problem D. 另一个另一个简单题 做法是加起来&#xff0c;除n。希望会推导的聚聚指点。 #include <bits/stdc.h> const int inf 0x3f3f3f3f; using namespace std; int T; int ans; in…

P2714-四元组统计【数论,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P2714 题目大意 给出nnn个数&#xff0c;求有多少个(i,j,k,l)(i,j,k,l)(i,j,k,l)使得gcd(ai,aj,ak,al)1gcd(a_i,a_j,a_k,a_l)1gcd(ai​,aj​,ak​,al​)1。 解题思路 我们设fif_ifi​表示gcdgcdgcd和为iii的方案数。FiF_iFi…

【并查集】Supermarket(poj 1456/luogu-UVA1316)

Supermarket poj 1456 luogu-UVA1316 题目大意&#xff1a; 有一堆物品&#xff0c;每一件物品都有自己的价值和保质期&#xff0c;每天只能卖出一件物品&#xff0c;问最大价值是多少 原题&#xff1a; 题目描述 有一个商店有许多批货&#xff0c;每一批货又有N(0<N…

Jimu : .Net Core 分布式微服务框架介绍

一、前言近些年一直浸淫在 .Net 平台做企业应用开发&#xff0c;用过的 .Net 框架不多&#xff08;具体数量不清&#xff0c;印象深刻的有 Asp.Net MVC&#xff0c;WPF&#xff0c;其他很多都是基于微软开发的框架做些封装而形成新的框架&#xff0c;大都是还没起好名就湮灭在历…

组合数学学习笔记

常见组合计数 n球m盒分配问题 球有别&#xff0c;盒子有别&#xff0c;盒子可空&#xff1a;m^n 每个同学都有m种选择 球无别&#xff0c;盒子有别&#xff0c;盒子不可空&#xff1a;C(n-1,m-1) 隔板法 球无别&#xff0c;盒子有别&#xff0c;盒子可空&#xff1a;C(nm-1,m-1…

P3287-[SCOI2014]方伯伯的玉米田【二维树状数组,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3287 题目大意 nnn个玉米高度不同&#xff0c;可以选择kkk个区间拔高111个高度&#xff0c;求最长不降子序列长度。 解题思路 显然每次拔高都是拔一个后缀&#xff0c;所以我们设fi,jf_{i,j}fi,j​表示到第iii个玉米&#x…

【背包】买装备

买装备 题目大意&#xff1a; 有n件物品&#xff0c;每件物品有它的物抗&#xff0c;魔抗&#xff0c;价格&#xff0c;现在要在物抗魔抗各不小于一个值的前提下&#xff0c;使价格最小&#xff08;每件物品只能买一件&#xff09; 原题&#xff1a; 题目描述 mxy 沉迷于一…

.NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码

前言上一篇博客中我们可以得知通过Swagger插件可以很方便的提供给接口开发者在线调试&#xff0c;但是实际上Swagger附带的功能还有很多&#xff0c;比如使用NSwag生成客户端调用代码&#xff0c;进一步解放接口开发者。NSwag NSwag是一个发布在GitHub上的开源项目&#xff0c;…

BZOJ1485: [HNOI2009]有趣的数列

题解&#xff1a;考虑按顺序从小到大&#xff0c;加入数字&#xff0c;将加入奇数位置看作入栈&#xff0c;加入偶数位置看作出栈。为什么可以&#xff1f;考虑我们要保证相邻奇数小于偶数&#xff0c;所以必须先填上一个奇数的位置才能填偶数的位置&#xff0c;既时刻保证奇数…

jzoj4223-旅游【并查集】

正题 题目大意 nnn个点mmm条边&#xff0c;qqq次询问走边权小于xxx的能联通的点对数。 解题思路 将边权排序&#xff0c;然后并查集预处理答案即可。 时间复杂度O(mlog⁡m)O(m\log m)O(mlogm) codecodecode #include<cstdio> #include<cstring> #include<alg…

【dfs】买门票

买门票 题目大意&#xff1a; 给出一些字母&#xff0c;求出可组合成的组合&#xff08;要按顺序&#xff0c;和一定的规则&#xff09; 原题&#xff1a; 题目描述 mxy 正要经过新世界的大门。 现在有很多人在门口排队&#xff0c;每个人将会被发到一个有效的通行密码作为…

HDU1812 - Count the Tetris

polya自主ac的第一道&#xff0c;讨论方法&#xff1a;先把奇偶分开(1)顺时针0度&#xff0c;90度&#xff0c;180度&#xff0c;270度 (2)镜像竖线&#xff0c;水平线&#xff0c;两条对角线。分别推出公式计算&#xff0c;实在推不出来&#xff0c;写个模拟暴力找循环节&…

使用.NetCore 控制台演示 熔断 降级(polly)

1、熔断降级的概念&#xff1a; 熔断&#xff1a;我这里有一根长度一米的钢铁&#xff0c;钢铁的熔点1000度&#xff08;假设&#xff09;&#xff0c;现在我想用力把这根钢铁折弯&#xff0c;但是人的力有限达不到折弯的点&#xff0c;然后我使用火给钢铁加热&#xff0c;每隔…

I Got a Matrix!

I Got a Matrix! 题目大意&#xff1a; 给一个矩阵&#xff0c;求出边上的数的和 原题&#xff1a; 题目描述 给定一个 n ∗ m 的矩阵 A&#xff0c;询问位于矩阵边缘的元素之和。所谓矩阵边缘的元素&#xff0c;就是第一行和 最后一行的元素以及第一列和最后一列的元素。…

jzoj6803-NOIP2020.9.26模拟tom【构造】

正题 题目大意 nnn个点的一棵树&#xff0c;给每个点一个权值是1∼a1\sim a1∼a或−1∼−b-1\sim -b−1∼−b。每次选择正负中一个绝对值最小的删去使得无论如何选择都不会将树分成两个联通块。 解题思路 因为可以随意选择&#xff0c;所以aaa和−b-b−b的点一定要连在一起&am…

给正在努力的您几条建议(附开源代码)

前言我是一名在广州的某家互联网公司工作&#xff0c;并有6年工作经验&#xff0c;奔着架构师与微软MVP为目标的老鸟程序员。最近回顾了下多年来走的路&#xff0c;有不少的弯路。今天不说技术&#xff0c;而是总结了一些职业生涯上的建议与大家分享。虽说今天不说技术&#xf…

BZOJ3527: [Zjoi2014]力 [FFT]

化简之后&#xff0c;发现减号左边的式子是一个卷积。右边的式子&#xff0c;把一个函数倒序就是卷积&#xff0c;分别FFT&#xff0c;求解答案。 大佬blog: https://blog.csdn.net/kyleyoung_ymj/article/details/51721495 #include <bits/stdc.h> #define pi acos(-1.0…