51 nod 1421 最大mod值 思维题

来源:互联网 发布:protobuf java 编辑:程序博客网 时间:2024/06/07 03:59

1421 最大MOD值
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注

有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai  aj


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;}





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 法院判决书下来对方不给钱怎么办 抓进看守所的人怎么办 在拘留所里病重抢救怎么办 昆明公租房户型确认后怎么办 18年工作好难找怎么办 我没工作了怎么办2018 婚姻质量差不幸福该怎么办 吸毒犯戒毒所不收怎么办 信用卡到期人进拘留所怎么办? 人在拘留所信用卡逾期怎么办 探视权不让接走怎么办 医保过了缴费期怎么办 充电宝充手机慢怎么办 执行局执行不到钱怎么办 小孩挖耳朵疼了怎么办 挖耳朵挖破了怎么办 挖耳朵皮挖破了耳鸣怎么办 北京自考证丢啦怎么办 不服检察院的答复函该怎么办 检察院控申答复函不复怎么办 在看守所里疯了怎么办 第一次吸毒拘留五天第二次会怎么办 被派出所拘留15天怎么办 老公从拘留所出来聪明老婆怎么办 中信信用卡忘记还款了怎么办 监狱的犯人病了怎么办 判缓期间在行政拘留怎么办 法院拘留15天工作怎么办 高血压签定了无期限合同怎么办 法院司法拘留找不到人怎么办 c1骑摩托车要拘留怎么办 欠钱的找不到人怎么办 治安拘留人跑了怎么办 行政拘留拘留所不收应该怎么办 在看守所被打了怎么办 取保候审超过12个月怎么办 拘留20天还没有判刑怎么办 被打了没有证据怎么办 拘留37天后没有放人怎么办 强制执行执行的财产不够怎么办 收到公安局拘留通知家属应该怎么办