最近做的一些题目 Aug & Sep 2025

复建,感觉自己什么都不会。一些小逻辑题目,记录一下。

持续更新中!

The 2024 ICPC Asia EC Regionals Online Contest (II) L. 502 Bad Gateway

https://codeforces.com/gym/105358/problem/L
题目看不懂啊,总之就是

我们只有两种操作,一种是让时间自然流逝,一种是再随机一次时间。

显然,最优方案应该是一直随机时间,直到随机到的时间 \(x\) 满足 \(x \leq c\),从此不再随机时间。
这样的期望是 \(\frac{t-1}{2}+\frac{c}{2}\),用高考知识也就得出 \(c\) 的取值为 \(\sqrt{2T}\)

other blog: https://blog.csdn.net/djhws144/article/details/142426613

#include <stdio.h>
#include <math.h>
#define ll long long

inline ll gcd (ll x, ll y) { 
	return x == 0 ? y : gcd(y % x, x);
}

inline void kagari () {
	ll t; scanf("%lld", &t);
	ll c = sqrt(2 * t), ans;
	ll x = c * c - c + 2 * t, y = 2 * c;
	
	c++;
	ll xx = c * c - c + 2 * t, yy = 2 * c;
	if (x * yy > xx * y) x = xx, y = yy;
	ll gc = gcd(x, y);
	x /= gc, y /= gc;
	printf("%lld %lld\n", x, y);
	
	return;
}

int main () {
	int t; scanf("%d", &t);
	while (t--) kagari();
	return 0;
}

The 2024 ICPC Asia EC Regionals Online Contest (II) J. Stacking of Goods

https://codeforces.com/gym/105358/problem/J
主要是一个思想,类似于代数中的调整,放在以前肯定是很显然的,现在什么都不会了。

就是我们可以假设 现在我们只考虑最底下的两个物品。

设上方的总重量是 w,两个物品的重量和价值分别为 a1, c1, a2, c2。

1 号物品在上方时 这两个物品的体积为 \(w*c1+(w+a1)*c2\)

2 号物品在上方时 这两个物品的体积为 \(w*c2+(w+a2)*c1\)

比较这两个式子,也就是比较 \(a1*c2\)\(a2*c1\)

所以我们只需要对每个物品进行排序,没必要按照 a/c 来进行排序,只要在 operator 函数内比较两个结构体就行了。这里也是一个代码技巧。

#include <stdio.h>
#include <algorithm>
#define ll long long

int n;
ll b[1000003], ans = 0, cnt = 0, w = 0;
struct NODE {
	ll w, c;
	bool operator < (const NODE &rhs) const { 
		return w * rhs.c == c * rhs.w ? w > rhs.w : w * rhs.c > c * rhs.w;
	}
} a[1000003];
inline void kagari () {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) 
		scanf("%lld %lld %lld", &a[i].w, &b[i], &a[i].c), cnt += b[i];
	std:: sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; ++i)
		ans += w * a[i].c,
		w += a[i].w;
	ans = cnt - ans;
	printf("%lld\n", ans);
	return;
} 

int main () {
	kagari();
	return 0;
}

P8778 [蓝桥杯 2022 省 A] 数的拆分

https://www.luogu.com.cn/problem/P8778

嗯,题目很有意思。只要看这个数字 n 能否用 \(a^2b^3\) 表示即可。

那怎么确定 a b 的值呢,枚举显然不行,1e18的数据开方是1e9 开立方是1e6。T是1e5,说明我们只剩 1000 的时间复杂度去处理这个 1e18 的数据。

不直接枚举 a b 的值,我们可以考虑将 n 质因数分解为形如 \(x^{x'}y^{y'}z^{z'}...\) 的形式。对任意一个 \(x^{x'}\):

  • 如果 x' 为 1: 显然他是放不到任何一个 a 或 b 中的,无解;
  • 如果 x' 为偶数: 它可以放到 a 中;
  • 如果 x' 为大于 1 的奇数: 它可以拆分为 \(x^2x^{x'-2}\),同时放到 a 和 b 当中。

在枚举的同时我们进行 \(n -> n/x^{x'}\) 。这时可以发现,我们只需寻找在 n 中有没有一次方的质因数即可。

同时注意到,如此枚举质数的话,只需要枚举到 4000 就可以了,若此时 \(n\) 不为 1 我们直接检查其是否为平方数或立方数。因为 \(4000^5 > 10^{18}\) 。剩下来的 n 不可能是某个大于 4000 的数的 5、6、7、... 次方,只可能是某个数的 1、2、3、4(即2)次方。所以直接判断剩下的 n 是否为平方/立方数即可。

先留着不写代码!过几天再看一遍这道题!

但还是很难想啊,反正我不好想到,说简单又不简单的,只能注意到。反正我很难注意到,别人很容易注意到。

当然,蓝桥杯貌似是 OI 赛制。拿走部分分就可以了。

嗯,北京前 5%,貌似有一点点的难度。但 noip 的一等奖比率是不是也是 5%。
突然发现我目前还不是计算机专业,也不知道要不要转专业,嗯,难搞。

posted @ 2025-09-05 13:20  dbg_8  阅读(5)  评论(0)    收藏  举报