SN多校模拟赛&&SNOI2016DAY1 kth

来源:互联网 发布:敏感肌肤如何美白 知乎 编辑:程序博客网 时间:2024/05/29 18:05

       Tom有n个数字Ai,每个数字都不一样。

       现在,Tom想把这些数选择,然后 把选定的数字求和,

       例如: Tom有2个数字,这2个数字分别是:3,5,那么,他能够组成的数字有: 3,5,6,8,9,10,11,12… 

       现在,他好奇组成的和中,第k小的是多少,你能告诉他么?

 输入格式: 

       第一行两个正整数n,k表示Tom手上数字的个数,以及要求的是第几小的数字。 第二行n个正整数Ai,表示Tom手上每个数字的值。 

输出格式: 

       一个正整数,表示第k小的数是多少。 k<=100,000,000  

       答案在64位整数范围内且gcd(Ai)=1。 

       第一次评测自己骚手写namespace 无法编译,不能骚啊!!!

       既然是一道题目,就理应将这个题目看完,最后一句话gcd(Ai)=1,又发现是生成一堆数的和,那么很容易想到是裴蜀定理。

       所以正解是裴蜀定理的推广,有这样的推论:对于gcd(Ai)=1 的n个数,可以生成它们最小公倍数以上的任何数。那么由于两个数如果不互质,那么它们一定有至少为2的最大公因数,每个数最大才为1000,那么一定可以选最多10个数使得它们两两互质了。接着暴力出它们到最小公倍数的值,再利用裴蜀定理求解即可。

       然而我考场只想到了可以连续一堆一样,又想到这个小数据可以用无限背包硬求。所以小数据无限背包保证小数据分有,大数据用优先队列模拟,每次取最小值,每当有连续30次取出都是连续的时,即认为后面是连续的了,直接裴蜀定理计算,虽然能被同学hack掉,但是竟然AC了!。

        下附考场AC代码。

#include<iostream>#include<stdio.h>#include<queue>#include<map>#include<string.h>#include<algorithm>#define maxx 184464073709551615#define maxn 105#define maxl 1000005namespace zrx{using namespace std;priority_queue<long long, vector<long long>, greater<long long> >q; long long n;long long k;long long a[maxn];long long dp[maxl];map<long long,long long> dic; }using namespace zrx;void work1(){dp[0]=1;for(long long i=1;i<=n;i++)for(long long j=a[i];j<=maxl-1;j++)if(dp[j-a[i]]){dp[j]=1;}long long num=0;for(long long i=1;i<maxl;i++){if(dp[i])num++;if(num==k){cout<<i<<endl;return;}}}void work2(){sort(a+1,a+1+n);for(long long i=1;i<=n;i++){q.push(a[i]);dic[a[i]]=1;}long long cnt=0;long long pre=a[1];for(long long i=1;i<=k;i++){long long now=q.top();if(now-pre==1){cnt++;}else cnt=0;pre=now;if(cnt==30){cout<<(k-i)+now<<endl;return;}q.pop();if(i==k){cout<<now<<endl;return;}for(int j=1;j<=n;j++){if(a[j]+now>=maxx){break;}if(dic[a[j]+now]==0){q.push(a[j]+now);dic[a[j]+now]=1;}}}}int main(){freopen("kth.in","r",stdin);freopen("kth.out","w",stdout);cin>>n>>k;for(long long i=1;i<=n;i++)cin>>a[i];if(k<=100000){work1();return 0; }else work2();}

         

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蓝牙不小心点到忽略此设备怎么办 千牛工作台无线开店确认不了怎么办 开通诚信通后营业执照注销了怎么办 淘宝标的货跟发的不一样怎么办 wps表格里单元之间重叠了怎么办 淘宝店铺停了一段时间没了怎么办 转转买家收货为敲诈卖家怎么办 淘宝被投诉盗用官网图片怎么办 淘宝订单买下后卖家告知无货怎么办 盗图被删除还是待处理违规该怎么办 如果买家说你们的买家秀一样怎么办 花呗唤起安全核身验证失败怎么办 淘宝买东西花呗分期额度不够怎么办 支付宝余额支付额度已达上限怎么办 我是淘宝卖家遇到无良买家怎么办 我的保证金被淘宝当做违约金怎么办 淘宝顾客不想退货申请仅退款怎么办 被买家提供证明说我卖假货怎么办 淘宝退货快递公司填错了俩次怎么办 淘宝上退货把运单号写错了怎么办? 阿里巴巴发货了快递单号掉了怎么办 淘宝上买东西货物被物流扣留怎么办 淘宝买错了对方已发货怎么办 淘宝卖家发货的时候没货了怎么办 买了球显示未出票中奖了怎么办 点错了允许易企秀获得权限怎么办 淘宝还没发货商家拒绝退款怎么办 买家不补邮费还要你发货怎么办 天猫客服提示获取信息失败怎么办 拼多多下单了商家不发货怎么办 店铺扣2分宝贝降权了怎么办 淘宝店没订单没流量怎么办啊 淘宝id账号登录密码忘记了怎么办 淘宝网店铺授权客服联系不上怎么办 卖家发货买家查不到物流信息怎么办 物流信息到了但东西没到怎么办 淘宝详情已更改对方恶意投诉怎么办 淘宝店写的不给退换怎么办 从饿了么商家借款逾期怎么办 谷歌浏览器网页无法复制文字怎么办 复制粘贴在文件本里找不到了怎么办