結果
| 問題 |
No.5008 [Cherry Alpha] Discrete Pendulum with Air Resistance
|
| コンテスト | |
| ユーザー |
SSRS
|
| 提出日時 | 2022-10-14 23:19:56 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 2,489 bytes |
| コンパイル時間 | 1,485 ms |
| 実行使用メモリ | 3,556 KB |
| スコア | 969,856,183,080,229 |
| 最終ジャッジ日時 | 2022-10-14 23:20:07 |
| 合計ジャッジ時間 | 9,917 ms |
|
ジャッジサーバーID (参考情報) |
judge12 / judge13 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
long long ap(long long a, long long d, long long n){
return (2 * a + (n - 1) * d) * n / 2;
}
int get(int B, int M, int E, int t){
int cnt = (B - M) / E + 1;
long long T = ap(B * 2, -E * 2, cnt);
if (t <= T){
int tv = 0, fv = (B - M) / E + 1;
while (fv - tv > 1){
int mid = (tv + fv) / 2;
if (ap(B * 2, -E * 2, mid) <= t){
tv = mid;
} else {
fv = mid;
}
}
long long t2 = ap(B * 2, -E * 2, tv);
t -= t2;
if (tv % 2 == 0){
int a = B - E * tv;
if (t <= a){
return t;
} else {
return a * 2 - t;
}
} else {
int a = B - E * tv;
if (t <= a){
return -t;
} else {
return -(a * 2 - t);
}
}
} else {
t -= T;
t %= M * 4;
int ans;
if (t < M){
ans = t;
} else if (t < M * 3){
ans = M * 2 - t;
} else {
ans = t - M * 4;
}
if (cnt % 2 == 1){
ans *= -1;
}
return ans;
}
}
long long get_score(int N, int K, vector<int> T, vector<int> U, vector<int> B, vector<int> M, vector<int> E){
long long S1 = 0, S2 = 0;
for (int i = 0; i < K; i++){
vector<int> X(N);
for (int j = 0; j < N; j++){
X[j] = get(B[j], M[j], E[j], T[i]);
}
double ans = 0;
for (int j = 0; j < N; j++){
for (int k = j + 1; k < N; k++){
ans += (double) abs(X[j] - X[k]) / (B[j] + B[k]);
}
}
ans *= 20000000;
ans /= N;
ans /= N - 1;
S1 += ans;
}
for (int i = 0; i < K; i++){
vector<int> X(N);
for (int j = 0; j < N; j++){
X[j] = get(B[j], M[j], E[j], U[i]);
}
int mx = 0;
for (int j = 0; j < N; j++){
for (int k = j + 1; k < N; k++){
mx = max(mx, abs(X[k] - X[j]));
}
}
double ans = (double) mx / 20 + 1;
ans = 10000000 / sqrt(ans);
S2 += ans;
}
S1 /= K;
S2 /= K;
return S1 * S2;
}
int main(){
int N, K;
cin >> N >> K;
vector<int> T(K);
for (int i = 0; i < K; i++){
cin >> T[i];
}
vector<int> U(K);
for (int i = 0; i < K; i++){
cin >> U[i];
}
mt19937 mt(0);
vector<int> B(N), M(N), E(N);
for (int i = 0; i < N; i++){
B[i] = mt() % 10 + 1;
M[i] = mt() % B[i] + 1;
E[i] = mt() % 5 + 1;
if (M[i] > B[i]){
swap(M[i], B[i]);
}
}
//cout << get_score(N, K, T, U, B, M, E) << endl;
for (int i = 0; i < N; i++){
cout << B[i] << ' ' << M[i] << ' ' << E[i] << endl;
}
}
SSRS