【HDU6058】Kanade's sum(暴力 or 链表)
来源:互联网 发布:大数据 图书 编辑:程序博客网 时间:2024/06/01 23:50
记录一个菜逼的成长。。
2017 Multi-University Training Contest - Team 3
题目链接
题目大意:
给你长度为
求
吐槽一下。。这题暴力竟然能过,有时会T,加输入挂多交几次就能过了。。
暴力做法:
对与每一个
标程做法:
记录每一个值为
暴力做法:
#include <stdio.h>#include <math.h>#include <string.h>#include <string>#include <vector>#include <algorithm>using namespace std;#define rep(i,l,r) for( int i = l; i <= r; i++ )#define rep0(i,l,r) for( int i = l; i < r; i++ )#define ALL(v) (v).begin(),(v).end()#define cl(a,b) memset(a,b,sizeof(a))#define clr clear()#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long LL;typedef pair<int,int> PII;inline void read(int &x){ x=0;char p=getchar(); while(!(p<='9'&&p>='0'))p=getchar(); while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();}const int INF = 0x3f3f3f3f;const int maxn = 500000 + 10;int a[maxn];int L[100],R[100];int main(){ //fin; int T;scanf("%d",&T); while(T--){ int n,k; scanf("%d%d",&n,&k); for( int i = 1; i <= n; i++ ){ read(a[i]); } LL ans = 0; for( int i = 1; i <= n; i++ ){ int ind1 = 0,ind2 = 0; for( int j = i; j && ind1 < k+1; j-- )if(a[j] >= a[i])L[ind1++] = j; for( int j = i; j <= n && ind2 < k+1; j++ )if(a[j] >= a[i])R[ind2++] = j; L[ind1++] = 0;R[ind2++] = n+1; for( int j = 0; j < ind1-1; j++ ){ if(k-1-j < ind2-1 && k-1-j >= 0){ ans += (LL)(R[k-j] - R[k-j-1]) * (L[j] - L[j+1]) * a[i]; } } } printf("%lld\n",ans); } return 0;}
标程做法:
#include <stdio.h>#include <math.h>#include <string.h>#include <string>#include <vector>#include <algorithm>using namespace std;#define rep(i,l,r) for( int i = l; i <= r; i++ )#define rep0(i,l,r) for( int i = l; i < r; i++ )#define ALL(v) (v).begin(),(v).end()#define cl(a,b) memset(a,b,sizeof(a))#define clr clear()#define pb push_back#define mp make_pair#define fi first#define se secondtypedef long long LL;typedef pair<int,int> PII;inline void read(int &x){ x=0;char p=getchar(); while(!(p<='9'&&p>='0'))p=getchar(); while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();}const int INF = 0x3f3f3f3f;const int maxn = 500000 + 10;int pos[maxn],pre[maxn],nxt[maxn];int L[100],R[100];int n,k;void erase(int p){ int pp = pre[p]; int nn = nxt[p]; if(pp)nxt[pp] = nn; if(nn != n+1)pre[nn] = pp;}int main(){ //fin; int T;scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); for( int i = 1,x; i <= n; i++ ){ read(x); pos[x] = i; } rep(i,1,n)pre[i] = i-1,nxt[i] = i + 1; LL ans = 0; rep(num,1,n){ int p = pos[num]; int ind1 = 0,ind2 = 0; for( int d = p; d && ind1 < k + 1; d = pre[d] )L[ind1++] = d; for( int d = p; d != n+1 && ind2 < k + 1; d = nxt[d] )R[ind2++] = d; L[ind1++] = 0;R[ind2++] = n+1; for( int i = 0; i < ind1-1; i++ ){ if(k-1-i < ind2-1 && k-1-i >= 0){ ans += (LL)(R[k-i] - R[k-1-i]) * (L[i] - L[i+1]) * num; } } erase(p); } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- 【HDU6058】Kanade's sum(暴力 or 链表)
- HDU6058-Kanade's sum
- hdu6058-Kanade's sum
- hdu6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- hdu6058 Kanade's sum
- 【2017多校】HDU6058 Kanade's sum 【链表】
- HDU6058-Kanade's sum 链表+思维
- HDU6058 Kanade's sum(链表)
- HDU6058 Kanade's sum【模拟】
- HDU6058 2017杭电多校联赛第三场-Kanade's sum
- 2017杭电多校联赛team3 Kanade's sum hdu6058 快速幂
- Hdu6058 Kanade's sum(2017多校第3场)
- 2017多校训练Contest3: 1003 Kanade's sum hdu6058
- 2017杭电多校第三场 1003 Kanade's sum(hdu6058 区间内第k大)
- php中date()、mktime()、strtotime()三个函数使用
- Yii2.0 批量插入数据
- 基于NCC模板匹配识别的应用
- Scala 数组(Array),列表(List),元组(Tuple),集(Set),映射(Map),迭代器(Iterator)
- SVN服务器搭建详解
- 【HDU6058】Kanade's sum(暴力 or 链表)
- 【c语言】数组和指针
- codeforces 833A
- 成为一个有目标的学习者
- Android性能相关常用命令收集
- Codeforces Round #427 (Div. 2) C. Star sky
- kubernetes资源对象--Volume
- 朋友推荐的其他分页方法
- Tomcat源码解析(5)