9.16考试 第一题 X国的军队题解

  这道题总体来看还是比较满意的。连想带打不超过半个小时,打了不到当时基本读懂后就感觉是贪心,但贪什么很重要,当时一开始想的是贪心死亡人数,从小到大搞,然后自己造了几个小数据,还好WA了,然后又列了一个式子,直接证明了贪心。式子如下:

    我们设有两个据点,一个A=x1,B=y1,另一个A=x2,b=y2。

    若x1-y1>x2-y2

      则先打A所需为 x1+(x2-(x1-y1))=x2+y1,先打B为x2+(x1-(x2-y2))=x1+y2。

      由上式可知x1+y2>x2+y1,所以应当先打A。

    其余同理。

  然后我们只要sort一遍打一个模拟就好了。

  

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<algorithm>
 7 #include<cmath>
 8 #include<map>
 9 #define N 100005
10 using namespace std;
11 int n,t;
12 struct no
13 {
14     long long a,b,c;
15 }node[N];
16 int px(no a,no b)
17 {
18     return a.c>b.c;
19 }
20 long long now,sum;
21 int main()
22 {
23     scanf("%d",&t);
24 while(t--)
25 {
26     scanf("%d",&n);
27     for(int i=1;i<=n;i++)
28     {
29         scanf("%lld%lld",&node[i].a,&node[i].b);
30         node[i].c=node[i].b-node[i].a;
31     }
32     sort(node+1,node+n+1,px);
33     now=sum=0;
34     for(int i=1;i<=n;i++)
35     {
36         if(now<node[i].b)
37         {
38             sum+=node[i].b-now;
39             now=node[i].b;
40         }
41         now-=node[i].a;
42     }
43     printf("%lld\n",sum);
44 }
45     return 0;
46 }

时间: 2024-08-08 12:41:34

9.16考试 第一题 X国的军队题解的相关文章

9.18考试 第一题count题解

这道题说起来挺可惜的,当时纠结是用常数大但有可能减少递归层数的模还是用常数小但递归多的回溯纠结了好半天,最终错误的选择了摸.导致T了20分,改成回溯就A了. 先分析一下性质,我在考试的时候打表发现在数据范围内因子最多有240个,因此有可能是通过枚举因子进行计算,然后如果说对于一个块他的确可以把一棵树分为几块方法只有一种(不要问我为什么,我也不知道怎么证,但的确如此)那么我们的最坏复杂度就是O(240*n),比理论最大复杂度还多了一倍,这也是为什么当时我自己预估60分的原因,然而这就很尴尬了,这的

9.5 考试 第一题 礼物题解

问题 A: 礼物 时间限制: 1 Sec  内存限制: 256 MB 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次,店员会按照一定的概率Pi(或者不拿出礼物),将第i种礼物拿出来. 季堂每次都会将店员拿出来的礼物买下来.没有拿出来视为什么都没有买到,也 算一次购买. 众所周知,白毛切开都是黑的.所以季堂希望最后夏川的喜悦值尽可能地高. 求夏川最后最大

认证考试第一题

namespace Test1_1{ class Program { static void Main(string[] args) { int result = 0; Console.WriteLine("请输入一个正整数:"); int n = int.Parse(Console.ReadLine()); if (n %2 == 0)//这里要注意  是求余运算  ,不能用"/" { for (int i = 0; i <= n;i+=2) { resul

C语言考试第一题详细过程

1.计算 ,并输出其结果. 思路是先设计一个函数计算阶乘,再用循环,逐个求和. #include<stdio.h> int mul(int n) { int num,i; num=1; for(i=1;i<=n;i++) num=num*i; return(num); } void main() { int i,sum=0; for(i=1;i<=10;i++) sum+=mul(i); printf("The sum is %d\n",sum); } 这个代码

2017年上半年信息安全工程师考试真题含答案(下午题)

2017年上半年信息安全工程师考试真题含答案(下午题) https://www.moondream.cn/?p=389 第1题 阅读下列说明,回答问题 1 至问题 3,将解答写在答题纸的对 应栏内. [说明] 安全目标的关键是实现安全的三大要素:机密性.完整性和可用性.对于一般性的信息类型的安全分类有以下表达形式: { (机密性,影响等级), (完整性,影响等级), (可用性,影 响等级) } 在上述表达式中,"影响等级"的值可以取为低 (L).中(M).高(H) 三级以及不适用 (N

纪中10日T1 2300. 【noip普及组第一题】模板题

2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 输入 输出 样例输入 样例输出 数据范围限制 朴素算法 考试开始的前一个小时我一直在折腾朴素算法 -> 对拍 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 #define IL inline 4 usin

2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

1 import java.util.Scanner; 2 3 4 public class Number { 5 6 private static Object i; 7 8 /* 9 *第一题 mingrikejijavabu中字符“i” 出现了几次,并将结果输出*/ 10 public static void main(String[] args) { 11 12 String r ="imingrikejijavabi"; 13 14 15 //第一种 截取 16 int a=

中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 细胞自动机(30分) 题目内容: 这是细胞自动机的非图形版本.细胞自动机是指在一个二维网格内,每一个网格是一个细胞.每个细胞有活和死两种状态. 初始时刻,有些细胞是活的,有些细胞是死的.自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活.具体的规则如下:

【BZOJ4927】第一题 双指针+DP(容斥?)

[BZOJ4927]第一题 Description 给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼 出一个正方形.注意木棍不能弯折.问方案数. 正方形:四条边都相等.四个角都是直角的四边形. Input 第一行一个整数n. 第二行包含n个整数ai,代表每根木棍的长度. n ≤ 5000, 1 ≤ ai ≤ 10^7 Output 一行一个整数,代表方案数. Sample Input 8 4 5 1 5 1 9 4 5 Sample Output 3 题解:这...这不是沈阳集训的原