Bayan 2015 Contest Warm Up D. CGCDSSQ 暴力

链接:

http://codeforces.com/contest/475/problem/D

题意:

给你一个a数组,每次询问一个x,问有多少区间的gcd等于x

题解:

直接暴力打表,因为gcd的值不会有太多不同的,所以不会超时

代码:

31 ll n;
32 ll a[MAXN];
33 map<ll, ll> ans;
34 map<ll, ll> last;
35 map<ll, ll> now;
36 
37 ll gcd(ll a, ll b) {
38     return b == 0 ? a : gcd(b, a%b);
39 }
40 
41 int main() {
42     ios::sync_with_stdio(false), cin.tie(0);
43     cin >> n;
44     rep(i, 0, n) cin >> a[i];
45     rep(i, 0, n) {
46         now[a[i]]++;
47         for (auto it = last.begin(); it != last.end(); ++it)
48             now[gcd((*it).first, a[i])] += (*it).second;
49         for (auto it = now.begin(); it != now.end(); ++it)
50             ans[(*it).first] += (*it).second;
51         last = now;
52         now.clear();
53     }
54     int q;
55     cin >> q;
56     while (q--) {
57         int x;
58         cin >> x;
59         cout << ans[x] << endl;
60     }
61     return 0;
62 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值