提出 #41771352


ソースコード 拡げる

#include <bits/stdc++.h>
#define st first
#define nd second
#define db double
#define re register
#define pb push_back
#define mk make_pair
#define int long long
#define ldb long double
#define pii pair<int, int>
#define ull unsigned long long
#define mst(a, b) memset(a, b, sizeof(a))
#define i128 __int128
using namespace std;
const int N = 3e5 + 10, INF = 1e18;
inline int read()
{
  int s = 0, w = 1;
  char ch = getchar();
  while(ch < '0' || ch > '9') { if(ch == '-') w *= -1; ch = getchar(); }
  while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
  return s * w;
}
struct Skill{ i128 t, d, p; }sk[N], ar[N];
int n, m, h;
inline i128 f(i128 a, i128 b, i128 c) { return (a + b) * c / 2; }
inline bool check(i128 T)
{
  i128 u = 1, v = 2, tim = 0, sum = 0;
  while(tim < T){
    i128 mx = T - ar[u].t + 1; //最大的能打满伤害的时刻
    if(tim < mx) sum += (mx - tim) * ar[u].p, tim = mx;
    else{
      if(v > m) { sum += f(ar[u].d * (T - tim), ar[u].d, T - tim); break; }
      mx = T - ar[v].t + 1;
      if(ar[u].d * (T - mx + 1) >= ar[v].p) sum += f(ar[u].d * (T - tim), ar[u].d * (T - mx + 1), mx - tim), v++;
      else{
        int l = tim + 1, r = mx, res;
        while(l <= r){
          int mid = (l + r) >> 1;
          if(ar[u].d * (T - mid + 1) < ar[v].p) res = mid, r = mid - 1;
          else l = mid + 1;
        }
        int tem = res - 1;
        sum += f(ar[u].d * (T - tim), ar[u].d * (T - tem + 1), tem - tim);
        tim = tem, u = v, v = u + 1;
      }
    }
    if(sum >= h) return true;
  }
  return sum >= h;
}
inline bool cmp(Skill a, Skill b) { return a.p == b.p ? a.t < b.t : a.p > b.p; }
signed main()
{
  n = read(), h = read();
  for(re int i = 1; i <= n; i++) sk[i].t = read(), sk[i].d = read();
  for(re int i = 1; i <= n; i++) sk[i].p = sk[i].t * sk[i].d;
  sort(sk + 1, sk + n + 1, cmp);
  for(re int i = 1; i <= n; i++) ar[++m] = sk[i];
  int l = 1, r = INF, ans = INF;
  while(l <= r){
    int mid = (l + r) >> 1;
    if(check(mid)) ans = mid, r = mid - 1;
    else l = mid + 1;
  }
  printf("%lld\n", ans);
  return 0;
}

提出情報

提出日時
問題 F - Damage over Time
ユーザ Booksnow
言語 C++ (GCC 9.2.1)
得点 0
コード長 2163 Byte
結果 WA
実行時間 190 ms
メモリ 31856 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:57:14: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   57 |   for(re int i = 1; i <= n; i++) sk[i].t = read(), sk[i].d = read();
      |              ^
./Main.cpp:58:14: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   58 |   for(re int i = 1; i <= n; i++) sk[i].p = sk[i].t * sk[i].d;
      |              ^
./Main.cpp:60:14: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   60 |   for(re int i = 1; i <= n; i++) ar[++m] = sk[i];
      |              ^
./Main.cpp:44:13: warning: ‘res’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   44 |         int tem = res - 1;
      |             ^~~
./Main.cpp:38:34: note: ‘res’ was declared here
   38 |         int l = tim + 1, r = mx, res;
      |                                  ^~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 525
結果
AC × 1
WA × 1
AC × 11
WA × 29
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 02_minmax_00.txt, 02_minmax_01.txt, 02_minmax_02.txt, 02_minmax_03.txt, 02_minmax_04.txt, 02_minmax_05.txt, 02_minmax_06.txt, 02_minmax_07.txt, 03_special_00.txt, 03_special_01.txt, 03_special_02.txt, 03_special_03.txt, 03_special_04.txt, 03_special_05.txt, 03_special_06.txt, 03_special_07.txt, 03_special_08.txt, 03_special_09.txt, 03_special_10.txt, 03_special_11.txt, 03_special_12.txt, 03_special_13.txt, 03_special_14.txt, 03_special_15.txt, 03_special_16.txt, 03_special_17.txt, 03_special_18.txt, 03_special_19.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 5 ms 3436 KiB
00_sample_01.txt WA 2 ms 3564 KiB
01_rnd_00.txt WA 98 ms 31560 KiB
01_rnd_01.txt WA 99 ms 31768 KiB
01_rnd_02.txt WA 95 ms 31684 KiB
01_rnd_03.txt WA 98 ms 31696 KiB
01_rnd_04.txt WA 99 ms 31852 KiB
01_rnd_05.txt AC 73 ms 31748 KiB
01_rnd_06.txt AC 72 ms 31748 KiB
01_rnd_07.txt AC 72 ms 31700 KiB
01_rnd_08.txt AC 71 ms 31668 KiB
01_rnd_09.txt AC 71 ms 31744 KiB
02_minmax_00.txt AC 62 ms 31856 KiB
02_minmax_01.txt AC 70 ms 31684 KiB
02_minmax_02.txt WA 137 ms 31688 KiB
02_minmax_03.txt WA 143 ms 31748 KiB
02_minmax_04.txt AC 61 ms 31852 KiB
02_minmax_05.txt AC 70 ms 31628 KiB
02_minmax_06.txt AC 181 ms 31676 KiB
02_minmax_07.txt WA 142 ms 31852 KiB
03_special_00.txt WA 136 ms 31748 KiB
03_special_01.txt WA 184 ms 31856 KiB
03_special_02.txt WA 148 ms 31680 KiB
03_special_03.txt WA 159 ms 31784 KiB
03_special_04.txt WA 160 ms 31748 KiB
03_special_05.txt WA 149 ms 31744 KiB
03_special_06.txt WA 177 ms 31684 KiB
03_special_07.txt WA 166 ms 31672 KiB
03_special_08.txt WA 190 ms 31748 KiB
03_special_09.txt WA 175 ms 31680 KiB
03_special_10.txt WA 133 ms 31668 KiB
03_special_11.txt WA 146 ms 31788 KiB
03_special_12.txt WA 96 ms 31620 KiB
03_special_13.txt WA 95 ms 31624 KiB
03_special_14.txt WA 97 ms 31744 KiB
03_special_15.txt WA 95 ms 31560 KiB
03_special_16.txt WA 94 ms 31768 KiB
03_special_17.txt WA 95 ms 31856 KiB
03_special_18.txt WA 96 ms 31684 KiB
03_special_19.txt WA 96 ms 31624 KiB