結果

問題 No.359 門松行列
ユーザー chocoruskchocorusk
提出日時 2020-01-01 15:31:23
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,959 bytes
コンパイル時間 1,484 ms
コンパイル使用メモリ 122,588 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-05-01 22:46:08
合計ジャッジ時間 2,378 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:78:55: warning: 'y2' may be used uninitialized [-Wmaybe-uninitialized]
   78 |                                 a[x1][y1]=x, a[x2][y2]=l-x;
      |                                              ~~~~~~~~~^~~~
main.cpp:48:39: note: 'y2' was declared here
   48 |                 int x1=-1, y1=-1, x2, y2;
      |                                       ^~
main.cpp:78:55: warning: 'x2' may be used uninitialized [-Wmaybe-uninitialized]
   78 |                                 a[x1][y1]=x, a[x2][y2]=l-x;
      |                                              ~~~~~~~~~^~~~
main.cpp:48:35: note: 'x2' was declared here
   48 |                 int x1=-1, y1=-1, x2, y2;
      |                                   ^~

ソースコード

diff #

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
#include <complex>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <cassert>
#include <fstream>
#include <utility>
#include <functional>
#include <time.h>
#include <stack>
#include <array>
#define popcount __builtin_popcount
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
int l;
int a[3][3];
int main()
{
	int t;
	cin>>t;
	auto check1=[&](int x, int y, int z){
		if(x!=z && ((x<y && y>z) || (x>y && y<z))) return true;
		else return false;
	};
	auto check=[&](){
		for(int i=0; i<3; i++) if(!check1(a[i][0], a[i][1], a[i][2])) return false;
		for(int i=0; i<3; i++) if(!check1(a[0][i], a[1][i], a[2][i])) return false;
		if(!check1(a[0][0], a[1][1], a[2][2])) return false;
		if(!check1(a[0][2], a[1][1], a[2][0])) return false;
		return true;
	};
	for(int z=0; z<t; z++){
		cin>>l;
		vector<int> v;
		int x1=-1, y1=-1, x2, y2;
		for(int i=0; i<3; i++){
			for(int j=0; j<3; j++){
				cin>>a[i][j];
				if(a[i][j]>0) v.push_back(a[i][j]);
				else if(x1==-1) x1=i, y1=j;
				else x2=i, y2=j;
			}
		}
		if(l==1){
			cout<<0<<endl;
			continue;
		}
		sort(v.begin(), v.end());
		v.erase(unique(v.begin(), v.end()), v.end());
		int m=v.size();
		vector<P> w;
		for(int i=0; i<m; i++){
			if(i<m-1 && v[i]+1<=v[i+1]-1) w.push_back({v[i]+1, v[i+1]-1});
			w.push_back({v[i], v[i]});
		}
		if(1<=v[0]-1) w.push_back({1, v[0]-1});
		if(v[m-1]+1<=l-1) w.push_back({v[m-1]+1, l-1});
		int k=w.size();
		int ans=0;
		for(int i=0; i<k; i++){
			for(int j=0; j<k; j++){
				int x=l-w[j].second, y=l-w[j].first;
				x=max(x, w[i].first), y=min(y, w[i].second);
				if(x<=0 || y>=l || x>y) continue;
				a[x1][y1]=x, a[x2][y2]=l-x;
				if(check()) ans+=y-x+1;
			}
		}
		cout<<ans<<endl;
	}
 	return 0;
}
0