提出 #68602306


ソースコード 拡げる

#include <string>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using lint = long long int;
using P = pair<int, int>;
using PL = pair<lint, lint>;
#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)
#define IFOR(i, begin, end) for(int i=(end)-1,i##_begin_=(begin);i>=i##_begin_;i--)
#define REP(i, n) FOR(i,0,n)
#define IREP(i, n) IFOR(i,0,n)
#define ALL(a)  (a).begin(),(a).end()
constexpr int MOD = 1000000007;
vector<lint> RH_B = {1532834020, 1388622299};
vector<lint> RH_M = {2147482409, 2147478017};
constexpr int INF = 2147483647;
void yes(bool expr) {cout << (expr ? "Yes" : "No") << "\n";}
template<class T>void chmax(T &a, const T &b) { if (a<b) a=b; }
template<class T>void chmin(T &a, const T &b) { if (b<a) a=b; }
int N, K;

int solve(vector<int> &cycle) {
  int L = cycle.size();
  REP(i, L) cycle.push_back(cycle[i]);
  vector<int> cumsum(L*2+1, 0);
  REP(i, L*2) {
    cumsum[i+1] = cumsum[i] + cycle[i];
  }
  vector<int> next(L*2+1, -1);
  REP(i, L*2) {
    FOR(j, i+1, L*2+1) {
      if ((cumsum[j] - cumsum[i]) % N == 0) {
        next[i] = j;
        break;
      }
    }
  }

  vector<vector<int>> dp(L, vector<int>(L+1));
  REP(i, L) dp[i][1] = 0;
  FOR(j, 2, L+1) REP(i, L) {
    int r = i + j - 1;
    FOR(k, 1, j) {
      int i2 = i + k;
      chmax(dp[i][j], dp[i][k] + dp[i2%L][j-k] + (next[i] == i2));
      if(next[i] == i2) break;
    }
  }
  int ret = 0;
  REP(i, L) chmax(ret, dp[i][L]);
  return ret;
}

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> N >> K;
  vector<int> P(N*K);
  REP(i, N*K) {
    cin >> P[i];
    P[i]--;
  }
  vector<vector<int>> cycles;
  vector<bool> used(N*K, false);
  REP(i, N*K) {
    if (used[i]) continue;
    vector<int> cycle;
    int cur = i;
    while (!used[cur]) {
      used[cur] = true;
      int dist = P[cur] - cur;
      dist = (dist + N*K) % N;
      cycle.push_back(dist);
      cur = P[cur];
    }
    cycles.push_back(cycle);
  }
  int ans = 0;
  for (auto &cycle : cycles) {
    ans += solve(cycle);
  }
  cout << ans << "\n";
}

提出情報

提出日時
問題 B - Sort Permutation
ユーザ Shun_PI
言語 C++ 20 (gcc 12.2)
得点 0
コード長 2243 Byte
結果 WA
実行時間 2214 ms
メモリ 101200 KiB

コンパイルエラー

