Codeforces GYM 100738C Rating Shuffle
2016-08-08 23:00
344 查看
传送门:http://codeforces.com/gym/100738/problem/C
ac程序:
思路:
首先这是一道裸裸的二分题,单调性明显,主要问题就是数据范围,在10的18的数据范围里二分查找,其实并不用担心,10的18次方也最多只要60次二分就够了,再加上10的5次方的check,只有6*10的6次方,完全是可以过的。
但是我仍然超时了无数次。
罪魁祸首,始作俑者就是cin
原本以为10的5次方的数据范围不需要scanf,结果就是需要,10的5次方的读入再加上后面那个玩意就会超时,所以,我决定
要不以后就只写scanf吧。。。。。。
ac程序:
//库省略 #define ft first #define sd second #define np next_permutation #define ll long long #define pb push_back using namespace std; ll n,d; int a[100005]; bool ok; bool check(ll mid) { ll fir=a[1]+d*mid; for(int i=2;i<=n;i++) { ll t=a[i]+d*mid; if(t<fir) { fir=t; continue; } ll times=(t-fir)/d/2+1; if(times>mid) { return false; } fir=t-d*times*2; } return true; } int main() { cin>>n>>d; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]>=a[i-1] && !ok) ok=true; } if(!ok) { cout<<0; return 0; } ll l=0,r=1e18; while(l<=r) { ll mid=(l+r)>>1; if(check(mid)) r=mid-1; else l=mid+1; } cout<<l; return 0; }
思路:
首先这是一道裸裸的二分题,单调性明显,主要问题就是数据范围,在10的18的数据范围里二分查找,其实并不用担心,10的18次方也最多只要60次二分就够了,再加上10的5次方的check,只有6*10的6次方,完全是可以过的。
但是我仍然超时了无数次。
罪魁祸首,始作俑者就是cin
原本以为10的5次方的数据范围不需要scanf,结果就是需要,10的5次方的读入再加上后面那个玩意就会超时,所以,我决定
要不以后就只写scanf吧。。。。。。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结