結果
| 問題 |
No.702 中央値を求めよ LIMITED
|
| コンテスト | |
| ユーザー |
はむこ
|
| 提出日時 | 2017-10-04 08:22:45 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,268 bytes |
| コンパイル時間 | 1,270 ms |
| コンパイル使用メモリ | 159,436 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-30 03:14:37 |
| 合計ジャッジ時間 | 4,938 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 2 |
| other | WA * 25 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(long long i = 0; i < (long long)(n); i++)
#define all(x) (x).begin(), (x).end()
template<class T1, class T2> bool chmin(T1 &a, T2 b) { return b < a && (a = b, true); }
template<class T1, class T2> bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }
using ll = int64_t;
#define ldout fixed << setprecision(40)
const int N = 1000001;
uint32_t x = 0, y = 1, z = 2, w = 3;
uint32_t x_org, y_org, z_org, w_org;
uint32_t t = 0;
uint32_t generate() {
t = (x^(x<<11));
x = y;
y = z;
z = w;
w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
return w;
}
void reset(void) {
x = x_org, y = y_org, z = z_org, w = w_org;
}
ll seed;
ll min_ = 2000000000 , max_ = 2300000000;
ll less_, greater_, equal_, c = 0;
ll guess, maxltguess, mingtguess, median;
ll n;
int main(void) {
cin >> seed;
x = seed;
x_org = x, y_org = y, z_org = z, w_org = w;
/*
rep(i, N) {
ll x = generate();
chmax(max_, x);
chmin(min_, x);
}
*/
while (1) {
reset();
cout << "iter"<<endl;
guess = (min_+max_)/2;
less_ = 0; greater_ = 0; equal_ = 0;
maxltguess = min_;
mingtguess = max_;
c = 0;
rep(i, N) {
n = generate();
if (n < guess) {
less_++;
if (n > maxltguess)
maxltguess = n;
} else if (n > guess) {
greater_++;
if (n < mingtguess)
mingtguess = n;
} else {
equal_++;
}
c = i + 1;
}
if (less_ <= (N+1)/2 && greater_ <= (N+1)/2)
break;
if (less_>greater_)
max_ = maxltguess;
else
min_ = mingtguess;
}
if (less_ >= (N+1)/2)
median = maxltguess;
else if (less_+equal_ >= (N+1)/2)
median = guess;
else
median = mingtguess;
cout << median << endl;
#if 0
reset();
vector<ll> a(N);
rep(i, N) a[i] = generate();
sort(all(a));
cout << a[N/2] << endl;
if (a[N/2] != median) {
cerr << "NOT MATCH" << endl;
abort();
}
#endif
return 0;
}
はむこ