リトルAのカード:リトルAはカードコレクターです。彼は非常に大きな正方形のカードボックスを持っています。カードボックスにはn×nのグリッドがあります。各グリッドにはカードが含まれています。カードを見つけやすくするために、スモールAは各カードにマークを付けます。整数値で..。

タイトル説明

リトル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)  

おすすめ

転載: blog.csdn.net/tianxiefenxiang/article/details/107611995