首页 > 其他分享 >20231005比赛

20231005比赛

时间:2023-10-28 09:44:58浏览次数:41  
标签:lf return 20231005 ll long fa include 比赛

T1 4883. 灵知的太阳信仰

Description

在炽热的核熔炉中,居住着一位少女,名为灵乌路空。
据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量——核能。
核焰,可融真金。

咳咳。
每次核融的时候,空都会选取一些原子,排成一列。然后,她会将原子序列分成一些段,并将每段进行一次核融。
一个原子有两个属性:质子数和中子数。
每一段需要满足以下条件:
1、同种元素会发生相互排斥,因此,同一段中不能存在两个质子数相同的原子。
2、核融时,空需要对一段原子加以防护,防护罩的数值等于这段中最大的中子数。换句话说,如果这段原子的中子数最大为x,那么空需要付出x的代价建立防护罩。求核融整个原子序列的最小代价和。

Input

第一行一个正整数N,表示原子的个数。
接下来N行,每行两个正整数pi和ni,表示第i个原子的质子数和中子数。

Output

输出一行一个整数,表示最小代价和。

Sample Input

5
3 11
2 13
1 12
2 9
3 13

Sample Output

26

Data Constraint

对于20%的数据,1<=n<=100
对于40%的数据,1<=n<=1000
对于100%的数据,1<=n<=105,1<=pi<=n,1<=ni<=2*104

军训 原题,一模一样,把代码复制过来删掉二分再改成min删掉limit就可以过了(划去,我自己打了一遍了的)。甚至不需要线段树!
考场上第一反应就是很像军训,但有感觉不像,想了想感觉贪心可以做,结果就wa了。
反思:多想想学过的知识,贪心尽量证明,不然你就会一分得不到。

#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
#define N 100010
using namespace std;
ll n;
ll pi[N];
ll ni[N], x, ans;

ll pos[N], l[N];

ll f[N], q[N], head = 1, tail;
int main() {
	freopen("array.in", "r", stdin);
	freopen("array.out", "w", stdout);
	scanf("%lld", &n);
	for(ll i = 1; i <= n; i++) {
		scanf("%lld %lld", &pi[i], &ni[i]);
	}
	
	for(ll i = 1; i <= n; i++) {
		l[i] = pos[pi[i]];
		pos[pi[i]] = i;
		l[i] = max(l[i], l[i-1]);
	}
	f[1] = ni[1];
	q[++tail] = 1;
	for(ll i = 2; i <= n; i++) {
		while(head <= tail && q[head] < l[i]) head++;
		while(head <= tail && ni[i] >= ni[q[tail]]) tail--;
		q[++tail] = i;
		f[i] = f[l[i]] + ni[q[head]];
		for(ll j = head; j < tail; j++) {
			f[i] = min(f[i], f[q[j]] + ni[q[j + 1]]);
		}
	}
	printf("%lld", f[n]);
}

T2 4880. 询问

Description

img

Input

img

Output

img

Sample Input

20 4
1 10 7
5 19 7
3 12 8
11 15 12

Sample Output

3

Data Constraint

img

考场上想到权值小的如果被权值大的覆盖,那一定为no,如果并集为空,也一定为no。就是有考场上一些很弱智的问题:

  1. 怎么判断权值小的一定会被权值大的覆盖?从大到小排序就行了
  2. 怎么判断几条线段是否会被覆盖?用并查集就行了
  3. 怎么判断线段的并和交?最智障的问题,求mx和mn就行了。

