Codeforces Round #376 (Div. 2) F. Video Cards (二分)(lower bound)
来源:互联网 发布:marc元数据知乎 编辑:程序博客网 时间:2024/05/17 01:37
这道题主要是要只要一个 j += num[i] 来遍历,再加上一个lowerbound 二分一下,但是要边界设置好。
wa了N发~~
#include<bits/stdc++.h>using namespace std;int num[200005],vis[420010]; //这里vis要设置成200000*2,防止越界int main() {int n;while(scanf("%d",&n) != EOF) {for(int i = 0;i < n;i++)scanf("%d",&num[i]);sort(num,num+n);memset(vis,0,sizeof(vis));long long sum,ans = 0;for(int i = 0;i < n;i++) {sum = 0;int l = i,pos,j;if(!vis[num[i]]) {vis[num[i]] = 1;for(j = num[i]+num[i];j <= 410000;j += num[i]) { //直接设置成最大的*2,就不会有错了vis[j] = 1;pos = lower_bound(num,num+n,j) - num;if(pos >= n) pos = n;sum += (long long)(pos - l)*(long long)(j - num[i]); //这里要把值转化成long long,因为2e5*2e5会爆int!l = pos;}}ans = max(ans,sum);}printf("%I64d\n",ans);}}
继续加油了~
还有一个容斥原理写的代码更加短。回头补
0 0
- Codeforces Round #376 (Div. 2) F. Video Cards (二分)(lower bound)
- Codeforces Round #376 (Div. 2)F. Video Cards(乱搞)
- Codeforces Round #376 (Div. 2) F. Video Cards (数论 前缀和 分块求和)
- Codeforces Round #376 (Div. 2) F Video Cards
- Codeforces Round #376 (Div. 2) F. Video Cards(前缀和,好题)
- Codeforces Round #376 (Div. 2) F. Video Cards(前缀和,好题)
- Codeforces Round #376 (Div. 2) F. Video Cards 数论+数据结构+前缀和
- Codeforces Round #376 (Div. 2) F. Video Cards —— 前缀和 & 后缀和
- CodeForces 731 F.Video Cards(水~)
- Codeforces Round #376 (Div. 2) F 区间求和+二分
- Codeforces Round #364 (Div. 2) A - Cards(水)
- Codeforces Round #376 (Div. 2)F(前缀和,模拟)
- codeforces 731 F.Video Cards
- 【Codeforces 731 F Video Cards】
- Codeforces Round #377 (Div. 2)(D.E.F)
- Codeforces Round #442 (Div. 2) 题解(877A~F)
- Codeforces Round #364 (Div. 2) A. Cards
- Codeforces Round #364 (Div. 2) A. Cards
- 机器学习之神经网络
- 守护进程
- 日常实用tips
- java基础知识点总结
- Android练习-----列表选择框(Spinner) (上)
- Codeforces Round #376 (Div. 2) F. Video Cards (二分)(lower bound)
- 位运算符
- [leetcode]19. Remove Nth Node From End of List
- ubuntu14安装tensorflow
- leetcode submission/20161018(move zeroes)
- 算法练习16
- 一个关于概率的问题的思考
- linux不带缓存的文件操作
- unity shader (6)--实现高光反射光照模型