タイトル説明
リトルAはカードコレクターです。彼は非常に大きな正方形のカードボックスを持っています。カードボックスにはn×nのグリッドがあります。各グリッドにカードがあります。カードを見つけやすくするために、リトルAは各カードに整数値でマークされています。カードボックス内のカードの値は、左から右への非減少と上から下への非減少を満たします。カードの価値を教えてください。カードの位置をすばやく見つけることができますか?
入力データ
最初の行には整数t(1≤t≤10)があり、データのグループがt個あることを示しています。データの各グループについて:最初の行には整数n(1≤n≤1000)があり、これは正方形のカードボックスの辺の長さを表します。次の行にはn行あり、各行にはn個の整数aij(1≤aij≤ 109)、これは正方形のカードボックス内のカードの値を表します。次の行には整数q(1≤q≤104)があります。これは、q個のクエリがあることを意味します。クエリごとに:最初の行の整数はx(1≤x≤109)です。∑n2≤2×106および∑q≤2×104であることを確認してください。
出力データ
クエリごとに、このカードがカードボックスにある場合は、その位置xyを出力し、そうでない場合は-1を出力します。同じ値のカードが複数ある場合は、xが小さいカードを出力してください。同じ値のカードが複数ある場合は、yが大きいカードを出力してください。
サンプル入力
2
3
1 3 5
2 4 7
6 8 9
3
1
7
10
2
1 1
1 1
1
1
サンプル出力
1 1
2 3
-1
1 2
経験:
1。ループネスト検索の最初の考え...タイムアウト
2.次に、bのaから最初に行を見つけ、次にcount()を介して同じ行にあるターゲット値の数を判断し、後ろからforward ... timeout
3.前のステップでの後ろから前へのトラバーサルは、後ろから前へのバイナリ検索になります...不明なエラー
3.最後に、マトリックスは破棄され、直線に置き換えられます。
T = int(input())
for t in range(T):
n = int(input())
squareDic = {
}
for n1 in range(n):
temp = [int(item) for item in input().split()]
for n2 in range(n):
if temp[n2] in squareDic:
if squareDic[temp[n2]][0] == n1:
squareDic[temp[n2]][1] = n2
else:
squareDic[temp[n2]] = [n1,n2]
q = int(input())
for i in range(q):
x = int(input())
if x in squareDic:
print('%d %d'%(squareDic[x][0]+1,squareDic[x][1]+1))
else:
print(-1)