No.8021 データベースの練習
タグ : / 解いたユーザー数 73
作問者 : koyumeishi
Python に標準装備されている SQLite を yukicoder で動かしてみる実験的問題です。 いろいろ不具合があるかも知れません。
問題文
$xy$ 平面上に $n$ 個の点があります。
これらの点は次のような構造で SQLite のデータベースに格納されています。
CREATE TABLE point( id INTEGER PRIMARY KEY, x INTEGER, y INTEGER);
>TABLE point +----+---+---+ | id| x| y| +----+---+---+ | 1| x1| y1| +----+---+---+ | 2| x2| y2| (略) | n| xn| yn| +----+---+---+次のようなクエリが $q$ 個与えられるので、これに答えるような SQLite の実行文を出力してください。
- $x_l \leq x_i \leq x_h , y_l \leq y_i \leq y_h$ であるような点の数を出力せよ
入力
点の情報は開示されませんが、次の制約を満たします。
$1 \leq n \leq 10^3$
$0 \leq x_i \leq 10^9$
$0 \leq y_i \leq 10^9$
点の座標は全て整数で、複数の点が同じ位置に存在することはありません。
$q$ ${x_l}_1$ ${x_h}_1$ ${y_l}_1$ ${y_h}_1$ $\vdots$ ${x_l}_n$ ${x_h}_n$ ${y_l}_n$ ${y_h}_q$
クエリは次の制約満たします。
$1 \leq q \leq 10^3$
$0 \leq {x_l}_i \leq {x_h}_i \leq 10^9$
$0 \leq {y_l}_i \leq {y_h}_i \leq 10^9$
出力
各クエリ毎 一つのSELECT文を使って下さい。 i 回目のSELECT文の結果が i 回目のクエリの答えとみなされます。
';' を SQL文のセパレータとして使っているので、行末の ';' を忘れないでください。
SELECT文以外も使用可能です。
この問題はリアクティブ問題です。 出力時の flush を忘れないでください。
注) 解答プログラムにクエリの結果は返されません。
サンプル
サンプル1
入力
ジャッジ側の点群が次のような場合の例です。
(3, 2) (8, 2) (9, 8) (3, 1) (4, 4) (1, 4) (0, 4) (3, 7) (0, 8) (7, 2)
与えられるクエリです。
2 6 7 2 7 10 10 10 10
出力
一つ目のクエリ : 6 <= x <= 7, 2 <= y <= 7 であるような点は (7,2) のみなので、 1 が返されるような SELECT文 を出力すれば正解と見なされます。
二つ目のクエリ : (10, 10) は点群に存在しないので、 0 が返されるような SELECT文 を出力すれば正解と見なされます。
SELECT count(*) FROM point WHERE x=7 AND y=2; SELECT count(*) FROM point WHERE x=10 AND y=10;
実際に点群は開示されないので、もう少し工夫しましょう。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。