luogu2723 丑数
2024-10-19 12:42:30
提供一种单调队列做法(非正解)
显然每一个丑数能够由一个质数乘以另一个丑数得到
所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相应的单调队列里。找到的第n个数就是所求的丑数。由于会有重复,但是取出元素的顺序是单调的,所以开一个last变量判重。
本代码不开O2卡一个点(下载下来跑1200ms),开O2过。(因为我用的STL的队列23333)
#include <bits/stdc++.h>
using namespace std;
struct data
{
int x;
queue<int> q;
friend bool operator>(const data &aa, const data &bb);
}t, a[110];
int k, n;
bool operator>(const data &aa, const data &bb)
{
return aa.q.front() > bb.q.front();
}
int main()
{
scanf("%d%d", &k, &n);
for (int i = 1; i <= k; i++)
{
scanf("%d", &a[i].x);
a[i].q.push(a[i].x);
}
int last = 1;
for (int i = 1; i <= n; i++)
{
int minj = 1;
for (int j = 2; j <= k; j++)
{
if (a[minj] > a[j])
minj = j;
}
int xx = a[minj].q.front();
a[minj].q.pop();
if(last == xx)
{
i--;
continue;
}
for (int j = 1; j <= k; j++)
{
a[j].q.push(a[j].x * xx);
}
last = xx;
if (i == n)
printf("%d\n", xx);
}
return 0;
}
最新文章
- 奇异值分解 SVD
- 【转】sql to_char 日期转换字符串
- Azure 删除VHD时报错:There is currently a lease on the blob and no lease ID was specified in the request
- java编程思想-java 异常使用指南
- 无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)
- HTML 调用iscroll.js主要事项
- 如何构建你自己的Java库【翻译】
- 【转】怎样创建一个Xcode插件(Part 2)
- BZOJ 1978: [BeiJing2010]取数游戏 game( dp )
- 【HTTP 2】HTTP/2 协议概述(HTTP/2 Protocol Overview)
- Ajax-javascript
- zepto的返回顶部scrollTop的动画解决方法
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(六)
- HTTP协议的六种请求方法
- Xamarin 学习笔记 - Page(页面)
- ES6类封装判断用户上下左右滑动事件!
- 将多窗体应用程序改造为仿Chrome形式的简易方法
- 高负载集群实战之lvs负载均衡-技术流ken
- python接口自动化测试(二)-requests.get()
- CSS----学习2