视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
[U]3.1.3HumbleNumbers技巧题
2020-11-09 15:30:57 责编:小采
文档

这个题呢.... 这样: 输入数据中给了4个质数 2 3 5 7。 我们就有4个队列 2-----2 3 5 7 3-----3 5 7 5-----5 7 7-----7 每个队列乘以队列的第一个数,取出乘积的最小,插入到队列中。 例如当前的最小为2*2=4,插入队列 2------3 4 5 7 3------3 4 5 7 5-----

这个题呢.... 这样:

输入数据中给了4个质数

2 3 5 7。

我们就有4个队列

2-----2 3 5 7

3-----3 5 7

5-----5 7

7-----7

每个队列乘以队列的第一个数,取出乘积的最小值,插入到队列中。

例如当前的最小值为2*2=4,插入队列

2------3 4 5 7

3------3 4 5 7

5------4 5 7

7------4 7

可以看到插入的值可能在队列中间也可能在队列末端。

1.在队列中间:进行一次排序保证插入顺序。

2.在队列末端:不需要进行排序,直接插入最尾端保持有序。

因此,将最大的质数作为判断准则,就能得出数的插入位置。

对于每个质数的队列,只需要标记坐标。

另外判重的问题:

1.如果当前插入的乘积比最大质数小,则很有可能在序列的中部分发生冲突,遍历一部分队列就好。

2.插入的乘积比最大质数大,直接判断队列末端是否重复。

时间还不错~

Code:

/*
ID:sevenst4
LANG:C++
PROG:humble
*/
#include
#include
using namespace std;

int num[111];
int list[111111];
int index[111];

bool cmp( int a,int b ){ return anum[i]*list[index[i]] )
 	 	 	{
 	 	 	min=num[i]*list[index[i]];
 	 	 	l=i;
	}
	 if( min

下载本文
显示全文
专题