牛客網アルゴリズム問題(優先キュー)
2013 ワード
リンク:https://www.nowcoder.com/acm/contest/79/E
出典:牛客網
タイトルの説明
小欧は代数の授業を受ける時、先生はみんなに1つの問題を提出して、不定方程式ax+by=cの整数解の存在の要件は何ですか.
聡明な欧さんはすぐに手を挙げて先生に完璧な答えを出して、放課後、先生は欧さんを呼んで彼に思考問題をあげました.
正の整数aとbの値と2つのシーケンスSとVを与え、最小代価の正の整数cを求めて不定方程式ax+by=cを解き、cは以下の条件を満たさなければならない.
1.cを構成する数字は、シーケンスS内でなければならない.
2.使用シーケンスSごとに1つの数字S
iは代価Vを消費する
i.
3.シーケンスS内の数字の使用回数は限定されない.
4.cの首位はu,cの最下位はvであった.(u,vもシーケンスS内)
複数の代価のような小さな答えがあれば、cの辞書順が一番小さいものだけが必要です.
説明を入力:
出力の説明:
例1
入力
しゅつりょく
例2
入力
しゅつりょく
//分析:まず三つの配列を定義し、配列はa,bに関連する
//ax+by=c式に解があればc%gcd(a,b)=0
//一番大切なのは優先キュー思想
コード:
出典:牛客網
タイトルの説明
小欧は代数の授業を受ける時、先生はみんなに1つの問題を提出して、不定方程式ax+by=cの整数解の存在の要件は何ですか.
聡明な欧さんはすぐに手を挙げて先生に完璧な答えを出して、放課後、先生は欧さんを呼んで彼に思考問題をあげました.
正の整数aとbの値と2つのシーケンスSとVを与え、最小代価の正の整数cを求めて不定方程式ax+by=cを解き、cは以下の条件を満たさなければならない.
1.cを構成する数字は、シーケンスS内でなければならない.
2.使用シーケンスSごとに1つの数字S
iは代価Vを消費する
i.
3.シーケンスS内の数字の使用回数は限定されない.
4.cの首位はu,cの最下位はvであった.(u,vもシーケンスS内)
複数の代価のような小さな答えがあれば、cの辞書順が一番小さいものだけが必要です.
説明を入力:
a,b,n (1 <= a, b <= 100000, 2 <= n <= 10)
n Si (0 <= Si <= 9)
n Vi (1 <= Vi <= 1000)
u,v(1 <= u <= 9, 0 <= v <= 9, u != v)
出力の説明:
c 。
。
-1 。
例1
入力
10 15 2
2 0
1 1
2 0
しゅつりょく
20
例2
入力
17 17 4
0 1 2 7
1 1 1 1000
1 0
しゅつりょく
1020
//分析:まず三つの配列を定義し、配列はa,bに関連する
//ax+by=c式に解があればc%gcd(a,b)=0
//一番大切なのは優先キュー思想
コード:
#include
using namespace std;
#define ll long long
#define INF 1000000
struct node
{
int s,v;
bool operator que;
que.push({x,0});
while(!que.empty())
{
node tem=que.top();
que.pop();
if((tem.s*10+v)%p==0)
{
print(tem.s);
cout<dis[tem.s]+V[i])
{
dis[ns]=dis[tem.s]+V[i];
pre[ns]=tem.s;
num[ns]=i;
que.push({ns,dis[ns]});
}
}
}
return 0;
}
int main()
{
int a,b,n;
cin>>a>>b>>n;
p=__gcd(a,b);
int w[12];
for(int i=0;i>w[i];
}
for(int i=0;i>V[w[i]];
cin>>u>>v;
if(bfs(u%p)==0)cout<