【NOIP2018普及组】龙虎斗
题目描述
轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1∼n 1∼n),相邻编号的兵营之间相隔 1 1 1厘米,即棋盘为长度为 n − 1 n-1 n−1厘米的线段。 i i i号兵营里有 c i c_i ci位工兵。 下面图 1 1 1为 n = 6 n=6 n=6的示例:
轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。 他们以 m m m号兵营作为分界, 靠左的工兵属于龙势力,靠右的工兵属于虎势力,而第 m m m号兵营中的工兵很纠结,他们不属于任何一方。
一个兵营的气势为:该兵营中的工兵数 × 该兵营到 m m m号兵营的距离;参与游戏 一方的势力定义为:属于这一方所有兵营的气势之和。
下面图 2 2 2为 n = 6 n=6 n=6, m = 4 m = 4 m=4的示例,其中红色为龙方,黄色为虎方:
游戏过程中,某一刻天降神兵,共有 s 1 s_1 s1位工兵突然出现在了 p 1 p_1 p1号兵营。作为轩轩和凯凯的朋友,你知道如果龙虎双方气势差距太悬殊,轩轩和凯凯就不愿意继续玩下去了。为了让游戏继续,你需要选择一个兵营 p 2 p_2 p2,并将你手里的 s 2 s_2 s2位工兵全部派往兵营 p 2 p_2 p2,使得双方气势差距尽可能小。
注意:你手中的工兵落在哪个兵营,就和该兵营中其他工兵有相同的势力归属(如果落在 m m m号兵营,则不属于任何势力)。
输入输出格式
输入格式:
输入文件的第一行包含一个正整数 n n n,代表兵营的数量。接下来的一行包含 n n n个正整数,相邻两数之间以一个空格分隔,第 i i i个正整数代 表编号为 i i i的兵营中起始时的工兵数量 c i c_i ci。接下来的一行包含四个正整数,相邻两数间以一个空格分隔,分别代表 m m m, p 1 p_1 p1, s 1 s_1 s1, s 2 s_2 s2。
输出格式:
输出文件有一行,包含一个正整数,即 p 2 p_2 p2,表示你选择的兵营编号。如果存在多个编号同时满足最优,取最小的编号。
输入输出样例
输入样例#1:
6
2 3 2 3 2 3
4 6 5 2
输出样例#1:
2
输入样例#2:
6
1 1 1 1 1 16
5 4 1 1
输出样例#2:
1
说明
输入输出样例 1 说明】
见问题描述中的图 2 2 2。
双方以 m = 4 m=4 m=4号兵营分界,有 s 1 = 5 s_1=5 s1=5位工兵突然出现在 p 1 = 6 p_1=6 p1=6号兵营。 龙方的气势为:
2 × ( 4 − 1 ) + 3 × ( 4 − 2 ) + 2 × ( 4 − 3 ) = 14 2×(4−1)+3×(4−2)+2×(4−3)=14 2×(4−1)+3×(4−2)+2×(4−3)=14
虎方的气势为:
2 × ( 5 − 4 ) + ( 3 + 5 ) × ( 6 − 4 ) = 18 2×(5−4)+(3+5)×(6−4)=18 2×(5−4)+(3+5)×(6−4)=18
当你将手中的 s 2 = 2 s_2=2 s2=2位工兵派往 p 2 = 2 p_2=2 p2=2号兵营时,龙方的气势变为:
14 + 2 × ( 4 − 2 ) = 18 14+2×(4−2)=18 14+2×(4−2)=18
此时双方气势相等。
【输入输出样例 2 说明】
双方以 m = 5 m=5 m=5号兵营分界,有 s 1 = 1 s_1=1 s1=1位工兵突然出现在 p 1 = 4 p_1 =4 p1=4号兵营。
龙方的气势为:
1 × ( 5 − 1 ) + 1 × ( 5 − 2 ) + 1 × ( 5 − 3 ) + ( 1 + 1 ) × ( 5 − 4 ) = 11 1×(5−1)+1×(5−2)+1×(5−3)+(1+1)×(5−4)=11 1×(5−1)+1×(5−2)+1×(5−3)+(1+1)×(5−4)=11
虎方的气势为:
16 × ( 6 − 5 ) = 16 16×(6−5)=16 16×(6−5)=16
当你将手中的 s 2 = 1 s_2=1 s2=1位工兵派往 p 2 = 1 p_2=1 p2=1号兵营时,龙方的气势变为:
11 + 1 × ( 5 − 1 ) = 15 11+1×(5−1)=15 11+1×(5−1)=15
此时可以使双方气势的差距最小。
【数据规模与约定】
1 < m < n , 1 ≤ p 1 ≤ n 1<m<n,1≤p_1≤n 1<m<n,1≤p1≤n。
对于 20 % 20\% 20%的数据, n = 3 , m = 2 , c i = 1 , s 1 , s 2 ≤ 100 n=3,m=2,c_i=1,s_1,s_2≤100 n=3,m=2,ci=1,s1,s2≤100
另有 20 % 20\% 20%的数据, n ≤ 10 , p 1 = m , c i = 1 , s 1 , s 2 ≤ 100 n≤10,p_1=m,c_i=1,s_1,s_2≤100 n≤10,p1=m,ci=1,s1,s2≤100
对于 60 % 60\% 60%的数据, n ≤ 100 , c i = 1 , s 1 , s 2 ≤ 100 n≤100,c_i=1,s_1,s_2≤100 n≤100,ci=1,s1,s2≤100
对于 80 % 80\% 80%的数据, n ≤ 100 , c i , s 1 , s 2 ≤ 100 n≤100,c_i,s_1,s_2 ≤ 100 n≤100,ci,s1,s2≤100
对于 100 % 100\% 100%的数据, n ≤ 1 0 5 , c i , s 1 , s 2 ≤ 1 0 9 n≤10^5 ,c_i,s_1,s_2≤10^9 n≤105,ci,s1,s2≤109
思路
其实这一道题还是比较简单的。
读到这里应该已经有人握紧拳头了
因为 m m m是要后面读入的,所以我是读入完后再一个 f o r for for语句算出 l l l和 r r r( l l l带表左方的气势, r r r带表右方的气势)(还有气势也可以用前缀和算,但当时没有想到),然后根据两个判断和公式即可求出。
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,k,a[10000005];
int main()
{// freopen("fight.in","r",stdin);
// freopen("fight.out","w",stdout);scanf("%lld",&n);for(int i=1;i<=n;++i)scanf("%lld",&a[i]);long long x,y;scanf("%lld%lld%lld%lld",&m,&x,&y,&k);if(m==1 || m==n)//因为都大于0,所以如果在1或n就可以直接输出m{printf("%d",m);fclose(stdin);fclose(stdout);return 0;}a[x]+=y;//把后来要加的加上long long l=0,r=0;for(int i=1;i<=n;++i)//算气势{if(i<m)l+=(long long)a[i]*(m-i);else r+=(long long)a[i]*(i-m);}if(l<r)//如果右边的气势比左边大,把“救兵”放左边{long long t=m-((r-l)/k);//这个程序的精华if((r-l)%k>k/2)t--;//精华#2,因为要算最近的,所以一波骚操作。还有考试的时候,就错这,t--写成t++了,对了就一等了.[哭][哭][哭]printf("%lld",max(t,(long long)1));//防止超界}else if(l>r)//如果左边的气势比右边大,把“救兵”放右边{long long t=m+((l-r)/k);//精华if((l-r)%k>k/2)t++;//精华#2printf("%lld",min(t,(long long)n));//防止超界}elseif(l==r)printf("%lld",m);//如有两边气势相同,就放在分界点
// fclose(stdin);
// fclose(stdout);return 0;
}
【NOIP2018普及组】龙虎斗相关推荐
- 信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗
[题目链接] ybt 1979: [18NOIP普及组]龙虎斗 洛谷 P5016 [NOIP2018 普及组] 龙虎斗 [题目考点] 1. long long类型使用 已知变量a, b是int类型的变 ...
- [NOIP2018 普及组] 龙虎斗
今天就讲讲普及组的题目吧(本菜狗今年就差0.5分就晋级了呜呜呜) 进入正题 先上题目 轩轩和凯凯正在玩一款叫<龙虎斗>的游戏,游戏的棋盘是一条线段,线段上有 nn 个兵营(自左至右编号1∼ ...
- P5016 [NOIP2018 普及组] 龙虎斗
题目描述 轩轩和凯凯正在玩一款叫<龙虎斗>的游戏,游戏的棋盘是一条线段,线段上有 nn 个兵营(自左至右编号 1 \sim n1∼n),相邻编号的兵营之间相隔 11 厘米,即棋盘为长度为 ...
- 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树
[题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...
- 信息学奥赛一本通 1978:【18NOIP普及组】标题统计 | 洛谷 P5015 [NOIP2018 普及组] 标题统计
[题目链接] ybt 1978:[18NOIP普及组]标题统计 洛谷 P5015 [NOIP2018 普及组] 标题统计 [题目考点] 1. 字符串 读入带空格的字符串 将带空格的字符串读入字符数组 ...
- P5017 NOIP2018 普及组 摆渡车
P5017 NOIP2018 普及组 摆渡车 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 显然要把人按照到达时间排序.然后考虑 dp. 设 \(f(i)\) 表示前 \(i\) ...
- NOIP2018普及组初赛题解
展开全文 第24届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛时间:2018 年 10 月 13 日 14:30~16:30 选手注意: 1.试题纸共有 7 页,答题纸共有 2 页,满 ...
- NOIp2018普及组-摆渡车
(作为一名已经离开了普及组的退役选手感到万分庆幸) 题目链接:https://www.luogu.org/problemnew/solution/P5017 1.感觉就是一个类似线性的以时间作为维度的 ...
- 【NOIP2018普及组】对称二叉树
@对称二叉树@ @题目描述@ @题解@ @代码@ @end@ @题目描述@ 一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树: 二叉树: 将这棵树所有节点的左右子树交换,新树和原树对应位置的 ...
最新文章
- 从0学人脸识别,我花3小时复现了Eigenfaces For Recognition
- MySQL执行外部sql脚本
- C#中枚举类型的声明与使用举例
- 解决SecureCRT中文版数据库里没找到防火墙'无'的错误提示
- 很有用的X264和ffmpeg的设置
- Angular 自定义属性指令-禁止input框输入空格-以及删除复制内容中的空格
- Nginx核心模块ngx_http_proxy_module与nginx反向代理、负载均衡详解
- SpringCloud工作笔记088---SpringBoot启动报错:启动后的端口是8080但是明明配置文件中是8000_Request execution error_ java.net.Conn
- rocketmq linux环境下载地址,Linux下RocketMQ下载安装教程
- 给定一个区间寻找三角形_计算给定图片中的三角形数量–程序化解决方案
- MAC使用find命令的正确办法
- 【STM32H7的DSP教程】第18章 DSP控制函数-更好用的SIN,COS计算
- 手机下载的Termux如何利用you-get 下载视频
- 8.单链表实现与反转
- 微信屏蔽网址解决办法 怎么样才能让被微信屏蔽的网址正常访问
- [树莓派 PICO(基于MicroPython)]基础教程02-按键测试、按键控制外设LED开关
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
- 2014年计算机专业硕士研究生好就业吗?一位计算机专业硕士毕业生的求职经历和感想
- java 刻度尺_GitHub - yhongm/ScaleView: ArcScaleView,ScaleView,刻度尺选择器,包括弧形刻度尺选择器和直尺形刻度尺选择器...
- 2017-18赛季NBA常规赛十大事件盘点
热门文章
- 如何查询微博主页地址是什么?
- 车路协同先导试验平台
- 最全英豪工具箱(LvyhTools)PPT插件教程(前篇)
- antd中reset为啥点击两次
- mapgis矢量化怎么打分数_Mapgis矢量化方法
- 为什么canal数据只推送到kafka topic的其中一个分区中
- work-notes(15):私服报错401,Sonatype Nexus Repository Manager,may not contain non-url-safe chars如何解决?
- arcgis通俗易懂教程(一)------入门教程
- 映射、单射、满射、双射
- 酷派android最新版本,酷云手机版下载