题目传送门 题目大意: n个人,m次提交,每次提交都代表某支队伍做出一题,并且给出罚时,让你输出每次提交后,编号为1的队伍的排名. 思路: 首先处理ac和罚时,由于罚时最大1000,最多有1e5次,要保证ac比罚时重要的多,所以一次ac,权值加1e8 再减 罚时. 维护一个小根堆,由于元素没有重复的,所以可以直接用set. 更新的如果是team1,把更新后的team1的权值和小根堆堆顶比较,小于等于team1的删除. 更新的如果是其他队伍,先判断是否在堆内,如果在,就先删去堆中原有的状态,再把更…
题目链接: G - Galactic Collegiate Programming Contest Kattis - gcpc 题目大意:当前有n个人,一共有m次提交记录,每一次的提交包括两个数,st和ed.st代表当前人的编号,ed代表总的耗费的时间,每一次提交代表这个人AC了一道题.具体的排名顺序就是先按照题目数量和提交的时间来拍的,然后每一次提交后问你当当前编号为1的人排名是多少. 具体思路:我们把人分为两类,第一类 编号为1的人.第二类,排名大于1的人.每一次当一个人进来的时候,如果这个…
Problem G Galactic Collegiate Programming Contest 这个题题意读了一会,就是几个队参加比赛,根据实时的信息,问你1号队的实时排名(题数和罚时相同的时候并列). 暴力模拟,简直要模拟死了...有个地方感觉很有意思,就是如果某个队还一道题都没写出来的话根本就不用和1队比较,这里用一个数组存一下出题数大于等于1的队伍,直接比较这些队伍就可以,如果全都比较一遍就会超时,真的,相信我. 代码: 1 #include<iostream> 2 #include…
#include<bits/stdc++.h> using namespace std; int n,m; struct node { int id; int slove; int pen; bool operator<(const node &b)const { //如果解决的数量和罚时都一样,就按照序号排序 if(slove==b.slove&&pen==b.pen) return id<b.id; //如果解决的数目不一样,就优先按照数目排序 if(s…
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; ; struct node { int team; int num; int time; int id; }a[maxn]; int ans[maxn]; int b[maxn]; int c[maxn]; int s[maxn]; int team[maxn]; int tree[maxn]; int pre[maxn]; int lowbi…
题目大意:有n( n<1e5 )只队伍参加程序竞赛,然后给m个信息,每个信息告诉你第p 个队伍过了一题,并且告诉你罚时是多少,让你输入每个信息之后,第一个队伍的 排名. 思路:一眼看过去就像数据结构题,我们可以用足够大的数表示过了一题然后减去罚时, 这样就可以用一个数值来确定排名,然后我们用将所有出现过的分数抽离出来,排序去重 用这些数离散化用树状数组维护各个分数队伍数的前缀和,这样就能快速计算排名. #include<bits/stdc++.h> #define ll long lon…
学习了“叙利亚”这个单词:比较温和的一场:几何的板子eps太小了,坑了几发. A .Hello SCPC 2018! 题意:给定一个排列,问它是否满足,前面4个是有序的,而且前面4个比后面的都小. 思路:数据比较小,可以暴力,也可以用前面4个的最大值和后面的数字的最小值比较. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ; int a[maxn]; int ma…
(本套题算是比较温和吧,就是罚时有点高. B .Baby Bites 题意:给出一个婴儿给出的数组,有一些数字听不清楚,让你还原,问它是否是一个从1开始的一次增加的数组. 思路:从左往右依次固定,看是否有矛盾即可. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) #define rep2(i,a,b) for(int i=a;i>=b;i--) using n…
B .Battle Royale 题意:给你两个点A,B,以及一个圆S,保证两个点在圆外,且其连线与圆相交,求两点间最短距离. 思路:显然是要分别与圆相切,然后在圆弧想走,直到相交. 那么ans=与圆相交的直线距离+圆弧上的距离: 前者不难求. 后者的话有些抽象,因为不知道怎么取固定角度,但是如果想到atan2了就不难了,因为atan2求出的角度是固定了标准的,注意对用两个atan2求出来的角度求其夹角时,注意不要错过2pi:同时取min(angle,2*pi-angle).  还不懂的,看代码…
题面 题意:T组数据,每次给你1e5个点的树(1为根),每个点有一权值,询问1-n每个节点的子树中, 至少修改几个点的权值(每次都可以任意修改),才能让子树中任意2点的距离==他们权值差的绝对值 无解输出-1 题解:画图不难发现,如果这个节点有3个儿子,也就是不包含它连向它父亲的边,它还有多于2条边的话,一定不行 因为子节点权值只能是这个节点+1或者-1,所以只能存在最多2个 那我们就又发现了,只有这个子树,可以拉成一个链的时候,才有答案, 考虑在链中的情况,如何判断修改最少的个数,使得这是个差…