Main.cpp: In function ‘int solve(std::vector<int>&)’:
Main.cpp:44:9: warning: unused variable ‘r’ [-Wunused-variable]
   44 |     int r = i + j - 1;
      |         ^

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 800
結果
AC × 3
AC × 32
WA × 1
TLE × 20
セット名 テストケース
Sample 01-sample-01.txt, 01-sample-02.txt, 01-sample-03.txt
All 01-sample-01.txt, 01-sample-02.txt, 01-sample-03.txt, 02-small-01.txt, 02-small-02.txt, 02-small-03.txt, 02-small-04.txt, 02-small-05.txt, 02-small-06.txt, 02-small-07.txt, 02-small-08.txt, 02-small-09.txt, 02-small-10.txt, 02-small-11.txt, 02-small-12.txt, 02-small-13.txt, 02-small-14.txt, 02-small-15.txt, 02-small-16.txt, 03-random-01.txt, 03-random-02.txt, 03-random-03.txt, 03-random-04.txt, 03-random-05.txt, 04-large-01.txt, 04-large-02.txt, 04-large-03.txt, 04-large-04.txt, 04-large-05.txt, 05-id-01.txt, 05-id-02.txt, 05-id-03.txt, 05-id-04.txt, 06-large-cycle-01.txt, 06-large-cycle-02.txt, 06-large-cycle-03.txt, 06-large-cycle-04.txt, 06-large-cycle-05.txt, 07-large-cycle-2-01.txt, 07-large-cycle-2-02.txt, 07-large-cycle-2-03.txt, 07-large-cycle-2-04.txt, 07-large-cycle-2-05.txt, 08-divide-01.txt, 08-divide-02.txt, 08-divide-03.txt, 08-divide-04.txt, 08-divide-05.txt, 09-large-ans-01.txt, 09-large-ans-02.txt, 09-large-ans-03.txt, 09-large-ans-04.txt, 09-large-ans-05.txt
ケース名 結果 実行時間 メモリ
01-sample-01.txt AC 1 ms 3372 KiB
01-sample-02.txt AC 1 ms 3428 KiB
01-sample-03.txt AC 1 ms 3472 KiB
02-small-01.txt AC 1 ms 3468 KiB
02-small-02.txt AC 1 ms 3488 KiB
02-small-03.txt AC 1 ms 3424 KiB
02-small-04.txt AC 1 ms 3392 KiB
02-small-05.txt AC 1 ms 3472 KiB
02-small-06.txt AC 1 ms 3424 KiB
02-small-07.txt AC 1 ms 3480 KiB
02-small-08.txt AC 1 ms 3476 KiB
02-small-09.txt AC 1 ms 3448 KiB
02-small-10.txt AC 1 ms 3484 KiB
02-small-11.txt AC 1 ms 3528 KiB
02-small-12.txt AC 1 ms 3480 KiB
02-small-13.txt AC 1 ms 3528 KiB
02-small-14.txt AC 1 ms 3388 KiB
02-small-15.txt AC 1 ms 3532 KiB
02-small-16.txt AC 1 ms 3424 KiB
03-random-01.txt TLE 2208 ms 15952 KiB
03-random-02.txt TLE 2209 ms 21356 KiB
03-random-03.txt AC 2 ms 3496 KiB
03-random-04.txt AC 73 ms 3832 KiB
03-random-05.txt WA 1875 ms 8092 KiB
04-large-01.txt TLE 2208 ms 15652 KiB
04-large-02.txt TLE 2208 ms 14360 KiB
04-large-03.txt TLE 2209 ms 21136 KiB
04-large-04.txt TLE 2210 ms 36668 KiB
04-large-05.txt TLE 2209 ms 20732 KiB
05-id-01.txt AC 2 ms 3668 KiB
05-id-02.txt AC 2 ms 3656 KiB
05-id-03.txt AC 2 ms 3776 KiB
05-id-04.txt AC 2 ms 3652 KiB
06-large-cycle-01.txt TLE 2213 ms 101200 KiB
06-large-cycle-02.txt TLE 2212 ms 82588 KiB
06-large-cycle-03.txt TLE 2213 ms 93836 KiB
06-large-cycle-04.txt TLE 2210 ms 50716 KiB
06-large-cycle-05.txt TLE 2213 ms 98488 KiB
07-large-cycle-2-01.txt TLE 2209 ms 21248 KiB
07-large-cycle-2-02.txt TLE 2211 ms 68232 KiB
07-large-cycle-2-03.txt TLE 2213 ms 86052 KiB
07-large-cycle-2-04.txt TLE 2208 ms 14944 KiB
07-large-cycle-2-05.txt TLE 2212 ms 72004 KiB
08-divide-01.txt AC 5 ms 3640 KiB
08-divide-02.txt AC 116 ms 3704 KiB
08-divide-03.txt AC 4 ms 3532 KiB
08-divide-04.txt AC 9 ms 3564 KiB
08-divide-05.txt AC 4 ms 3496 KiB
09-large-ans-01.txt TLE 2210 ms 42516 KiB
09-large-ans-02.txt AC 927 ms 10924 KiB
09-large-ans-03.txt TLE 2214 ms 57624 KiB
09-large-ans-04.txt TLE 2209 ms 25780 KiB
09-large-ans-05.txt AC 1254 ms 14384 KiB