题目描述

韩信点兵,多多益善。

战前,萧何备军。韩信检阅,曰:“增1人?”。萧何答:“甚好”。韩信再曰:“使看齐?”。

萧何再答“甚好”。

输入

输入有多组(不超过100)测试实例。

每组测试实例第1行为1个正整数M(1 ≤ M ≤ 100),表示接下来有M行士兵的信息。每行士兵信息为两个正整数H(100 <= H <= 200),N(1 <= N <= 1000),分别表示士兵身高和其对应的士兵人数。

输入结束将由一行M=0的测试实例表示,不应处理此测试实例。

输出

每组测试实例输出一行,格式为:“Case i: sum”,其中i是测试实例的编号(从1开始),sum为一个正整数,即增加的这名士兵与其他每名士兵的身高差之和,该和满足:是所有可能的和当中最小的和。

样例输入

2

160 1

170 1

4

160 1

165 1

170 1

180 2

0

样例输出

Case 1: 10

Case 2: 35

解析:题目其实就是求插入一个士兵,使得他与每个士兵的身高和达到最小时的,身高差总和。

其实,n个数中,求一个数到所有数差和最小,这个数就是这一列数的中位数,然后再求差和即可。

当然我们其实也可以直接暴力遍历,这题不会超时,但我们得知道,这个插入的士兵的身高数值肯定在原有士兵最矮和最高之间。我们可以利用一个数组来存储原有所有士兵的身高数据,然后遍历求最小值。在这里建议数组开大一点。

中位数:

#include <bits/stdc++.h>
using namespace std;
int k[100005];
int main()
{int m,n,i,s,mid,cnt=0,sg,ge,sum;while(~scanf("%d",&n)){     //n种身高的士兵 if(n==0) break;m=0,sum=0,cnt++; //cnt用来计数case for(i=0;i<n;i++){scanf("%d %d",&sg,&ge);      //输入身高和对应个数 for(s=0;s<ge;s++) k[m++]=sg;   //存入数组 }sort(k,k+m);   //排序 if(m%2==1) mid=k[m/2];  //求出中位数mid else mid=k[m/2-1];for(i=0;i<m;i++){sum=sum+abs(k[i]-mid);       //累加 }printf("Case %d: %d\n",cnt,sum);}return 0;
}

暴力:

#include <stdio.h>
int k[1000005];
int main()
{long long n,i,s,m=0,a,b,max=100,min=200,sum=0,cnt=1,min1=9999999;while(~scanf("%lld",&n)){m=0;if(n==0){break;}for(i=0;i<n;i++){scanf("%lld %lld",&a,&b);if(a>max) max=a;if(a<min) min=a;for(s=0;s<b;s++){k[m]=a;  //存入k数组中 m++;}}for(i=min;i<=max;i++){for(s=0;s<m;s++){sum=sum+abs(i-k[s]); //求身高差和 }if(sum<min1) min1=sum;   //如比最小值小,替换 sum=0;}printf("Case %lld: %lld\n",cnt,min1);cnt++,min1=9999999; //初始化数据,cnt不用,记录第几个测试用例 max=100,min=200;}return 0;
}

ZCMU--5193: 韩信点兵(C语言)相关推荐

  1. 韩信点兵C语言实现的几种方法

    韩信点兵C语言实现的几种方法 问题描述: 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了.输入3个非负整 ...

  2. 韩信点兵算法——c语言实现

    韩信点兵算法--c语言实现 今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?这个问题就是韩信点兵. 本来考虑中国剩余定理,也就是将三排剩余数乘以70,五排剩余数乘以21,7排剩余数 ...

  3. C语言实现韩信点兵算法的代码

    下面代码段是关于C语言实现韩信点兵算法的代码. #include <stdio.h> int main() {int a=0,b=0,c=0,x;scanf("%d%d%d&qu ...

  4. C语言韩信点兵3人一列余1,韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一...

    韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人.5人一 答案:2  信息版本:手机版 解决时间 2020-07-26 19:39 已解决 2020-07 ...

  5. C语言题目:韩信点兵

    题目:韩信点兵,韩信带1500名士兵打仗,战死四五百人,站3人一排,多出2人:站5人一排,多出4人:站7人一排,多出6人.编程计算还有多少士兵? 死四五百人,死最多是500,所以保底还剩1000,i赋 ...

  6. 韩信点兵python程序_韩信点兵计算公式与代码

    韩信点兵计算公式与代码 问题描述: 淮安民间传说着一则故事--"韩信点兵",其次有成语"韩信点兵,多多益善". 韩信带1500名兵士打仗,战死四五百人,站3人一 ...

  7. 韩信点兵--求分数序列前N项和--特殊a串数列求和--猜数字游戏

    实验4-1-5 韩信点兵 (10分) 在中国数学史上,广泛流传着一个"韩信点兵"的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳.据说韩信的数学水平 ...

  8. 韩信点兵 中国剩余定理

    1077 韩信点兵 时间限制:500MS  内存限制:65536K 提交次数:1103 通过次数:99 题型: 编程题   语言: G++;GCC Description 相传汉高祖刘邦问大将军韩信统 ...

  9. 韩信点兵公式及其Java代码

    韩信点兵公式及其Java代码 问题描述: 淮安民间传说着一则故事--"韩信点兵",其次有成语"韩信点兵,多多益善". 韩信带1500名兵士打仗,战死四五百人,站 ...

最新文章

  1. 科技城|从专利布局看人工智能领域全球竞争与中国面临的挑战
  2. 交换机端口与mac_address的绑定
  3. 对话框处理与登录测试
  4. 19.删除链表的倒数第N个节点 golang
  5. Android开发(1) | Fragment 的应用——新闻应用
  6. 十强决赛即将拉开帷幕!TECHSPARK星星之火IT创新大赛诚邀您观赛
  7. 关于Word2016敲入公式的新方法
  8. mysql有闪回吗_【赵强老师】MySQL的闪回
  9. Java进阶(二十九)集合12:集合练习题
  10. Topaz Mask AI for mac(人工智能AI抠图软件) 最新版
  11. 计算机类期刊投稿经验
  12. 【CVPR2022】Beyond Fixation: Dynamic Window Visual Transformer
  13. byte[]转String出现乱码(EFBFBD或3F)
  14. DOS命令全集【经典全集!】
  15. Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉
  16. linux 查询ip归属地的工具,Linux 通过shell查询ip归属地(curl请求转码)
  17. Henry前端笔记之 Node及npm相关
  18. 什么是亚稳态,如何消除?
  19. 健身运动装备有哪些?双十一运动健身装备选购指南
  20. SAP付款方式与 订单客户组

热门文章

  1. 解决Kafka消费端错误:o.s.kafka.listener.LoggingErrorHandler : Error while processing: null
  2. 阿里云短信平台简单使用
  3. 大学物理复习4-保守力(做功)+功能原理+机械能守恒
  4. HBA-蜜獾算法(Honey Badger Algorithm,HBA)(算法源码可复制)
  5. Pytorch基本操作流程: 七步成诗
  6. 中国探月计算机考试时间,揭秘人类探月历程(组图)
  7. Unity3D之Android加密DLL与破解DLL
  8. 饕餮盛宴 | 人工智能与未来城市
  9. 定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。
  10. 论EI、SCI和ISTP检索论文的收录号和期刊号查询方法