总之就是做的题少了,不知道这些东西,犯的沙雕错误。另外,考场上一直在尝试用线段树维护,其实是多余的,几行并查集就行了,告诉我们当一个方向钻不通往往是错误的,不要死钻。或许换个方向就行了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
ll n, m;
struct q {
	ll l, r, x;
} a[200010], b[200010];
ll fa[2000010];
ll find(ll x) {
	ll r = x;
	while(fa[r] != r) {
		r = fa[r];
	}
	while(fa[x] != r) {
		int fx = fa[x];
		fa[x] = r;
		x = fx;
	}
	return r;
}
void merge(ll x, ll y) {
	fa[find(x)] = find(y);
}
bool cmp(q x, q y) {
	if(x.x == y.x) {
		if(x.r == y.r) return x.l < y.l;
		return x.r < y.r;
	}
	return x.x > y.x;
}
bool check(ll x) {
	for(ll i = 1; i <= n + 1; i++) {
		fa[i] = i;
	}
	for(ll i = 1; i <= x; i++) {
		b[i] = a[i];
	}
	sort(b + 1, b + 1 + x, cmp);
	
	for(ll i = 1; i <= x; i++) {
		ll mxl = b[i].l, mnl = b[i].l, mxr = b[i].r, mnr = b[i].r;
		while(i < x && b[i].x == b[i + 1].x) {
			i++;
			mxl = max(mxl, b[i].l);
			mnl = min(mnl, b[i].l);
			mxr = max(mxr, b[i].r);
			mnr = min(mnr, b[i].r);
		}
		if(mxl > mnr) return false;
		if(find(mxl) > mnr) return false;
		for(ll j = mnl; j <= mxr; j = find(j)) {
			merge(j, j + 1);
		}
	}
	
	return true;
}
int main() {
	freopen("bales.in", "r", stdin);
	freopen("bales.out", "w", stdout);
	scanf("%lld %lld", &n, &m);
	for(ll i = 1; i <= m; i++) {
		scanf("%lld %lld %lld", &a[i].l, &a[i].r, &a[i].x);
	}
	ll l = 1, r = m, ans = 0;
	while(l <= r) {
		ll mid = (l + r) >> 1;
		if(check(mid)) {
			l = mid + 1;
		} else {
			r = mid - 1;
			ans = mid;
		}
	}
	printf("%lld", ans);
}

T3 5401. Star Way To Heaven

Description

Input

Output

Sample Input

10 5 2
1 1
2 3

Sample Output

1.11803399

Data Constraint

很简单,我们从上到下连边,然后选择一条最优的穿过去就行了。
考试时困扰我的就是怎么连边,其实使用Prim的思想,先找出对于上边界距离最小的,然后每次更新对于最小值的距离,最后直到连接下边界
为什么要二分?不需要啊。
困扰我的教训就是:不要懒,自己手打min、max。不然会被卡常

#include <cmath>
#include <cstdio>
#define ll long long
#define lf long double
ll n, m, k;
bool v[6010];
lf dis[6010], ans;
struct node {
	lf x, y;
} a[6010];
lf Dis(node x, node y) {
	return sqrt(pow(x.x - y.x, 2)+pow(x.y - y.y, 2));
}
lf max(lf x, lf y) {
	return x > y ? x : y;
}
lf min(lf x, lf y) {
	return x < y ? x : y;
}
int main() {
	freopen("starway.in", "r", stdin);
	freopen("starway.out", "w", stdout);
	scanf("%lld %lld %lld", &n, &m, &k);
	for(ll i = 1; i <= k; i++) {
		scanf("%Lf %Lf", &a[i].x, &a[i].y);
		dis[i] = m - a[i].y;
	}
	dis[++k] = m;
	while(true) {
		ll p = -1;
		for(ll i = 1; i <= k; i++) {
			if(!v[i] && (p == -1 || dis[i] < dis[p])) {
				p = i;
			}
		}
		v[p] = 1;
		ans = max(ans, dis[p]);
		if(p == k) break;
		
		for(ll i = 1; i < k; i++) {
			dis[i] = min(dis[i], Dis(a[p], a[i]));
		}
		dis[k] = min(dis[k], a[p].y);
	}
	printf("%.8Lf", ans / 2.0);
}

标签:lf,return,20231005,ll,long,fa,include,比赛
From: https://www.cnblogs.com/znpdco/p/17793668.html

