Codeforces Round #290 (Div. 2) D. Fox And Jumping GCD问题

原创 2015年07月07日 00:27:45
D. Fox And Jumping
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Fox Ciel is playing a game. In this game there is an infinite long tape with cells indexed by integers (positive, negative and zero). At the beginning she is standing at the cell 0.

There are also n cards, each card has 2 attributes: length li and cost ci. If she pays ci dollars then she can apply i-th card. After applying i-th card she becomes able to make jumps of length li, i. e. from cell x to cell (x - li) or cell (x + li).

She wants to be able to jump to any cell on the tape (possibly, visiting some intermediate cells). For achieving this goal, she wants to buy some cards, paying as little money as possible.

If this is possible, calculate the minimal cost.

Input

The first line contains an integer n (1 ≤ n ≤ 300), number of cards.

The second line contains n numbers li (1 ≤ li ≤ 109), the jump lengths of cards.

The third line contains n numbers ci (1 ≤ ci ≤ 105), the costs of cards.

Output

If it is impossible to buy some cards and become able to jump to any cell, output -1. Otherwise output the minimal cost of buying such set of cards.

Sample test(s)
input
3
100 99 9900
1 1 1
output
2
input
5
10 20 30 40 50
1 1 1 1 1
output
-1
input
7
15015 10010 6006 4290 2730 2310 1
1 1 1 1 1 1 10
output
6
input
8
4264 4921 6321 6984 2316 8432 6120 1026
4264 4921 6321 6984 2316 8432 6120 1026
output
7237
Note

In first sample test, buying one card is not enough: for example, if you buy a card with length 100, you can't jump to any cell whose index is not a multiple of 100. The best way is to buy first and second card, that will make you be able to jump to any cell.

In the second sample test, even if you buy all cards, you can't jump to any cell whose index is not a multiple of 10, so you should output -1.

题意是给出n个数,要求找出其中几个数,可以生成数轴上所有的数,其实,发现只要能生成1,就能生成所有的数,要生成1,则必然这n个数gcd为1

这样就转化成了gcd的问题!要求某几个数gcd是1,可以用dp思想,从头到尾枚举所有的数,因为数太大,所以生成的数用map set存,这样查询logn复杂度,总的复杂度为n*m*logn

#define INF			9000000000000000000
#define EPS			(double)1e-9
#define mod			1000000007
#define PI			3.14159265358979
//*******************************************************************************/
#endif
#define N 100005
#define MOD 1000000000000000007
int n,l[N],pri[N];
map<int,int> mymap;
map<int,int>::iterator it;
int main()
{
    while(S(n)!=EOF)
    {
        mymap.clear();
        FI(n){
            S(l[i]);
        }
        FI(n){
            S(pri[i]);
             if(mymap.count(l[i])){
                mymap[l[i]] = min(mymap[l[i]],pri[i]);
             }
             else
                mymap[l[i]]=pri[i];
        }
        FI(n){
            for(it=mymap.begin();it != mymap.end();it++){
                int t = it->first,val = it->second;
                int temp = gcd(t,l[i]);
                if(mymap.count(temp)){
                    mymap[temp] = min(mymap[temp],val + pri[i]);
                }
                else
                    mymap[temp] = val + pri[i];
            }
        }
        printf("%d\n",mymap.count(1)?mymap[1]:-1);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Codeforces Round #290 (Div. 1)B. Fox And Jumping

B. Fox And Jumping time limit per test 2 seconds memory limit per test 256 megabytes inpu...

Codeforces Round #290 (Div. 1) B. Fox And Jumping

题意:给出300个数,每个数有权值,求从中挑出k个数使得它们的gcd为1的最小代价。。。。 解法:因为每个数对应的素数并不是很多,因此dp的状态并不是很多。。。 #include #includ...

Codeforces Round #290(Div.2) B.Fox And Two Dots

B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input st...

Codeforces Round #290 (Div. 2) C. Fox And Names 拓扑排序

思路:对相邻两行,当s1[i]≠s2[i]时,新的字母表中s1[i]必须出现在s2[i]的前面,显然是拓扑排序。所以枚举相邻的两行,构造有向边统计入度。 拓扑排序: 每次从图中拿走一个入度为0的节点,...
  • ww32zz
  • ww32zz
  • 2015年08月03日 15:28
  • 288

Codeforces Round #290 (Div. 2) - C. Fox And Names(最短路)

题目: http://codeforces.com/problemset/problem/545/E 题意: n个点m条边的无向图,求出从1->n的最短路,使得其路径上标记为0的路径最少,除了这条最...

B. Fox And Two Dots Codeforces Round #290 (Div. 2)

题意:在n*m的地图上,每个格子涂有不同的颜色(A~Z),问是否有某一种颜色能组成一个回路且长度至少为4. 思路:我用的bfs,从一个未被访问的点开始bfs,走同一种颜色的格子,同时不能走回头路,如果...

C. Fox And Names Codeforces Round #290 (Div. 2)

题意:给n个字符串,它们按照某个字典序从小到大排列,问这个字典序是否存在,存在就输出任意一个满足条件的字典序,否则输出“Impossible”。 裸的topsort,结果在终判时挂了,就因为没有特判,...

Codeforces Round #290 (Div. 1) A. Fox And Names

建出图,按入度进行广搜就行。。。。 #include #include #include #include #include #include #include #include #...

【网络流】 Codeforces Round #290 (Div. 1) C. Fox And Dinner

题意:给出n个数,分成一些桌,每桌大于3个人,使得每人分别与左右两人的和均为素数,并输出一种方案。。。 解法:源点向偶数连容量为2的边,奇数向汇点连容量为2的边,偶数向能构成素数的奇数连容量为1的边...

Codeforces Round #290 (Div. 1)A. Fox And Names

A. Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #290 (Div. 2) D. Fox And Jumping GCD问题
举报原因:
原因补充:

(最多只允许输入30个字)