結果
| 問題 |
No.513 宝探し2
|
| コンテスト | |
| ユーザー |
14番
|
| 提出日時 | 2017-05-29 08:02:07 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,079 bytes |
| コンパイル時間 | 999 ms |
| コンパイル使用メモリ | 114,568 KB |
| 実行使用メモリ | 43,912 KB |
| 平均クエリ数 | 32.25 |
| 最終ジャッジ日時 | 2024-07-16 13:50:03 |
| 合計ジャッジ時間 | 4,528 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 WA * 10 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public void Proc() {
int max = 100000;
int x = GetX(0, max);
if(x == -1) {
return;
}
int y = GetY(0, max, x);
}
private int GetY(int min, int max, int x) {
int mid1 = min + (min + max) / 3;
int mid2 = max - (min + max) / 3;
int kyori1 = Tell(x, min);
if (kyori1 == 0)
{
return -1;
}
int kyori2 = Tell(x, mid1);
if (kyori2 == 0)
{
return -1;
}
int kyori3 = Tell(x, mid2);
if (kyori3 == 0)
{
return -1;
}
int kyori4 = Tell(x, max);
if (kyori4 == 0)
{
return -1;
}
int minVal = new int[] { kyori1, kyori2, kyori3, kyori4 }.Min();
if (max - min <= 3)
{
return minVal;
}
if (minVal == kyori1)
{
return GetY(min, mid1, x);
}
if (minVal == kyori2)
{
return GetY(min, mid2, x);
}
if (minVal == kyori3)
{
return GetY(mid1, max, x);
}
return GetY(mid2, max, x);
}
private Dictionary<int, Dictionary<int, int>> dic = new Dictionary<int, Dictionary<int, int>>();
private int GetX(int min, int max) {
int mid1 = min + (min + max) / 3;
int mid2 = max - (min + max) / 3;
int kyori1 = Tell(min, 0);
if(kyori1 ==0) {
return -1;
}
int kyori2 = Tell(mid1, 0);
if(kyori2 == 0) {
return -1;
}
int kyori3 = Tell(mid2, 0);
if(kyori3 == 0) {
return -1;
}
int kyori4 = Tell(max, 0);
if(kyori4 == 0) {
return -1;
}
int minVal = new int[] {kyori1, kyori2, kyori3, kyori4}.Min();
if(max-min<=3) {
return minVal;
}
if(minVal == kyori1) {
return GetX(min, mid1);
}
if(minVal == kyori2) {
return GetX(min, mid2);
}
if(minVal == kyori3) {
return GetX(mid1, max);
}
return GetX(mid2, max);
}
private int Tell(int x, int y) {
if(!dic.ContainsKey(x)) {
dic.Add(x, new Dictionary<int, int>());
}
if(dic[x].ContainsKey(y)) {
return dic[x][y];
}
Console.WriteLine(x + " " + y);
int ans = int.Parse(Console.ReadLine());
dic[x][y] = ans;
return ans;
}
public class Reader
{
private static StringReader sr;
public static bool IsDebug = false;
public static string ReadLine() {
if(IsDebug) {
if(sr == null) {
sr = new StringReader(InputText.Trim());
}
return sr.ReadLine();
} else {
return Console.ReadLine();
}
}
private static string InputText = @"
aaaaaaa
";
}
public static void Main(string[] args)
{
#if DEBUG
Reader.IsDebug = true;
#endif
Program prg = new Program();
prg.Proc();
}
}
14番