相关文章

  • 2023比赛做题笔记
    CSP-S2023https://www.luogu.com.cn/contest/140859。P9753首先考虑一个串可以被消除时的结构:\(\textbf{xx}\)可以被消除。若\(\textbf{A}\)和\(\textbf{B}\)均可以被消除,则\(\textbf{AB}\)也可以被消除。若\(\textbf{A}\)可以被消除,则\(\textbf{xAx}\)也可以被......
  • CSP-S 2023 比赛报告
    CSP-S2023比赛报告开场看T1,发现很简单。快速写完,发现过不了样例2,调了半天,发现没有判和读入相同。然后去看T2,发现不会,直接\(O(n^2)\)跑路。T3一眼大模拟,放弃。16:00有点头疼,趴了一会。16:50醒了。T4想了想,发现可以直接贪。但是二分解方程调不出来,最后只能保证\(......
  • 被突然出现的前端比赛打了个猝不及防
    今天晚上突然得知我要去参加一个网页制作比赛,可恶,我连后端的Django都还没怎么整明白,有要开始学前端的内容了=-=只能硬着头皮上了,还好有学长发的ppt,先可以大概规划一下学习路线和时间吧(零基础的我感觉瑟瑟发抖)额,刚刚退出去看了看PPT,感觉有好多东西,麻了。大概就是三部分吧html......
  • 【比赛笔记】CSP-S 2023
    授权码MD5:71f9eea8b22d84fca61763855842d32f游记Day0-比赛前夕来摘抄一段学长给的注意事项。然后评价一下...freopen//万事开头`freopen`,一定写`freopen`编译环境(-O2,-std=c++14)//命令行编译,注意编译信息g++a.cpp-oa-O2-std=c++14//重温编译命令stl......
  • 工业毛刷厂家,国机集团”百年党旗红 国机在行动“演讲比赛成都专场在公司顺利举办
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。6月10日,由国机......
  • 「比赛游记」CSP 2023 游记
    「比赛游记」CSP2023游记初赛简记.补一下成绩:J:92,S:81.5.10.17(day-3)模拟赛.全真模拟CCF数据上大分!!!不过我那个错解常数巨小,比较抽象.三道哈希还特别卡正确率,是想让我们场切星战吗?宣传:河北CSP贺图制作活动!!!好困哦.要练练DS了.就剩两场模拟赛了诶,会有板子日......
  • 比赛经验(10/18)
     (1)有些比赛问题可以用公式直接计算,仔细辨别,不要盲目计算 (2)注重时间复杂度的分析,估算时间,选择合适的算法或者其他解题方式   时间复杂度 (3)对于出错的题目先跳过,一直提交可能会蒙圈,返回来再写时可能会清晰些......
  • 比赛总结:Japan Registry Services (JPRS) Programming Contest 2023 (AtCoder Beginn
    比赛:JapanRegistryServices(JPRS)ProgrammingContest2023(AtCoderBeginnerContest324)A-same1.常规方法intmain(){ intn; cin>>n; vector<int>s(n);//利用vector容器可以不需要确定内存大小 for(auto&n:s) { cin>>n; } for(inti=0;i......
  • P8868 [NOIP2022] 比赛
    主要写一写标记的推导。理论大概在关于线段树上的一些进阶操作回忆一下普通历史和。是对两个合并队列做前缀和,然后利用往后插的贡献来计算。\(ht'+add*upd\toht\)\(s*upd+ht'*len\tohs\)下文:\(x\toadda,y\toaddb\)不带历史和的点积:\((a+x)(b+y)......
  • 【多校联考NOIP#3】比赛复盘 && 题解
    A.卡牌这次比赛,一道签到题都没有。本来以为是线段树上二分。就类似于花神的数论题那道,刚开始暴力修改(修改到线段树的每一个叶子节点),然后由于boss的attack在不断增加,到了\(Att_i>=hp_j\)的时候,\(j\)这个牌顶多打一次,如果一个区间的\(max\)都小于boss的攻击力了,那么就不......