|
唔,堆优化的Dijkstra目前是最快的:0.002s
只是松弛操作出了点问题,调试了几次。
..........
...........
else//Relax
{
int U=Map[Minpos][i] + D[Minpos];
//而不是int U=heap[Minpos].Data + D[i];
if(U < heap[NodePos[i]].Data)//如果从目前能到达的最近的点到第i个结点比当前堆里的值还要小的话,更新
{
heap[NodePos[i]].Data=U;
Dec(NodePos[i]);
}
}
.....
.....
|
|
fout 在本题中竟然比scanf慢了差不多1倍!
|
|
唔,原来Prim和Dijkstra没什么区别啊,加上堆优化性能还是挺高的
|
|
题意叙述严重有误!
因为能跳到的最远的点的含义是:
1、能从出发点不受阻挡的跳到这个“最远点”。(本条题目已说明)
2、能从出发点不受阻挡的跳到“最远点”之前的所有点。(本条题目未说明)
|
|
|
|
邻接表构图+BFS(含memset)完事儿满分无压力lu过。
|
|
万进制高精加+万进制高精乘+动归,很麻烦地搞定
其中
【 前提:struct bint 】
【 { 】
【 int len,num[20]; 】
【 }; 】
bool bcmp(bint,bint);
bint bchange(int);
void bprint(bint);
bint bplu(bint,bint);
bint btim(bint,bint);
函数通用,以后直接来剪代码。
|
Czb。
积分:1752
提交:406 / 867
|
|
|
残念啊,全E但是全对啊,
全对还不给AC啊!
这什么情况啊!
|
|
动规+高精度乘法搞定
f[i]表示i分解后得到的最大乘积
需用一个二位的bool型数组标记每一个数在每种情况下是否用过
|
Czb。
积分:1752
提交:406 / 867
|
|
|
|
Czb。
积分:1752
提交:406 / 867
|
|
|
|
|
C++系统快排速度并不是最快的,本题随机化快排完秒之。
TTTTTTT RRRRRR U U TTTTTTT H H
T R R U U T H H
T R R U U T H H
T RRRRRR U U T HHHHHHH
T R R U U T H H
T R R U U T H H
T R R UUUUU T H H
|
|
刚开始用的“字符长度排序”及“二分查找区间”,再用一个“排序”,结果和暴力是一样的,过四组。(即程序中的注释部分)
后改用“字符数组字典序排序”,加上“二分准确查找”,最后一个一样的“排序”,果然很快,0.662秒lu过,无压力。
(以上所谓“排序”均为“手动随机化有附带值快排”)
(“二分查找区间”找到的是同一长度的字符数组的范围,“二分准确查找”找到的就是最终要找的那个字符数组)
(不过字典树优化后其实应该可以更快的,不过在NOIP中其实完全可以用其他的东西来代替字典树,所以,在NOIP以后再学学字典树吧,毕竟是很好用的一种数据结构)
|
|
|
|
数值递推,
(推公式当中就会发现发现,
递推式明显和“全排列”的公式有关。)
|
Czb。
积分:1752
提交:406 / 867
|
|
|
唉,比赛的时候数组开小了.....错了1组
1.字符串排序
2.二分查找,累加
3.累加后数据排序
4.输出
|