提出 #46895210


ソースコード 拡げる

#include<bits/stdc++.h>
#define LL long long
#define DB double
#define MOD 1000000007
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
#define lowbit(x) ((-x) & x)
#define MP make_pair
#define MT make_tuple
#define VI vector<int>
#define VL vector<LL>
#define VII VI::iterator
#define VLI VL::iterator
#define all(x) x.begin(), x.end()
#define EB emplace_back
#define PII pair<int, int>
#define SI set<int>
#define SII SI::iterator
#define fi first
#define se second
using namespace std;
template<typename T> void chkmn(T &a, const T b) { (a > b) && (a = b); }
template<typename T> void chkmx(T &a, const T b) { (a < b) && (a = b); }
void Inc(int &a, const int &b) { ((a += b) >= MOD) && (a -= MOD); }
void Dec(int &a, const int &b) { ((a -= b) < 0) && (a += MOD); }
void Mul(int &a, const int &b) { a = 1LL * a * b % MOD; }
void Sqr(int &a) { a = 1LL * a * a % MOD; }
int inc(const int &a, const int &b) { return (a + b >= MOD) ? a + b - MOD : a + b; }
int dec(const int &a, const int &b) { return (a - b < 0) ? a - b + MOD : a - b; }
int mul(const int &a, const int &b) { return 1LL * a * b % MOD; }
int sqr(const int &a) { return 1LL * a * a % MOD; }
int qwqmi(int x, int k = MOD - 2)
{
	int res = 1;
	while(k)
	{
		if(k & 1) Mul(res, x);
		k >>= 1, Sqr(x);
	}
	return res;
}
const int N = 2e3 + 5;
const int INF = 1e9;
int n, a[N * 3];
int now = 0, lst = 1;
int f[2][N][N], maxf[2][N], ans;
vector<PII> vec;
void update_max(int x, int y, int v)
{
	if(v == -INF) return;
	chkmx(f[now][x][y], v);
	chkmx(f[now][y][x], v);
	chkmx(maxf[now][0], v);
	chkmx(maxf[now][x], v);
	chkmx(maxf[now][y], v);
	vec.EB(MP(x, y));
}
void update1()
{
	++ans;
}
void update2(int p, int q)
{
	for(int x = 1; x <= n; ++x)
	{
		int w = max(f[lst][x][p], f[lst][p][x]);
		if(w != -INF) update_max(x, q, w + 1);
	}
}
void update3(int p, int q, int r)
{
	int w = 7210721;
	w = f[lst][p][p]; if(w != -INF) update_max(q, r, w + 1);
	w = f[lst][q][q]; if(w != -INF) update_max(p, r, w + 1);
	w = f[lst][r][r]; if(w != -INF) update_max(p, q, w + 1);
}
void update4(int p, int q, int r)
{
	update_max(p, q, maxf[lst][0]);
	update_max(p, r, maxf[lst][0]);
	update_max(q, r, maxf[lst][0]);
}
void update5(int p, int q, int r)
{
	for(int x = 1; x <= n; ++x)
	{
		update_max(p, x, maxf[lst][x]);
		update_max(q, x, maxf[lst][x]);
		update_max(r, x, maxf[lst][x]);
	}
}
void final_update()
{
	for(auto P : vec)
	{
		int x = P.fi, y = P.se;
		f[lst][x][y] = f[now][x][y];
		f[lst][y][x] = f[now][y][x];
	}
	vec.clear();
	for(int x = 0; x <= n; ++x)
		maxf[lst][x] = maxf[now][x];
}
int main()
{
//	freopen("1.in", "r", stdin);
//	freopen("1.out", "w", stdout);
	scanf("%d", &n);
	for(int i = 1; i <= 3 * n; ++i)
		scanf("%d", &a[i]);
	for(int i = 0; i <= n; ++i)
		for(int j = 0; j <= n; ++j)
			f[0][i][j] = f[1][i][j] = -INF;
	for(int x = 0; x <= n; ++x)
		maxf[0][x] = maxf[1][x] = -INF;
	update_max(a[1], a[2], 0);
	final_update();
	for(int i = 1; i < n; ++i)
	{
		int p = a[3 * i];
		int q = a[3 * i + 1];
		int r = a[3 * i + 2];
		if(p == q && q == r) 
		{
			update1();
			continue;
		}
		else if(p == q) update2(p, r);
		else if(p == r) update2(p, q);
		else if(q == r) update2(q, p);
		update3(p, q, r);
		update4(p, q, r);
		update5(p, q, r);
		final_update();
	}
	int res = 0;
	for(int x = 1; x <= n; ++x)
		for(int y = 1; y <= n; ++y)
			chkmx(res, f[now][x][y]);
	chkmx(res, f[now][a[3 * n]][a[3 * n]] + 1);
	ans += res;
	printf("%d\n", ans);
	return 0;
}


