
高效算法优化技巧
文章平均质量分 64
skajre
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVA 10827 Maximum sum on a torus(环面上的最大子矩阵和)
注意是第一行和最后一行连起来,第一列和最后一列连起来,一开始一直以为只有列连起来。#include #include #include #include using namespace std; const int maxn=300; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) int map[原创 2016-10-13 08:15:50 · 326 阅读 · 0 评论 -
UVA 10755 Garbage Heap(最大子长方体 可拓展更高维)
// // main.cpp // Richard // // Created by 邵金杰 on 16/10/2. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #incl原创 2016-10-02 11:04:53 · 330 阅读 · 0 评论 -
UVA 1382 Distant Galaxy(枚举优化)
如果四条边都枚举,那么时间复杂度O(n),但是只枚举上下两条线,然后根据上下两条线来算出左右两条线,时间复杂度会大大降低。#include #include #include #include using namespace std; const int maxn=100+10; struct node{ int x,y; bool operator < (const node &原创 2016-10-02 00:00:36 · 266 阅读 · 0 评论 -
UVA 1330 City Game(最大子矩阵)
// // main.cpp // Richard // // Created by 邵金杰 on 16/10/1. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #incl原创 2016-10-01 15:12:59 · 276 阅读 · 0 评论 -
UVA 1121 Subsequence(复杂度优化)
O(nlogn) #include #include #include #include using namespace std; const int maxn=100000+10; int a[maxn],b[maxn]; int main() { int n,s; while(scanf("%d%d",&n,&s)!=EOF) { b[0]=0;原创 2016-10-01 10:51:09 · 281 阅读 · 0 评论 -
UVA 1398 Meteor(扫描线)
这题很明显是扫描线,把流星在相框里的时间的区间整理出来,然后扫描以下线就可以了。 // // main.cpp // Richard // // Created by 邵金杰 on 16/10/1. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All rights reser原创 2016-10-01 09:18:18 · 300 阅读 · 0 评论 -
UVA 11549 Calculator Conundrum(floyd判圈法+两种速度慢的一般写法)
这题一定会出现循环的,因为如果截取n位数,那么数的范围是从1~10^n,所以如果最坏情况从1~10^n全部跑完,那么肯定会跑到其中一个已经跑过的数,所以一定会循环。 速度最慢的 set+stream 2200ms。 #include #include #include #include #include #include using namespace std; int next(int n,原创 2016-09-30 18:45:36 · 331 阅读 · 0 评论 -
UVA 11078 Open Credit System(空间优化+时间优化)
优化后的版本,空间复杂度O(1),时间复杂度O(n)。// // main.cpp // Richard // // Created by 邵金杰 on 16/9/30. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All rights reserved. // #incl原创 2016-09-30 13:34:34 · 170 阅读 · 0 评论 -
UVA 11462 Age Sort(IO优化)
输入文件有25M,所以输入输出非常大,需要用速度较快的IO。 240MS。 #include #include #include #include using namespace std; int c[100]; int main() { int n; while(scanf("%d",&n)&&n) { memset(c,0,sizeof(c));原创 2016-09-30 13:24:37 · 309 阅读 · 0 评论 -
UVA 1432 Fire-Control System(枚举)
枚举半径,然后控制角度。#include #include #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);i++) #define ss(x) scanf("%d",&x) const double pi=acos(-1.0); const int ma原创 2016-10-15 09:03:53 · 287 阅读 · 0 评论 -
UVA 1451 Average(斜率优化)
题解紫书第八章例题8。 #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) const int maxn=100000+10; int f[maxn],q[maxn]; char s[ma原创 2016-10-14 22:59:00 · 269 阅读 · 0 评论 -
UVA 1481 Genome Evolution(高效算法优化)
记录下第二个数组的位置,然后更新第一个数组的区间,然后更新第二个数组的区间,如果区间长度相等,那么就是有子集相等,此时ans++。 #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) co原创 2016-10-14 19:36:13 · 255 阅读 · 0 评论 -
UVA 1392 DNA Regions(单调队列+二分)
(i-j)*p>=(f[i]-f[j])*100==>i*p-f[i]*100>=j*p-f[j]*100,所以只要维护一个单调递减队列,找出最近的j就可以了。 第一个元素是0,因为第0个的时候0*p-f[0]*100=0,所以只要i*p-f[i]*100大于0,那么肯定是可行的。#include #include #include #include #include using namespa原创 2016-10-14 19:08:59 · 283 阅读 · 0 评论 -
UVA 1468 Restaurant ?
#include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);i++) #define ss(x) scanf("%d",&x) const int maxn=60000+10; int y,ax,ay,bx,by,m,n,h[maxn]; int main() {原创 2016-10-14 09:07:25 · 258 阅读 · 0 评论 -
UVA 11054 Wine trading in Gergovia(扫描)
之前自己写了个超级麻烦的代码,思路是对的,但是代码太乱了,导致一直WA。 这题思路就是扫描吧,如果当前last不是0,那就一直要往下传。#include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define ss(x) scanf("%d",&x) long long abs(long long x) {return x>0?x原创 2016-10-13 19:08:02 · 201 阅读 · 0 评论 -
UVA 10391 Compound Words(hash字符串)
#include #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) string s[120000+100]; int main() { ios::sync_with_stdio(0); set hash; hash.cl原创 2016-10-13 10:20:43 · 254 阅读 · 0 评论 -
UVA 10763 Foreign Exchange(快速检索)
#include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x); const int maxn=500000+10; int vis[maxn]; int main() { while(true原创 2016-10-13 09:30:34 · 210 阅读 · 0 评论 -
UVA 10125 Sumsets(中途相遇法)
首先从大到小枚举d,然后枚举c和b,a根据公示算出,a=d-c-b,只要在剩下的区间中二分查找a就可以了,找到就是成功了。我认为时间复杂度是O(n^3)吧,但是在其他博客看到时间复杂度是O(n^2)。#include #include #include #include #include using namespace std; #define ss(x) scanf("%d",&x); #def原创 2016-10-13 09:05:48 · 266 阅读 · 0 评论 -
UVA 1326 Jurssic Remains(位运算)
因为一共有26位字母,所以可以用一个整形数字的第i位代表第i个字母,1就是奇数次,0就是偶数次。// // main.cpp // Richard // // Created by 邵金杰 on 16/10/2. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All rights原创 2016-10-02 18:27:02 · 274 阅读 · 0 评论