信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗
【题目链接】
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 普及组] 龙虎斗相关推荐
- 信息学奥赛一本通 1978:【18NOIP普及组】标题统计 | 洛谷 P5015 [NOIP2018 普及组] 标题统计
[题目链接] ybt 1978:[18NOIP普及组]标题统计 洛谷 P5015 [NOIP2018 普及组] 标题统计 [题目考点] 1. 字符串 读入带空格的字符串 将带空格的字符串读入字符数组 ...
- 信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题
[题目链接] ybt 1233:接水问题 ybt 1950:[10NOIP普及组]接水问题 OpenJudge NOI 1.9 15:接水问题 洛谷 P1190 [NOIP2010 普及组] 接水问题 ...
- 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙
[题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...
- 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数
[题目链接] ybt 1400:统计单词数 ybt 1954:[11NOIP普及组]统计单词数 OpenJudge NOI 1.12 05:统计单词数 洛谷 P1308 [NOIP2011 普及组] ...
- 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树
[题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...
- 信息学奥赛一本通 1407:笨小猴 | 1851:【08NOIP提高组】笨小猴 | OpenJudge NOI 1.9 06 | 洛谷 P1125 [NOIP2008 提高组] 笨小猴
[题目链接] ybt 1407:笨小猴 ybt 1851:[08NOIP提高组]笨小猴 OpenJudge NOI 1.9 06:笨小猴 洛谷 P1125 [NOIP2008 提高组] 笨小猴 [题目 ...
- 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和
[题目链接] ybt 1173:阶乘和 注:一本通上这题,应该把n≤50n\le50n≤50当做n≤100n\le100n≤100来看 OpenJudge NOI 1.6 15:阶乘和 洛谷 P100 ...
- 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方
[题目链接] ybt 1208:2的幂次方表示 OpenJudge 2.2 8758:2的幂次方表示 洛谷 P1010 [NOIP1998 普及组] 幂次方 [题目考点] 1. 递归 [解题思路] 递 ...
- 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒
[题目链接] ybt 1314:[例3.6]过河卒(Noip2002) ybt 1921:[02NOIP普及组]过河卒 洛谷 P1002 [NOIP2002 普及组] 过河卒 [题目考点] 1. 坐标 ...
最新文章
- 微博云原生技术的思考与实践
- 一台linux通过另一台linux访问互联网
- pip时read time out
- Python3学习笔记(2)——递归函数
- Nutanix:在云转型的道路上飞奔
- 本地升级MySQL数据库版本为8.0.23,使用SQLyog(小海豚)无法进行连接
- python包标准类型和动态导入模块和多态和反射和授权
- struts2无刷新图片(文件)上传 充分利用struts配置文件 自己只需要把读取到的文件写入文件系统就可以了...
- 扩展:js控制台输出,除了 console.log还有哪些?
- html5---资料查询
- 弹性系数和线径的计算公式_弹力计算公式(完整版).pdf
- 冷却水的循环方式有哪几种_循环水冷却设备 循环冷却水设备都有哪几种
- 【室内园艺】——栀子花
- CTGU 2021春-MySQL数据库实验2:基本查询5-6关,共5小题全代码+信息表+通关截图!
- [转] Linux-2.6.32 NUMA架构之内存和调度
- 2016年计划,2015年总结
- jzoj 4638. 第三条跑道
- win10右键一直转圈_惠普产品拆机图文哪里找?桌面点右键延迟咋办?内存怎么少了?...
- 九章算法笔记D2-坐标型动态规划
- 我对计算机的看法英语作文,我对网络的看法 My Concepts on Internet 英语作文范文...