51 nod 1421 最大mod值 思维题
来源:互联网 发布:protobuf java 编辑:程序博客网 时间:2024/06/07 03:59
1421 最大MOD值
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
关注
有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个)
Input
单组测试数据。第一行包含一个整数n,表示数组a的大小。(1 ≤ n ≤ 2*10^5)第二行有n个用空格分开的整数ai (1 ≤ ai ≤ 10^6)。
Output
输出一个整数代表最大的mod值。
Input示例
33 4 5
Output示例
2
这个题没啥算法 思维题。可能是五级的一个水题吧。随便一写就过了。高看五级难度了。
所谓取余数 。其实就是大的数减去小的数一个小于等于大数的倍数。
因为 a[i]>a[j]
这就很明显了 。a【j】 的倍数一直在递增。
把递增的按照从小到大排序。
存起来。
之后 新的j减去最小的倍数就好 。
优先队列存贮。
#include <bits/stdc++.h>using namespace std;typedef pair<int ,int > pr;#define mo 200005pr a[mo];struct pcmp//定义优先级小的优先{ bool operator()(pr a,pr b) { return a.first>b.first; }};bool cmp(pr a,pr b){ return a.second<b.second;}int main(){ int n; while(scanf("%d",&n)!=EOF) { priority_queue<pr,vector<pr >,pcmp> s; int x; for(int i=0;i<n;i++) { //cin>>x; scanf("%d",&x); a[i].first=x; a[i].second=x; } sort(a,a+n,cmp); int maxs=0; pr t; for(int i=0;i<n;i++) { while(1&&i) { t=s.top(); if(t.first+t.second>a[i].second)//取最大的有效值 { maxs=max(maxs,a[i].second-t.first); break; } while(t.first+t.second<=a[i].second)//把倍数循环到小于等于a[i].second. t.first+=t.second; s.pop(); s.push(t); // cout<<t.first<<' '<<t.second<<endl; } s.push(a[i]); } //cout<<maxs<<endl; printf("%d\n",maxs); } return 0;}
阅读全文
0 0
- 51 nod 1421 最大mod值 思维题
- 51nod 1421:最大MOD值
- [51nod 1421]最大MOD值
- 51nod-1421 最大MOD值
- 51nod 1421 最大MOD值
- 51Nod-1421-最大MOD值
- 【数学】51Nod 1421 最大MOD值
- 51nod 1421 最大MOD值 & codeforces 485D Maximum Value(思维 数学)
- 51nod 1421 最大MOD值 (暴力枚举)
- [乱搞]51 Nod 1421——最大MOD值
- 51nod 1421 最大mod值 (排序+二分搜索)
- 51nod 1272 最大距离 思维题
- 51NOD 1421 最大MOD值&&Codeforces 484 B. Maximum Value(筛法 + 二分)
- 51nod 1272 最大距离【思维】
- 51nod 1272 最大距离(思维)
- 【51Nod1421】最大MOD值
- 51Nod - 1276 思维题
- 51Nod - 1246 思维题
- activiti实战二(请假bpmn)
- Linux修改用户目录
- two js questions
- View添加手势,防止View上点击其他视图触发点击效果
- 知识、见识和认知
- 51 nod 1421 最大mod值 思维题
- 通过npm写一个cli命令行工具
- 15年编程生涯,资深架构师总结的7条经验
- express路由模块化
- 优秀代码注释的5个技巧
- 【小程序】调用wx.request接口时需要注意的几个问题
- Java设计模式_(行为型)_备忘录模式
- This incident will be reported
- 这样操作就不会出现cad转换成jpg不清楚