codeforces 719C Efim and Strange Grade (复杂模拟)
来源:互联网 发布:淘宝动态评分怎么提升 编辑:程序博客网 时间:2024/05/21 01:48
题目大意:进行k次四舍五入,可以得到的最大的数。
解题思路:从小数点后面找到第一个大于等于5的数字,从后往前遍历,要特别注意9的往前进位,本题还有一个trick 999.999 这个数字最后要输出1000,而我最开始的算法并没有考虑往前面+1的情况 T^T....被人hack了...
AC代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include<set>#include<map>#include<queue>#define MAXN 5005#define inf 0x3f3f3f3f#define ONES(x) __builtin_popcount(x)using namespace std;typedef long long ll ;const double eps =1e-8;const int mod = 1000000007;typedef pair<int, int> P;const double PI = acos(-1.0);int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int n,t;int ans;char str[200005];int main(){ //freopen("test.txt","r",stdin); cin>>n>>t; cin>>str; int len = strlen(str); int dot_pos = 0,pos = 0;//pos->the operation place int flag = 0; int last = len;//last标记截止的位置,时刻更新 for(int i = 0; i<len ; i++)//预处理部分,找到小数点的位置和小数点后面第一个大于5的数字的位置 { if(str[i]=='.') {dot_pos = i;flag = 1;} if(flag==1 && str[i]-'5'>=0) {pos = i;break;} } if(pos <= dot_pos)//特判小数点后没有大于5的数字的情况 { for(int i = 0; i<len ; i++) cout << str[i]; cout << endl; return 0; } int m = len - dot_pos; int k = 0; while(k<min(m-1,t) && pos>dot_pos && str[pos]>='5')//进行最多k次四舍五入,位置不能超过小数点 { if(pos-1 == dot_pos) pos--; while(str[pos-1]=='9')//处理9的进位的情况 { pos--; if(pos-1 == dot_pos)//可以越过小数点 pos--; last = pos; } str[pos-1] += 1; pos--; last = pos; k++; } //cout << last << endl; for(int i = 0; i<=last ; i++) cout << str[i]; if(last==-1 && str[0]=='9')//特殊处理需要+1的情况 cout << "1" ; while(last+1<dot_pos) { cout << "0"; last++; } cout << endl; //cout << ans << endl; return 0;}
0 0
- codeforces 719C Efim and Strange Grade (复杂模拟)
- codeforces 719 C. Efim and Strange Grade(模拟)
- codeforces 719 C Efim and Strange Grade (模拟)
- Codeforces 719C Efim and Strange Grade 贪心+模拟
- codeforces 719C. Efim and Strange Grade
- [Codeforces #373 (Div. 2) C. Efim and Strange Grade] 模拟
- [codeforces] C - Efim and Strange Grade 模拟+贪心
- Codeforces 719C Efim and Strange Grade【贪心】
- CodeForces-718A Efim and Strange Grade(模拟)
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade(贪心+模拟,t次进位之后的数是什么)
- codeforces Round 373 div2 C. Efim and Strange Grade 模拟+ priority_queue
- Codeforces Round #373 (Div. 2) C: Efim and Strange Grade
- Codeforces Round #373 (Div. 2) -- C - Efim and Strange Grade (贪心)
- codeforces373#C. Efim and Strange Grade
- Codeforces Round #373 (Div. 1)A. Efim and Strange Grade【恶心模拟】
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade 贪心、实数字符串"a.b"处理
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理
- Codeforces 718A A. Efim and Strange Grade
- javascript时间格式代码
- 前端开发 环境搭建
- Shell下的作业管理
- LeetCode[230] Kth Smallest Element in a BST
- Deepin搭建Qt5开发环境
- codeforces 719C Efim and Strange Grade (复杂模拟)
- 总结一下学习Designated Initializer的过程
- 简单的透明shader
- Ubuntu 14.04 设置静态IP地址全攻略
- Java 文件复制 基于字节流数据传输
- SpringMVC 的配置文件实例
- 面向对象基础部分
- 【备忘】【No2】2016年最新云计算视频教程hadoop大数据实战开发
- Longest Substring Without Repeating Characters