コンピュータの大学院受験の上で機械の問題-代理サーバー
8501 ワード
タイトルの説明
プロキシサーバを使用すると、クライアント情報をある程度隠すことができ、インターネット上のユーザーのプライバシーを保護できます.n個のプロキシサーバのIPアドレスを知っていますが、m個のサーバにアクセスします.このm個のサーバのIPアドレスとアクセス順序も既に与えられている.システムは、同じ時点で1つのエージェントサーバしか使用できず、IPアドレスと同じサーバにエージェントサーバでアクセスできないことを要求します(そうでなければ、クライアント情報が漏れる可能性があります).このような条件の下で、プロキシサーバの切り替え回数をできるだけ少なくするように、プロキシサーバを使用するスキームが見出される.
説明を入力:
出力の説明:
複数のテストデータのグループがある可能性があります.入力データのグループごとに出力データは1行しかありません.整数sが含まれています.これは、要求に応じてサーバにアクセスする過程でプロキシサーバを切り替える最小回数を示します.最初に使用したプロキシサーバは、切り替え回数にカウントされません.要求に合致する配置方式がなければ、−1を出力する.
例
入力
3 166.111.4.100 162.105.131.113 202.112.128.69 6 72.14.235.104 166.111.4.100 207.46.19.190 202.112.128.69 162.105.131.113 118.214.226.52
しゅつりょく
1
リンク:牛客题目地址
もんだいぶんせき
欲張りアルゴリズム
エージェントの切り替え回数が最も少ない解法を見つけるには、最も優れた解は、最も多くのサーバにアクセスできるエージェントを使用するたびに使用されます.答えが-1の場合、エージェントが1つしかない場合に発生する可能性があることに注意してください.
コード#コード#
プロキシサーバを使用すると、クライアント情報をある程度隠すことができ、インターネット上のユーザーのプライバシーを保護できます.n個のプロキシサーバのIPアドレスを知っていますが、m個のサーバにアクセスします.このm個のサーバのIPアドレスとアクセス順序も既に与えられている.システムは、同じ時点で1つのエージェントサーバしか使用できず、IPアドレスと同じサーバにエージェントサーバでアクセスできないことを要求します(そうでなければ、クライアント情報が漏れる可能性があります).このような条件の下で、プロキシサーバの切り替え回数をできるだけ少なくするように、プロキシサーバを使用するスキームが見出される.
説明を入力:
n + m + 2 。
1 n, 。
2 n + 1 , IP 。 n IP 。
n + 2 m, 。
n + 3 n + m + 2 , IP , 。
IP , “xxx.yyy.zzz.www”, 0–255 。 。
,1<=n<=1000,1<=m<=5000。
出力の説明:
複数のテストデータのグループがある可能性があります.入力データのグループごとに出力データは1行しかありません.整数sが含まれています.これは、要求に応じてサーバにアクセスする過程でプロキシサーバを切り替える最小回数を示します.最初に使用したプロキシサーバは、切り替え回数にカウントされません.要求に合致する配置方式がなければ、−1を出力する.
例
入力
3 166.111.4.100 162.105.131.113 202.112.128.69 6 72.14.235.104 166.111.4.100 207.46.19.190 202.112.128.69 162.105.131.113 118.214.226.52
しゅつりょく
1
リンク:牛客题目地址
もんだいぶんせき
欲張りアルゴリズム
エージェントの切り替え回数が最も少ない解法を見つけるには、最も優れた解は、最も多くのサーバにアクセスできるエージェントを使用するたびに使用されます.答えが-1の場合、エージェントが1つしかない場合に発生する可能性があることに注意してください.
コード#コード#
#include
#include
using namespace std;
char Agent[1001][20];
char Server[5001][20];
int main()
{
int n, m;
while(cin >> n)
{
int i, j;
for(i = 0; i < n; i++)
{
cin >> Agent[i];
}
cin >> m;
for(i = 0; i < m; i++)
{
cin >> Server[i];
}
int ans = 0;
int index = 0;
bool flag = true;
while(flag && index < m)
{
int max = 0;
for(i = 0; i < n; i++)
{
for(j = index; strcmp(Agent[i], Server[j]) && j < m; j++)
{
//cout << "string is not equal" << Agent[i] <
}
if(max < j - index)
{
max = j - index;
}
}
if(max == 0)
flag = false;
index += max;
ans++;
}
if(flag)
cout << ans - 1 <<endl;
else
cout << "-1" <<endl;
}
return 0;
}