A - System Administrator CodeForces - 245A(水题)

本文介绍了一种用于判断服务器是否“存活”的算法。通过分析发送到两个服务器的ping命令及其返回结果,确定至少一半的数据包成功到达即认为服务器“存活”。文章提供了一个简单的代码实现,帮助理解如何处理和解析输入数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Polycarpus is a system administrator. There are two servers under his strict guidance — a and b. To stay informed about the servers’ performance, Polycarpus executes commands “ping a” and “ping b”. Each ping command sends exactly ten packets to the server specified in the argument of the command. Executing a program results in two integers x and y (x + y = 10; x, y ≥ 0). These numbers mean that x packets successfully reached the corresponding server through the network and y packets were lost.

Today Polycarpus has performed overall n ping commands during his workday. Now for each server Polycarpus wants to know whether the server is “alive” or not. Polycarpus thinks that the server is “alive”, if at least half of the packets that we send to this server reached it successfully along the network.

Help Polycarpus, determine for each server, whether it is “alive” or not by the given commands and their results.

Input
The first line contains a single integer n (2 ≤ n ≤ 1000) — the number of commands Polycarpus has fulfilled. Each of the following n lines contains three integers — the description of the commands. The i-th of these lines contains three space-separated integers ti, xi, yi (1 ≤ ti ≤ 2; xi, yi ≥ 0; xi + yi = 10). If ti = 1, then the i-th command is “ping a”, otherwise the i-th command is “ping b”. Numbers xi, yi represent the result of executing this command, that is, xi packets reached the corresponding server successfully and yi packets were lost.

It is guaranteed that the input has at least one “ping a” command and at least one “ping b” command.

Output
In the first line print string “LIVE” (without the quotes) if server a is “alive”, otherwise print “DEAD” (without the quotes).

In the second line print the state of server b in the similar format.

Examples
Input
2
1 5 5
2 6 4
Output
LIVE
LIVE
Input
3
1 0 10
2 0 10
1 10 0
Output
LIVE
DEAD
Note
Consider the first test case. There 10 packets were sent to server a, 5 of them reached it. Therefore, at least half of all packets sent to this server successfully reached it through the network. Overall there were 10 packets sent to server b, 6 of them reached it. Therefore, at least half of all packets sent to this server successfully reached it through the network.

Consider the second test case. There were overall 20 packages sent to server a, 10 of them reached it. Therefore, at least half of all packets sent to this server successfully reached it through the network. Overall 10 packets were sent to server b, 0 of them reached it. Therefore, less than half of all packets sent to this server successfully reached it through the network.
这个题目乍一看又臭又长,看不太懂。其实看懂了就是一个水题。
有两个东西,看看传递到它的是不是超过总数的二分之一,分别输出就好了。主要是看懂题意。
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxx=1e3+10;
struct node{
	int ping;
	int ac;
	int wa;
}p[maxx];
int n;

int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		int sum1=0;
		int sum2=0;
		int sum1a=0;
		int sum1w=0;
		int sum2a=0;
		int sum2w=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d%d%d",&p[i].ping,&p[i].ac,&p[i].wa);
			if(p[i].ping==1)
			{
				sum1+=(p[i].ac+p[i].wa);
				sum1a+=p[i].ac;
				sum1w+=p[i].wa;
			}
			else
			{
				sum2+=(p[i].ac+p[i].wa);
				sum2a+=p[i].ac;
				sum2w+=p[i].wa;
			}
		}
		if(sum1a*2>=sum1) cout<<"LIVE"<<endl;
		else cout<<"DEAD"<<endl;
		if(sum2a*2>=sum2) cout<<"LIVE"<<endl;
		else cout<<"DEAD"<<endl;
	}
}

努力加油a啊,(o)/~

目 `Codeforces 2128F Strict Triangle` 是一道较为复杂的计算几何与构造目要求构造一个满足特定条件的三角形,并根据给定的点集判断是否存在这样的三角形。下面将从目解析、解思路和代码实现三个方面进行说明。 ### 目大意 给定平面上 $n$ 个点,要求判断是否存在三个点 $A, B, C$,使得: 1. 三角形 $ABC$ 是非退化的(即面积不为零); 2. 满足 $\angle ABC$ 是严格锐角(即小于 $90^\circ$)。 如果存在这样的三角形,输出任意一组满足条件的三点;否则,输出 `NO`。 ### 解思路 #### 1. 几何性质分析 判断一个角是否为锐角,可以通过向量内积的方式进行判断。设三点 $A, B, C$ 构成三角形,其中 $B$ 为角的顶点,则: $$ \vec{BA} \cdot \vec{BC} = |\vec{BA}| \cdot |\vec{BC}| \cdot \cos(\theta) $$ 若 $\theta < 90^\circ$,则 $\cos(\theta) > 0$,因此只需要判断 $\vec{BA} \cdot \vec{BC} > 0$。 #### 2. 算法选择 - 枚举所有点对 $B$ 作为角的顶点; - 对于每个点 $B$,枚举所有点 $A, C$,并计算 $\vec{BA} \cdot \vec{BC} > 0$; - 同时确保三点不共线(即三角形面积不为零)。 #### 3. 时间复杂度优化 由于 $n$ 最大为 $1000$,直接三重循环会导致 $O(n^3)$ 的时间复杂度,这在最坏情况下会超时。因此需要优化: - 固定点 $B$,枚举所有其他点作为 $A$; - 对于每个 $A$,再枚举所有点 $C$,但跳过 $A=C$ 或 $B=C$ 的情况; - 利用向量点积的性质快速判断。 这样复杂度为 $O(n^2)$,对于 $n=1000$ 可以接受。 ### 代码实现 以下是一个完整的 AC 代码实现,用于判断是否存在满足条件的三角形并输出结果: ```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 1005; struct Point { ll x, y; } points[MAXN]; ll dot(Point a, Point b, Point c, Point d) { ll dx1 = b.x - a.x; ll dy1 = b.y - a.y; ll dx2 = d.x - c.x; ll dy2 = d.y - c.y; return dx1 * dx2 + dy1 * dy2; } ll cross(Point a, Point b, Point c, Point d) { ll dx1 = b.x - a.x; ll dy1 = b.y - a.y; ll dx2 = d.x - c.x; ll dy2 = d.y - c.y; return dx1 * dy2 - dx2 * dy1; } int main() { int n; cin >> n; for (int i = 0; i < n; ++i) { cin >> points[i].x >> points[i].y; } for (int b = 0; b < n; ++b) { for (int a = 0; a < n; ++a) { if (a == b) continue; for (int c = a + 1; c < n; ++c) { if (c == b) continue; // Check angle at b ll dot_product = dot(points[b], points[a], points[b], points[c]); if (dot_product > 0) { ll area = cross(points[a], points[b], points[b], points[c]); if (area != 0) { cout << "YES" << endl; cout << a + 1 << " " << b + 1 << " " << c + 1 << endl; return 0; } } } } } cout << "NO" << endl; return 0; } ``` ### 说明 - `dot()` 函数用于计算两个向量的点积; - `cross()` 函数用于计算两个向量的叉积,判断是否共线; - 枚举所有可能的点 $B$,并遍历其他点 $A, C$,判断是否满足锐角条件; - 若找到符合条件的三角形,立即输出并终止程序。 ### 时间与空间复杂度 - 时间复杂度:$O(n^2)$; - 空间复杂度:$O(n)$,仅存储点集。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starlet_kiss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值