結果
| 問題 |
No.5008 [Cherry Alpha] Discrete Pendulum with Air Resistance
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-10-15 01:15:42 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 1,837 ms / 2,000 ms |
| コード長 | 2,401 bytes |
| コンパイル時間 | 1,844 ms |
| 実行使用メモリ | 26,180 KB |
| スコア | 972,667,111,149 |
| 最終ジャッジ日時 | 2022-10-15 01:17:25 |
| 合計ジャッジ時間 | 101,939 ms |
|
ジャッジサーバーID (参考情報) |
judge8 / judge10 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;
class Program
{
static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();
static void Main()
{
Solve();
}
static void Solve()
{
var start = DateTime.Now;
var c = NList;
var (n, k) = (c[0], c[1]);
var t = NList;
var u = NList;
var r = new Random();
var limit = 1.8;
var maxpt = 0.0;
var count = 0;
var res = new int[n][];
for (var i = 0; i < n; ++i) res[i] = new int[3];
while ((DateTime.Now - start).TotalSeconds < limit)
{
var b = new int[n];
var m = new int[n];
var e = new int[n];
for (var i = 0; i < n; ++i)
{
b[i] = r.Next(1, 50000000);
m[i] = b[i];
e[i] = 1;
}
var sumt = 0.0;
var sumu = 0.0;
var post = new int[n];
var posu = new int[n];
for (var i = 0; i < n; ++i)
{
post[i] = Pos(t[i], b[i]);
posu[i] = Pos(u[i], b[i]);
}
for (var i = 0; i < k; ++i)
{
var rt = 0.0;
var ru = 0;
for (var x = 0; x < n; ++x) for (var y = x + 1; y < n; ++y)
{
rt += (double)Math.Abs(post[x] - post[y]) / (b[x] + b[y]);
ru = Math.Max(ru, posu[x] - posu[y]);
}
sumt += rt * 20000000 / n / (n - 1);
sumu += 10000000 / (1 + Math.Sqrt(ru / 20.0));
}
if (maxpt < sumt * sumu / n / n)
{
maxpt = sumt * sumu / n / n;
for (var i = 0; i < n; ++i)
{
res[i][0] = b[i];
res[i][1] = m[i];
res[i][2] = e[i];
}
}
++count;
}
WriteLine(string.Join("\n", res.Select(ri => string.Join(" ", ri))));
}
static int Pos(int t, int b)
{
var p = t % (b * 4);
if (p >= b && p < b * 3) return b * 2 - p;
else if (p >= b * 3) return p - b * 4;
return p;
}
}