【ACdream OJ 1099 - 瑶瑶的第K大 (输入优化+手写O(n)快排)】
2014-07-01 12:02
501 查看
题目链接:
ACdream1099
【分析】
开始用sort直接TLE,然后只能手写快排,当找到第k大时直接return,可以接近O(n)复杂度,但是还需要用getchar()提高输入速度,否则也会超时,具体看代码
【AC代码】4096ms
ACdream1099
【分析】
开始用sort直接TLE,然后只能手写快排,当找到第k大时直接return,可以接近O(n)复杂度,但是还需要用getchar()提高输入速度,否则也会超时,具体看代码
【AC代码】4096ms
#include <cstdio> #include <ctime> #include <cstring> #include <algorithm> using namespace std; #define MAXN 5000010 int a[MAXN]; char ch; int input()//快速读入,比scanf快3~5倍左右 { while((ch = getchar()) < '0' || '9' < ch) ; int ans = ch-'0'; while((ch = getchar()) >= '0' && '9' >= ch) ans = ans*10+ch-'0'; return ans; } int q_sort(int l, int r, int k)//快排找到后直接退出 { if (l < r) { int i = l, j = r, x = a[l]; while(i < j) { while(i < j && a[j] >= x) j--; if (i < j) a[i++] = a[j]; while(i < j && a[i] <= x) i++; if (i < j) a[j--] = a[i]; } a[i] = x; if (k == i) return a[i]; else if (i > k) return q_sort(l,i-1,k); else return q_sort(i+1,r,k); } return a[l]; } int main() { #ifdef SHY freopen("e:\\1.txt","r",stdin); #endif int n = input(), k = input(); for (int i = 0; i < n; i++) a[i] = input(); printf("%d\n", q_sort(0,n-1, n-k)); return 0; }
相关文章推荐
- ACdream OJ 1099 瑶瑶的第K大 --分治+IO优化 - whatbeg
- ACdream OJ 1099 瑶瑶的第K大 --分治+IO优化
- ACdream OJ 1099 瑶瑶的第K大
- AC dream 1099 瑶瑶的第K大
- ACdream OJ - 1061 && 1062 && 1098 && 1099
- acdream oj 1101 瑶瑶想要玩滑梯
- acdream oj 1105 瑶瑶带你玩激光坦克
- acdreamoj 1106 游泳水平有限的瑶瑶
- acdreamoj 瑶瑶饿了 完全背包
- ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
- ACdream OJ sgx和路飞 (二分答案+数位统计)
- acdream oj 1211 有上下界的网络流
- ACdream OJ 1020 The Game about KILL
- ACdreamoj(1105)模拟题
- Acdreamoj1115(数学思维称号)
- AcDream OJ 1127 Base Station
- ACdream oj 1191 Dragon Maze(手速赛 A)
- ACdream OJ 1153 (k-GCD)
- ACdreamoj1056(带权并查集)
- ACdreamoj(1105)模拟题