BestCoder Round #86 HDU 5804(暴力),HDU 5805(前缀和后缀差值最大),HDU 5806(尺取法),HDU 5807(简单DAG 分步式DP )
来源:互联网 发布:爬虫怎么找兼职 知乎 编辑:程序博客网 时间:2024/06/14 02:52
传送门:hdu-5804 Price List
求出所有数的和sum,如果q>sum那么肯定记多了。
时间复杂度O(n)。
PS:上来没注意long long直接WA一发,同时long long直接cin好像也是不行的,还有就是全局变量sum忘了多组输入初始化了QAQ#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int N=100100;int t,n,m;ll sum;char s[N];int main(){ scanf("%d",&t); int x; while(t--){ sum=0; scanf("%d%d",&n,&m); for(int i=0; i<n; i++){ scanf("%d",&x); sum+=x; } ll y; for(int i=0; i<m; i++){ scanf("%I64d",&y); if(y>sum)printf("1"); else printf("0"); } printf("\n"); } return 0;}传送门:hdu-5805 NanoApe Loves Sequence
求出前i个数里相邻差值的最大值fi,i到n里相邻差值的最大值gi,那么ans=∑i=1nmax(∣Ai−1−Ai+1∣,fi−1,gi+1)。
时间复杂度O(n)。
i==1,i==n特判一下就好了#include <bits/stdc++.h>#define Memset(x, a) memset(x, a, sizeof(x))#define ll __int64using namespace std;const int N=1e5+10;int n,pre[N],nex[N],a[N];int main(){ int t; scanf("%d",&t); while(t--){ Memset(pre,0);Memset(nex,0); scanf("%d",&n); for(int i=1; i<=n; i++)scanf("%d",&a[i]); for(int i=2; i<=n; i++)pre[i]=max(pre[i-1],abs(a[i]-a[i-1])); for(int i=n-1; i>=1; i--)nex[i]=max(nex[i+1],abs(a[i+1]-a[i])); ll ans=0; for(int i=1; i<=n; i++){ if(i==1)ans+=nex[2]; else if(i==n)ans+=pre[n-1]; else ans+=max(max(abs(a[i+1]-a[i-1]),pre[i-1]),nex[i+1]); } printf("%I64d\n",ans); } return 0;}
传送门:hdu-5806 NanoApe Loves Sequence Ⅱ
尺取法,先找k个>=m的,定位到t指针。然后移动s,如果a[s]>=m,说明现在区间内不足k个,t指针向后移,补到k个
PS:cin会T,坑惨了_(:зゝ∠)_
做题时一开始想用线段树,思路没打开。。。
#include <bits/stdc++.h>#define ll __int64using namespace std;const int N=2e5+10;int a[N];int main(){ int t; scanf("%d",&t); while(t--){ int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=0; i<n; i++){ scanf("%d",&a[i]); } int s=0,t=0,num=0; ll ans=0; for(;;){ while(t<n&&num<k){ if(a[t++]>=m)num++; } if(num<k)break; ans+=n-t+1; if(a[s++]>=m)num--; } printf("%I64d\n",ans); } return 0;}
传送门:hdu-5807 Keep In Touch
简单的DAG图 初始化将两个城市不能通信的状态值 设为0
考虑dp,设f[i][j][k]表示三个人分别在i,j,k时的方案数,直接转移是O(n6)的。
于是考虑加维,设f[i][j][k][now]表示三个人分别在i,j,k时,目前准备走now这个人的方案数,那么转移复杂度就降低到了O(n4)
#include<bits/stdc++.h>using namespace std;const int N = 55;const int MOD = 998244353;int w[N],a[N][N];int f[N][N][N],g[N][N][N],h[N][N][N];int main(){ int T; scanf("%d",&T); while(T--){ int n,m,K,q; int x,y,z; scanf("%d%d%d%d",&n,&m,&K,&q); for(int i = 1; i <= n; ++i) scanf("%d",&w[i]); memset(a,0,sizeof(a)); while(m--){ scanf("%d%d",&x,&y); a[y][x] = 1; } for(int i = n; i >= 1; --i){ for(int j = n; j >= 1; --j){ for(int k = n; k >= 1; --k){ f[i][j][k] = 1; g[i][j][k] = h[i][j][k] = 0; for(int t = 1; t <= n; ++t){ if(a[t][i]) f[i][j][k] = (f[i][j][k]+h[t][j][k])%MOD; } for(int t = 1; t <= n; ++t){ if(a[t][j]) h[i][j][k] = (h[i][j][k]+g[i][t][k])%MOD; } for(int t = 1; t <= n; ++t){ if(a[t][k]) g[i][j][k] = (g[i][j][k]+f[i][j][t])%MOD; } if(abs(w[i]-w[j]) > K || abs(w[i]-w[k]) > K || abs(w[j]-w[k]) > K) f[i][j][k] = 0; } } } while(q--){ scanf("%d%d%d",&x,&y,&z); printf("%d\n",f[x][y][z]); } } return 0;}
总结:整场因为第一题惨WA,导致后面做题心态发生巨大变化,以后要多吸取教训_(:зゝ∠)_
0 0
- BestCoder Round #86 HDU 5804(暴力),HDU 5805(前缀和后缀差值最大),HDU 5806(尺取法),HDU 5807(简单DAG 分步式DP )
- HDU 5806 BestCoder Round #86 NanoApe Loves Sequence Ⅱ (尺取法)
- HDU 5806 BestCoder Round #86 NanoApe Loves Sequence Ⅱ (尺取法)
- HDU 5273(暴力前缀和)
- HDU 5749 BestCoder Round #84 Colmerauer(暴力贡献)
- HDU 5778 BestCoder Round #85 abs (暴力枚举)
- BestCoder Round #86 HDU 5804,HDU 5805,HDU 5806,HDU 5807
- hdu 5945 (dp+单调队列,BestCoder Round #89)
- HDU 5807 Keep In Touch (分步DP)
- HDU 5807 BestCoder Round #86 Keep In Touch (分段式DP)
- HDU 5907 Find Q (简单题目)【BestCoder Round #88】
- hdu 5358(尺取法)
- hdu 5672(尺取法)
- hdu 5358(尺取法)
- hdu 6103 (尺取法)
- BestCoder Round #16 1002(hdu 5087)
- hdu 5591 BestCoder Round #65(博弈)
- BestCoder Round #52 (div.2)(hdu 5417,hdu 5418)
- mybatis下使用log4j打印sql语句和执行结果
- MPTCP 源码分析(七) 拥塞控制
- BNU Training 2016.07.25 总结
- C语言系列(二)有符号数和无符号数详解
- CodeForces 501C Misha and Forest (STL queue)(拓扑排序)
- BestCoder Round #86 HDU 5804(暴力),HDU 5805(前缀和后缀差值最大),HDU 5806(尺取法),HDU 5807(简单DAG 分步式DP )
- Android文本的测量和绘制
- UVA 10305 Ordering Tasks(拓扑排序入门)【刘汝佳算法入门经典例6-15】
- Head First 装饰者模式
- 多线程实现的三个方法
- leetcode No86. Partition List
- 安卓端的音乐播放
- hdu2141
- HDU-5806-NanoApe Loves Sequence Ⅱ-DP+队列维护