题目http://codeforces.com/contest/1186/problem/D

题意:给定一个大小为$n$的浮点序列,这$n$个数的和为0.

现在对这个序列中的每个数,进行向上取整或向下取整的操作,使得得到的整数序列之和也是0.

思路:假设我们现在的某一种取法得到的和是$ans$,那么改变其中一个数的取法对$ans$的改变可能是+1或是-1

所以我们想随便按照某种方法得到一个结果,再进行调整就可以了。

最简单的就是我们全部先取整数部分,如果此时的$ans>0$说明负数都太小了,那么我们就找$ans$个负数,让他们改成取下整。

如果$ans<0$说明正数都太小了,我们就找$ans$个正数,让他们改成取上整于是答案就会相应增加$ans$变成了0.

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n;
const int maxn = 1e5 + ;
float num[maxn]; int main()
{
scanf("%d", &n);
int ans = ;
for(int i = ; i < n; i++){
scanf("%f", &num[i]);
ans += (int)num[i];
} //printf("%d\n", ans);
if(ans > ){
for(int i = ; i < n; i++){
if(num[i] > || (int)num[i] == num[i] || ans <= )printf("%d\n", (int)num[i]);
else {
printf("%d\n",(int)(num[i] - ));
ans--;
}
}
}
else{
for(int i = ; i < n; i++){
if(num[i] < || (int)num[i] == num[i] || ans >= )printf("%d\n", (int)num[i]);
else{
printf("%d\n", (int)(num[i] + ));
ans++;
}
}
} return ;
}

最新文章

  1. nodeJS基础08:读取图片
  2. easyui DataGrid 工具类之 TableUtil class
  3. python——Django(ORM连表操作)
  4. Backbone.js学习之Backbone.View(视图)
  5. Django~NewProject and APP
  6. OO之美3
  7. centos 6.4下的postgresql 9.2使用
  8. 七牛开发文档php
  9. JBoss7 局域网无法访问 解决方法
  10. windows7+iis7+php的配置
  11. css-布局1-基本属性
  12. Http方式获取网络数据
  13. Etcd全套安装教程
  14. VS代码生成工具ReSharper使用手册:配置快捷键(转)
  15. Android8.0通知
  16. gdb调试1--包括反汇编及文件编码设置
  17. 自动化运维之cobbler安装centos7.3
  18. Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)
  19. CentOS下的apache配置支持php
  20. Jmeter 快速入门--初识线程组

热门文章

  1. [转帖]InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念
  2. Java中的事务及使用
  3. Python之reduce函数使用示例
  4. 03 python 对象笔记
  5. PAT甲级题分类汇编——理论
  6. Linux下交换文件说明
  7. MySQL8.0新特性总览
  8. 使用docker-compose搭建WordPress
  9. Spring Cloud Alibaba学习笔记(2) - Nacos服务发现
  10. Spring Security Oauth2 : Possible CSRF detected