【题目链接】

ybt 1979: 【18NOIP普及组】龙虎斗
洛谷 P5016 [NOIP2018 普及组] 龙虎斗

【题目考点】

1. long long类型使用

已知变量a, b是int类型的变量,且a * b的值会超出int类型可以表示的范围,如果写为:long long c = a * b;,c不会得到正确的结果。正确的写法为:long long c = (long long)a * b;
把一个变量强转为long long类型后,后面的运算就是两个long long类型的变量相乘,会得到正确的结果。例:

int a = 100000, b = 100000;
long long c = (long long)a * b;//此时c的值为10^10

2. 求绝对值

<stdlib.h>中有
int abs(int a);
long labs(long a);
但没有针对long long类型变量的求绝对值的函数,所以我们必须手动实现。

long long Abs(long long a)
{return a > 0 ? a : -a;
}

【解题思路】

  • 先把s1个兵添加上去,然后求龙虎双方的气势值。

  • 枚举每隔位置,尝试将s2个兵添加到这个位置,求出气势差值。将每次求出的气势差值比较,得到最小的气势差值,以及气势差值最小时,将s2个兵安排的位置。

  • 注意:观看数据范围,每个位置的工兵数最大为10910^9109,共有10510^5105个位置,加起来的气势和可以估算为109⋅105=101410^9 \cdot 10^5 = 10^{14}109⋅105=1014超出了int型变量可以表达的范围,所以对某些变量要用long long类型
    某些int型量间的计算,如s2 * (m - i),结果可能超出int型的范围,所以得先强转为long long类型后才能运算
    ,应写为:(long long)s2 * (m - i)

【题解代码】

解法1:分别求出龙方和虎方的气势

#include<bits/stdc++.h>
using namespace std;
#define N 100005
long long Abs(long long a)
{return a > 0 ? a : -a;
}
int a[N];//a[i]表示第i位置的工兵数
int main()
{int n, m, p1, s1, s2, p2;//p2:s2个兵放在p2位置时双方差值最小long long ql = 0, qh = 0, mn, delta;//ql:龙方气势 qh:虎方气势 mn:两方最小气势差值  delta:气势差值cin>>n;for(int i = 1; i <= n; ++i)cin>>a[i];cin>>m>>p1>>s1>>s2;a[p1] += s1;//天降神兵for(int i = 1; i < m; ++i)//统计当前龙方气势ql += (long long)a[i] * (m - i);for(int i = m + 1; i <= n; ++i)//统计当前虎方气势qh += (long long)a[i] * (i - m);mn = Abs(ql - qh);//双方气势差值最大也就是当前的差值,s2个工兵放下后,气势差值只能更小p2 = m;//s2个兵放在第m位置时,气势差值即为|ql - qh|for(int i = 1; i <= n; ++i){if(i < m)delta = Abs(ql + (long long)s2 * (m - i) - qh);//向龙方i位置放s2个兵,龙方增加气势s2 * (m - i)。求此时龙虎双方的气势差值。else if(i > m)delta = Abs(qh + (long long)s2 * (i - m) - ql);//向虎方i位置放s2个兵,虎方增加气势s2 * (i - m)。求此时龙虎双方的气势差值。if(delta < mn)//求最小的delta,及delta最小时放兵的位置{mn = delta;p2 = i;}}cout<<p2;return 0;
}

解法2:龙方气势是正数,虎方气势是负数

设置变量q表示双方总气势,q > 0表示龙方气势高,q < 0表示虎方气势高,∣q∣|q|∣q∣就是双方气势的差值

#include<bits/stdc++.h>
using namespace std;
#define N 100005
long long Abs(long long a)
{return a > 0 ? a : -a;
}
int a[N];//a[i]表示第i位置的工兵数
int main()
{int n, m, p1, s1, s2, p2;//p2:s2个兵放在p2位置时双方差值最小long long q = 0, mn, delta;//q:总气势,q > 0表示龙方气势高,q < 0表示虎方气势高 mn:两方最小气势差值  delta:气势差值cin>>n;for(int i = 1; i <= n; ++i)cin>>a[i];cin>>m>>p1>>s1>>s2;a[p1] += s1;//天降神兵for(int i = 1; i <= n; ++i)//统计总气势q += (long long)a[i] * (m - i);//龙方气势是正数,虎方气势是负数mn = Abs(q);//双方气势差值最大也就是当前的差值,s2个工兵放下后,气势差值只能更小p2 = m;//s2个兵放在第m位置时,气势差值即为|q|for(int i = 1; i <= n; ++i){delta = Abs(q + (long long)s2 * (m - i));//向龙方i位置放s2个兵,总气势改变s2 * (m - i)。if(delta < mn)//求最小的delta,及delta最小时放兵的位置{mn = delta;p2 = i;}}cout<<p2;return 0;
}

