codeforces#571Div2 D---Vus the Cossack and Numbers【贪心】
2024-10-06 05:57:08
题目: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 ;
}
最新文章
- nodeJS基础08:读取图片
- easyui DataGrid 工具类之 TableUtil class
- python——Django(ORM连表操作)
- Backbone.js学习之Backbone.View(视图)
- Django~NewProject and APP
- OO之美3
- centos 6.4下的postgresql 9.2使用
- 七牛开发文档php
- JBoss7 局域网无法访问 解决方法
- windows7+iis7+php的配置
- css-布局1-基本属性
- Http方式获取网络数据
- Etcd全套安装教程
- VS代码生成工具ReSharper使用手册:配置快捷键(转)
- Android8.0通知
- gdb调试1--包括反汇编及文件编码设置
- 自动化运维之cobbler安装centos7.3
- Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)
- CentOS下的apache配置支持php
- Jmeter 快速入门--初识线程组
热门文章
- [转帖]InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念
- Java中的事务及使用
- Python之reduce函数使用示例
- 03 python 对象笔记
- PAT甲级题分类汇编——理论
- Linux下交换文件说明
- MySQL8.0新特性总览
- 使用docker-compose搭建WordPress
- Spring Cloud Alibaba学习笔记(2) - Nacos服务发现
- Spring Security Oauth2 : Possible CSRF detected