题目链接

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1398

题意:

输入t 有t个测试用例每个测试用例第一行输入三个数n,m,y;第二行输入n个数x1,x2....xn。

要求输出看k1,k2....kn。使得 |Xi/Y - Ki/M|. 最小,x1+x2+...+xn=y;  k1+k2+...+kn=m;

这个题目是应该做出来的,基础搞好,做什么都好

每个人开始得到  ki=m*xi/y     这样使得m可能还有剩余把|Xi/Y - Ki/M|. 假设把多余的加一个一到上面相减再排序,小的优先加一

如:

sum=m-sum;
for(i=0;i<n;i++)
{
a[i].num=i;
a[i].x=abs((c[i]+1.0)/m-b[i]*1.0/y)-abs(c[i]*1.0/m-b[i]*1.0/y);
}
sort(a,a+n,cmp);
for(i=0;i<sum;i++)
{
c[a[i].num]++;
}

只要有一定的算法基础,这个题就很容易:

代码

#include<stdio.h>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

struct node
{
int num;
double x;
}a[1005];

bool cmp(node a,node b)
{
return a.x<b.x;
}

int main(void)
{
int t;
int i,j,k;
int n,m,y;
int b[1005];
int c[1005];
scanf("%d",&t);
while(t--)
{
int sum=0;
scanf("%d%d%d",&n,&m,&y);
for(i=0;i<n;i++)
{
scanf("%d",b+i);
c[i]=b[i]*m/y;
sum=sum+c[i];
}
sum=m-sum;
for(i=0;i<n;i++)
{
a[i].num=i;
a[i].x=abs((c[i]+1.0)/m-b[i]*1.0/y)-abs(c[i]*1.0/m-b[i]*1.0/y);
}
sort(a,a+n,cmp);
for(i=0;i<sum;i++)
{
c[a[i].num]++;
}
for(i=0;i<n-1;i++)
printf("%d ",c[i]);
printf("%d\n",c[i]);
if(t)
printf("\n");
}
return 0;
}

这个题应注意别改变它相应的次序:

ZOJ-2343-Robbers的更多相关文章

  1. 训练赛第二场G题 ZOJ 2343

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2343 解题报告:首先我假设最后的正确的结果是a[1] , a[2 ...

  2. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  3. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  4. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  5. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  6. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

  7. ZOJ Problem Set - 1006 Do the Untwist

    今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...

  8. ZOJ Problem Set - 1001 A + B Problem

    ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...

  9. zoj 1788 Quad Trees

    zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...

  10. ZOJ 1958. Friends

    题目链接: ZOJ 1958. Friends 题目简介: (1)题目中的集合由 A-Z 的大写字母组成,例如 "{ABC}" 的字符串表示 A,B,C 组成的集合. (2)用运算 ...

随机推荐

  1. HDU 3743 Frosh Week(归并排序求逆序数)

    归并排序求逆序数 #include <iostream> #include <cstdio> using namespace std; #define maxn 1000005 ...

  2. 使用python将mysql数据库的数据转换为json数据

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...

  3. 使用Pushlet将消息从服务器端推送到客户端

    使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动 ...

  4. VPN工作原理

    引言 在过去几十年中,世界发生了很大的变化.现在很多公司除了处理本地或地区性事务外,还要考虑全球市场和物流的问题.很多公司在全国甚至全球都设有分支机构,而这些公司都需要做的一件事情就是:找到能够与分公 ...

  5. CCS设计手段——相对定位

    1.认识相对定位 相对定位就是让元素相对自己原来的位置进行位置调整. 2.相对定位的本质特性 不脱标,老家留坑,形影分离. 3.用途 ①微调位置 ②做绝对定位的参考,子绝父相 4.相对定位的定位置 相 ...

  6. pthread_join

    摘要:pthread_join使一个线程等待另一个线程束. 代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了.加入pthread_jo ...

  7. golang中container/heap包源码分析

    学习golang难免需要分析源码包中一些实现,下面就来说说container/heap包的源码 heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任 ...

  8. (简单) POJ 2750 Potted Flower,环+线段树。

    Description The little cat takes over the management of a new park. There is a large circular statue ...

  9. iOS9新特性-3D Touch

    本文主要讲解3DTouch各种场景下的开发方法,开发主屏幕应用icon上的快捷选项标签(Home Screen Quick Actions),静态设置 UIApplicationShortcutIte ...

  10. C# DateTime简单的定时器用法

    DateTime是C#中的时间类,有公共索引器Now可以获取当前时间. 如果制作简单定时器的话,可以这样: 初始化:DateTime lasttime=DateTime.Now; TimeSpan t ...