信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗相关推荐

  1. 信息学奥赛一本通 1978:【18NOIP普及组】标题统计 | 洛谷 P5015 [NOIP2018 普及组] 标题统计

    [题目链接] ybt 1978:[18NOIP普及组]标题统计 洛谷 P5015 [NOIP2018 普及组] 标题统计 [题目考点] 1. 字符串 读入带空格的字符串 将带空格的字符串读入字符数组 ...

  2. 信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题

    [题目链接] ybt 1233:接水问题 ybt 1950:[10NOIP普及组]接水问题 OpenJudge NOI 1.9 15:接水问题 洛谷 P1190 [NOIP2010 普及组] 接水问题 ...

  3. 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙

    [题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...

  4. 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数

    [题目链接] ybt 1400:统计单词数 ybt 1954:[11NOIP普及组]统计单词数 OpenJudge NOI 1.12 05:统计单词数 洛谷 P1308 [NOIP2011 普及组] ...

  5. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

  6. 信息学奥赛一本通 1407:笨小猴 | 1851:【08NOIP提高组】笨小猴 | OpenJudge NOI 1.9 06 | 洛谷 P1125 [NOIP2008 提高组] 笨小猴

    [题目链接] ybt 1407:笨小猴 ybt 1851:[08NOIP提高组]笨小猴 OpenJudge NOI 1.9 06:笨小猴 洛谷 P1125 [NOIP2008 提高组] 笨小猴 [题目 ...

  7. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和

    [题目链接] ybt 1173:阶乘和 注:一本通上这题,应该把n≤50n\le50n≤50当做n≤100n\le100n≤100来看 OpenJudge NOI 1.6 15:阶乘和 洛谷 P100 ...

  8. 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方

    [题目链接] ybt 1208:2的幂次方表示 OpenJudge 2.2 8758:2的幂次方表示 洛谷 P1010 [NOIP1998 普及组] 幂次方 [题目考点] 1. 递归 [解题思路] 递 ...

  9. 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒

    [题目链接] ybt 1314:[例3.6]过河卒(Noip2002) ybt 1921:[02NOIP普及组]过河卒 洛谷 P1002 [NOIP2002 普及组] 过河卒 [题目考点] 1. 坐标 ...

最新文章

  1. 微博云原生技术的思考与实践
  2. 一台linux通过另一台linux访问互联网
  3. pip时read time out
  4. Python3学习笔记(2)——递归函数
  5. Nutanix:在云转型的道路上飞奔
  6. 本地升级MySQL数据库版本为8.0.23,使用SQLyog(小海豚)无法进行连接
  7. python包标准类型和动态导入模块和多态和反射和授权
  8. struts2无刷新图片(文件)上传 充分利用struts配置文件 自己只需要把读取到的文件写入文件系统就可以了...
  9. 扩展:js控制台输出,除了 console.log还有哪些?
  10. html5---资料查询
  11. 弹性系数和线径的计算公式_弹力计算公式(完整版).pdf
  12. 冷却水的循环方式有哪几种_循环水冷却设备 循环冷却水设备都有哪几种
  13. 【室内园艺】——栀子花
  14. CTGU 2021春-MySQL数据库实验2:基本查询5-6关,共5小题全代码+信息表+通关截图!
  15. [转] Linux-2.6.32 NUMA架构之内存和调度
  16. 2016年计划,2015年总结
  17. jzoj 4638. 第三条跑道
  18. win10右键一直转圈_惠普产品拆机图文哪里找?桌面点右键延迟咋办?内存怎么少了?...
  19. 九章算法笔记D2-坐标型动态规划
  20. 我对计算机的看法英语作文,我对网络的看法 My Concepts on Internet 英语作文范文...

热门文章

  1. Software Version
  2. 2021上半年朋友圈都在传的10本书,找到了
  3. STM32之RTC原理
  4. Hollis要转行了?
  5. ​Java Map中那些巧妙的设计
  6. 阿里第二代微服务强势崛起,你还敢往简历上写“精通”吗?
  7. 程序员想知道代码是怎样跑起来的
  8. 阿里技术:如何画出一张合格的技术架构图?
  9. Eclipse 默认设置的换行长度
  10. 开发指南专题二:JEECG微云快速开发平台JEECG框架初探