提出情報

提出日時
問題 F - Brave CHAIN
ユーザ Schucking_Sattin
言語 C++ 20 (gcc 12.2)
得点 600
コード長 3586 Byte
結果 AC
実行時間 318 ms
メモリ 35444 KiB

コンパイルエラー

Main.cpp: In function ‘int main()’:
Main.cpp:108:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  108 |         scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~
Main.cpp:110:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  110 |                 scanf("%d", &a[i]);
      |                 ~~~~~^~~~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 55
セット名 テストケース
Sample sample00, sample01, sample02
All case03, case04, case05, case06, case07, case08, case09, case10, case11, case12, case13, case14, case15, case16, case17, case18, case19, case20, case21, case22, case23, case24, case25, case26, case27, case28, case29, case30, case31, case32, case33, case34, case35, case36, case37, case38, case39, case40, case41, case42, case43, case44, case45, case46, case47, case48, case49, case50, case51, case52, case53, case54, sample00, sample01, sample02
ケース名 結果 実行時間 メモリ
case03 AC 313 ms 35216 KiB
case04 AC 300 ms 35444 KiB
case05 AC 301 ms 35108 KiB
case06 AC 318 ms 35276 KiB
case07 AC 309 ms 35416 KiB
case08 AC 315 ms 35188 KiB
case09 AC 72 ms 22552 KiB
case10 AC 230 ms 32360 KiB
case11 AC 1 ms 3876 KiB
case12 AC 1 ms 3732 KiB
case13 AC 1 ms 3736 KiB
case14 AC 1 ms 3736 KiB
case15 AC 1 ms 3840 KiB
case16 AC 209 ms 35288 KiB
case17 AC 139 ms 33320 KiB
case18 AC 49 ms 22316 KiB
case19 AC 164 ms 35292 KiB
case20 AC 14 ms 13056 KiB
case21 AC 5 ms 7872 KiB
case22 AC 18 ms 15484 KiB
case23 AC 2 ms 5688 KiB
case24 AC 29 ms 23344 KiB
case25 AC 57 ms 31684 KiB
case26 AC 104 ms 34648 KiB
case27 AC 107 ms 35004 KiB
case28 AC 54 ms 26284 KiB
case29 AC 67 ms 28768 KiB
case30 AC 21 ms 16308 KiB
case31 AC 35 ms 26536 KiB
case32 AC 16 ms 17568 KiB
case33 AC 60 ms 33224 KiB
case34 AC 68 ms 35116 KiB
case35 AC 5 ms 8096 KiB
case36 AC 34 ms 29408 KiB
case37 AC 1 ms 4416 KiB
case38 AC 7 ms 11576 KiB
case39 AC 45 ms 34616 KiB
case40 AC 12 ms 16248 KiB
case41 AC 207 ms 35188 KiB
case42 AC 210 ms 35088 KiB
case43 AC 207 ms 35168 KiB
case44 AC 205 ms 35304 KiB
case45 AC 213 ms 35192 KiB
case46 AC 54 ms 21308 KiB
case47 AC 181 ms 29800 KiB
case48 AC 74 ms 23376 KiB
case49 AC 314 ms 34936 KiB
case50 AC 111 ms 25856 KiB
case51 AC 107 ms 25820 KiB
case52 AC 104 ms 25768 KiB
case53 AC 5 ms 7396 KiB
case54 AC 9 ms 9088 KiB
sample00 AC 1 ms 3916 KiB
sample01 AC 1 ms 3644 KiB
sample02 AC 1 ms 3752 KiB