CCF CSP ウィンドウについて

坏嘻嘻
リリース: 2018-09-14 14:02:16
オリジナル
2406 人が閲覧しました

XSS クロスサイト スクリプティング攻撃。偽のコンテンツとクリックベイトを通じて同一生成元ポリシーをバイパスします。これは大きな問題であり、攻撃者がコードの挿入に成功すると、かなりの量のユーザー データが漏洩する可能性があります。

問題の説明

特定のグラフィックス オペレーティング システムには N 個のウィンドウがあり、各ウィンドウは座標軸に平行な両側を持つ長方形の領域です。 。ウィンドウの境界上の点もウィンドウに属します。複数のウィンドウが重なっている領域では、ウィンドウ間に階層の違いがあり、最上位のウィンドウのコンテンツのみが表示されます。
画面上の点をクリックすると、クリックした位置の最上位ウィンドウが選択され、このウィンドウはすべてのウィンドウの最上位に移動されますが、残りのウィンドウの階層順序は変更されません。クリックした場所がどのウィンドウにも属していない場合、システムはクリックを無視します。
ここで、ウィンドウをクリックするプロセスをシミュレートするプログラムを作成してもらいます。

入力形式

入力の最初の行には、N と M という 2 つの正の整数が含まれています。 (1 ≤ N ≤ 10,1 ≤ M ≤ 10)
次の N 行は、N 個のウィンドウの位置を下から上に順番に示します。各行には 4 つの非負の整数 x1、y1、x2、y2 が含まれており、ウィンドウの頂点座標のペア (x1, y1) と (x2, y2) を示します。 x1 次の M 行のそれぞれには、マウス クリックの座標を表す 2 つの非負の整数 x と y が含まれています。
質問に含まれるすべての点と長方形の頂点の x 座標と y 座標は、それぞれ 2559 と 1439 を超えません。

出力形式

出力には M 行が含まれており、各行はマウスのクリックの結果を表します。このマウスクリックによりウィンドウが選択されている場合は、そのウィンドウの番号が出力されます (ウィンドウには入力順に 1 から N までの番号が付けられます)。そうでない場合は、「IGNORED」(二重引用符なし) が出力されます。

サンプル入力

3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5

サンプル出力

2
1
1
IGNORED

サンプルの説明

位置初めてクリックしたボタンは1番目と2番目のウィンドウの両方に属しますが、2番目のウィンドウが一番上にあるので選択して一番上に持ってきます。
2回目にクリックした位置は最初のウィンドウにのみ属するため、このクリックでこのウィンドウが選択され、最上部に表示されます。 3 つのウィンドウ間の階層関係は、初期状態とはまったく逆になります。
3 回目にクリックした位置は同時に 3 つのウィンドウの範囲に属しますが、最初のウィンドウが最上位にあるため、選択されます。
最後にクリックされた (0, 5) はどのウィンドウにも属しません。

分析: 非常に単純な質問ですが、順序さえ分かれば難しいことはありません。

#include <iostream>
#include<vector>
using namespace std;

int main()
{
	int N, M;
	cin >> N >> M;
	vector<int>win;
	vector<int>::iterator it;
	for (int i = N; i > 0; i--)
	{
		win.push_back(i);
	}
	int position[11][4];
	int cli[13][2];
	for (int i = 1; i <= N; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			cin >> position[i][j];
		}
	}
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < 2; j++)//由于写这个的时候精神状态不是很好,原来写成j>2了。后来实在找不到哪里错了,只好把for循环重写了一遍。
		{
			cin >> cli[i][j];
		}
	}
	for (int i = 0; i < M; i++)
	{
		bool you = true;
		for (int j = 0; j < N; j++)
		{
			if (cli[i][0] >= position[win[j]][0] && cli[i][0] <= position[win[j]][2] && cli[i][1] >= position[win[j]][1] && cli[i][1] <= position[win[j]][3])
			{
				cout << win[j] << endl;
				you = false;
				if (j != 0)
				{
					int a = win[j];
					for (it = win.begin(); it != win.end();)
					{
						if (*it == a)
						{
							it = win.erase(it);
						//	break;
						}   //删除元素,返回值指向已删除元素的下一个位置
						else
						{
							++it;
						}    //指向下一个位置
					}
					win.insert(win.begin(), a);
				}
				break;
			}
		}
		if (you)
		{
			cout << "IGNORED" << endl;
		}
		
	}
	return 0;
}
ログイン後にコピー

関連する推奨事項:

HTML5 セキュリティの概要コンテンツ セキュリティ ポリシー (CSP) の概要_html5 チュートリアル スキル

html5 基本タグ (html5 ビデオタグ html5 新しいタグの使用法)_html5 チュートリアル スキル

以上がCCF CSP ウィンドウについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート