結果

問題 No.5024 魔法少女うなと宝集め
コンテスト
ユーザー Kinoko_Sokora
提出日時 2026-05-02 17:21:23
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
RE  
実行時間 -
コード長 3,648 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,495 ms
コンパイル使用メモリ 245,424 KB
実行使用メモリ 6,400 KB
スコア 14,609
最終ジャッジ日時 2026-05-02 17:21:39
合計ジャッジ時間 10,722 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 4 RE * 46
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<stack>
#include<iomanip>
#include<queue>
#include<set>
#include<functional>
#include<tuple>
#include<bitset>
#include<cassert>
#include<cstdint>
#include<complex>
#include<random>
#include<fstream>
#include <unordered_map>  
#include <unordered_set>  
using namespace std;
bool printb(bool f) {
	if (f)printf("Yes\n");
	else printf("No\n");
	return f;
}
template<class T>
void prt(T t = "", string sep = "\n") { cout << t << sep; return; }
template<class T>
void printl(vector<T> a, string sep = " ") {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i];
		if (i != a.size() - 1)cout << sep;
	}
	cout << "\n";
	return;
}

bool prt_isfixed = false;
template<class T>
void prt_fix(T t, string sep = "\n") {
	if (!prt_isfixed) {
		cout << fixed << setprecision(15);
		prt_isfixed = true;
	}
	prt(t, sep);
}
#define all(a) a.begin(),a.end()
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
/*
#pragma GCC target "prefer-vector-width=512"
#pragma GCC optimize "Ofast"
#pragma GCC optimize("unroll-loops")
*/
using uint = unsigned int;
using llong = long long;
using ullong = unsigned long long;
using pii = pair<int, int>;
using pll = pair<llong, llong>;
using pli = pair<llong, int>;
using pil = pair<int, llong>;
template<typename T> using vec2 = vector<vector<T>>;
template<typename T> inline bool chmin(T& a, T b) { return (a > b) ? (a = b, true) : false; }
template<typename T> inline bool chmax(T& a, T b) { return (a < b) ? (a = b, true) : false; }
bool bitIn(llong a, int b) { return ((a >> b) & 1); }
int bitCnt(llong a) {
	int re = 0;
	while (a > 0) {
		if (a & 1)re++;
		a >>= 1;
	}
	return re;
}
llong powL(llong n, llong i) {
	llong re = 1;
	while (i >= 1) {
		if (i & 1) re *= n;
		n *= n;
		i >>= 1;
	}
	return re;
}
llong powL_M(llong n, llong i, llong mod) {
	llong re = 1;
	while (i >= 1) {
		if (i & 1) {
			re *= n;
			re %= mod;
		}
		n *= n;
		n %= mod;
		i >>= 1;
	}
	return re;
}


llong cei(llong a, llong b) {
	if (a % b == 0)return a / b;
	else if (a < 0) {
		return a / b;
	}
	else {
		return a / b + 1;
	}
}

llong flo(llong a, llong b) {
	if (a % b == 0)return a / b;
	else if (a < 0) {
		return a / b - 1;
	}
	else {
		return a / b;
	}
}
int  dx[4] = { 0,1,0,-1 }, dy[4] = { 1,0,-1,0 };
int  dx2[8] = { -1,-1,1,1,-1,-1,1,1 }, dy2[8] = { 1,-1,-1,1,1,-1,-1,1 };
int dx8[8] = { 0,1,1,1,0,-1,-1,-1 }, dy8[8] = { -1,-1,0,1,1,1,0,-1 };

int rand_range(int min_val, int max_val) {
	// 乱数生成器
	static std::mt19937_64 mt64(123);

	// [min_val, max_val] の一様分布整数 (int) の分布生成器
	std::uniform_int_distribution<int> get_rand_uni_int(min_val, max_val);

	// 乱数を生成
	return get_rand_uni_int(mt64);
}

void output(vector<pii>& a){
	prt(a.size());
	rep(i,a.size()){
		printf("%d %d\n",a[i].first,a[i].second);
	}
}

int main() {
	int n,t;
	cin>>n>>t;
	vec2<int> a(n,vector<int>(n));
	rep(i,n)rep(j,n)scanf("%d",&a[i][j]);

	vector<pii> re;
	{//雑貪欲
		pii toind;
		int to=0;
		rep(i,n){
			rep(j,n){
				if(chmax(to,a[i][j])){
					toind={i,j};
				}
			}
		}
		vec2<bool> bo(n,vector<bool>(n,false));
		int nx,ny;
		nx=toind.first;
		ny=toind.second;
		rep(i,t-1){
			bo[nx][ny]=true;
			re.emplace_back(nx,ny);
			int to2 = 0,ind = -1;
			rep(k,4){
				if(clamp(nx+dx[k],0,n-1)!=nx+dx[k])continue;
				if(clamp(ny+dy[k],0,n-1)!=ny+dy[k])continue;
				if(bo[nx+dx[k]][ny+dy[k]])continue;
				if(chmax(to2,a[nx+dx[k]][ny+dy[k]]))ind=k;
			}
			assert(ind!=-1);
			nx+=dx[ind];
			ny+=dy[ind];
		}
		re.emplace_back(nx,ny);

	}

	output(re);
    return 0;

}	
0