hdu 6040 Hints of sd0061[2017 Multi-University Training Contest - Team 1] [STL]
2017-07-26 20:30
411 查看
题目链接
题意: 求a数组的第b[i]大数
分析: (1)首先要了解c++中求第k大数的STL函数nth_element(start,start + n, end); 这个函数可以使数组第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的. 复杂度为O(n).
(2) 将b数组从大到小排序, 由于由于排在前面的都是比第b[i]小元素, 所以下次调用函数中end参数, 就是上次得到的下标.
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e7 + 10;
const ll mod = 1e9 + 7;
struct G {
int x, i;
bool operator < (const G &t) const {
return x > t.x;
}
};
unsigned gg[maxn], ans[120];
G r[120];
unsigned x, y, z;
unsigned rng61() {
unsigned t;
x ^= x << 16;
x ^= x >> 5;
x ^= x << 1;
t = x;
x = y;
y = z;
z = t ^ x ^ y;
return z;
}
int main() {
int v = 1, n, m;
unsigned a, b, c;
while(~scanf("%d %d %u %u %u", &n, &m, &a, &b, &c)) {
for(int i = 0; i < m; i++) {
scanf("%d", &r[i].x);
r[i].i = i;
}
x = a; y = b; z = c;
for(int i = 0; i < n; i++) {
gg[i] = rng61();
}
sort(r, r + m);
int nn = n;
for(int i = 0; i < m; i++) {
if(i && r[i].x == r[i - 1].x) {
ans[r[i].i] = ans[r[i - 1].i];
continue;
}
nth_element(gg, gg + r[i].x, gg + nn);
nn = r[i].x;
ans[r[i].i] = gg[r[i].x];
}
printf("Case #%d: ", v++);
for(int i = 0; i < m; i++) {
printf("%u%c", ans[i], i == m - 1 ? '\n' : ' ');
}
}
return 0;
}
题意: 求a数组的第b[i]大数
分析: (1)首先要了解c++中求第k大数的STL函数nth_element(start,start + n, end); 这个函数可以使数组第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的. 复杂度为O(n).
(2) 将b数组从大到小排序, 由于由于排在前面的都是比第b[i]小元素, 所以下次调用函数中end参数, 就是上次得到的下标.
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e7 + 10;
const ll mod = 1e9 + 7;
struct G {
int x, i;
bool operator < (const G &t) const {
return x > t.x;
}
};
unsigned gg[maxn], ans[120];
G r[120];
unsigned x, y, z;
unsigned rng61() {
unsigned t;
x ^= x << 16;
x ^= x >> 5;
x ^= x << 1;
t = x;
x = y;
y = z;
z = t ^ x ^ y;
return z;
}
int main() {
int v = 1, n, m;
unsigned a, b, c;
while(~scanf("%d %d %u %u %u", &n, &m, &a, &b, &c)) {
for(int i = 0; i < m; i++) {
scanf("%d", &r[i].x);
r[i].i = i;
}
x = a; y = b; z = c;
for(int i = 0; i < n; i++) {
gg[i] = rng61();
}
sort(r, r + m);
int nn = n;
for(int i = 0; i < m; i++) {
if(i && r[i].x == r[i - 1].x) {
ans[r[i].i] = ans[r[i - 1].i];
continue;
}
nth_element(gg, gg + r[i].x, gg + nn);
nn = r[i].x;
ans[r[i].i] = gg[r[i].x];
}
printf("Case #%d: ", v++);
for(int i = 0; i < m; i++) {
printf("%u%c", ans[i], i == m - 1 ? '\n' : ' ');
}
}
return 0;
}
相关文章推荐
- HDU-6040 Hints of sd0061 - 2017 Multi-University Training Contest - Team 1(快排思想STL应用)
- 2017 Multi-University Training Contest - Team 1 :Hints of sd0061(hdu 6040)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6051 If the starlight never fade [欧拉函数] [2017 Multi-University Training Contest - Team 2]
- HDU-6181 Two Paths(2017 Multi-University Training Contest - Team 10)
- 2017 Multi-University Training Contest - Team 7 HDU 6192 Just do it (杨辉三角)【转】
- hdu 6069 Counting Divisors(约数个数)(2017 Multi-University Training Contest - Team 4 )
- hdu 6070 Dirt Ratio(二分+线段树)(2017 Multi-University Training Contest - Team 4 )
- hdu 6073 Matching In Multiplication(2017 Multi-University Training Contest - Team 4 )
- 2017 Multi-University Training Contest - Team 6 HDU 6105 Gameia(博弈)
- 2017 Multi-University Training Contest - Team 1 1001&&HDU 6033 Add More Zero【签到题,数学,水】
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)
- hdu 6047 Maximum Sequence(2017 Multi-University Training Contest - Team 2)
- hdu 6045 Is Derek lying?(2017 Multi-University Training Contest - Team 2)
- HDU 6168 - Numbers 水题 2017 Multi-University Training Contest - Team 9
- HDU - 6098 Inversion (2017 Multi-University Training Contest - Team 6)
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- HDU 6127 Hard challenge(思维+计算几何)——2017 Multi-University Training Contest - Team 7
- hdu 6070 Dirt Ratio(二分+线段树)(2017 Multi-University Training Contest - Team 4 )
- HDU-6129 Just do it - 2017 Multi-University Training Contest - Team 7(规律、杨辉三角、组合数奇偶性)