高效算法优化技巧
文章平均质量分 64
skajre
这个作者很懒,什么都没留下…
展开
-
UVA 10827 Maximum sum on a torus(环面上的最大子矩阵和)
注意是第一行和最后一行连起来,第一列和最后一列连起来,一开始一直以为只有列连起来。#include#include#include#includeusing 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 · 296 阅读 · 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 · 299 阅读 · 0 评论 -
UVA 1382 Distant Galaxy(枚举优化)
如果四条边都枚举,那么时间复杂度O(n),但是只枚举上下两条线,然后根据上下两条线来算出左右两条线,时间复杂度会大大降低。#include#include#include#includeusing namespace std;const int maxn=100+10;struct node{ int x,y; bool operator < (const node &原创 2016-10-02 00:00:36 · 235 阅读 · 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 · 253 阅读 · 0 评论 -
UVA 1121 Subsequence(复杂度优化)
O(nlogn)#include#include#include#includeusing 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 · 252 阅读 · 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 · 273 阅读 · 0 评论 -
UVA 11549 Calculator Conundrum(floyd判圈法+两种速度慢的一般写法)
这题一定会出现循环的,因为如果截取n位数,那么数的范围是从1~10^n,所以如果最坏情况从1~10^n全部跑完,那么肯定会跑到其中一个已经跑过的数,所以一定会循环。速度最慢的 set+stream 2200ms。#include#include#include#include#include#includeusing namespace std;int next(int n,原创 2016-09-30 18:45:36 · 293 阅读 · 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 · 150 阅读 · 0 评论 -
UVA 11462 Age Sort(IO优化)
输入文件有25M,所以输入输出非常大,需要用速度较快的IO。240MS。#include#include#include#includeusing 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 · 270 阅读 · 0 评论 -
UVA 1432 Fire-Control System(枚举)
枚举半径,然后控制角度。#include#include#include#include#include#includeusing 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 · 247 阅读 · 0 评论 -
UVA 1451 Average(斜率优化)
题解紫书第八章例题8。#include#include#include#includeusing 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 · 243 阅读 · 0 评论 -
UVA 1481 Genome Evolution(高效算法优化)
记录下第二个数组的位置,然后更新第一个数组的区间,然后更新第二个数组的区间,如果区间长度相等,那么就是有子集相等,此时ans++。#include#include#include#includeusing 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 · 234 阅读 · 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#includeusing namespa原创 2016-10-14 19:08:59 · 251 阅读 · 0 评论 -
UVA 1468 Restaurant ?
#include#include#include#includeusing 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 · 233 阅读 · 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 · 176 阅读 · 0 评论 -
UVA 10391 Compound Words(hash字符串)
#include#include#include#include#includeusing 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 · 227 阅读 · 0 评论 -
UVA 10763 Foreign Exchange(快速检索)
#include#include#include#includeusing 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 · 182 阅读 · 0 评论 -
UVA 10125 Sumsets(中途相遇法)
首先从大到小枚举d,然后枚举c和b,a根据公示算出,a=d-c-b,只要在剩下的区间中二分查找a就可以了,找到就是成功了。我认为时间复杂度是O(n^3)吧,但是在其他博客看到时间复杂度是O(n^2)。#include#include#include#include#includeusing namespace std;#define ss(x) scanf("%d",&x);#def原创 2016-10-13 09:05:48 · 240 阅读 · 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 · 249 阅读 · 0 评论