HDU 4908 BestCoder Sequence
2015-07-29 20:59
477 查看
HDU 4908 BestCoder Sequence
一开始以为打死都不信这代码能过
但是想思路加上打代码花了两个小时,觉得不试一下放弃一下可惜了
这道题目主要采用的是DP的思想,但是却没有转移方程
用一个vis[]来标记这个数到中位数到底一路扫过来的大小状态
然后枚举出四个数组
分别为
que1【i】:表示为从中位数到最左边缺了多少个比中位数大的
que2【i 】:表示从中位数的位置到最右边缺了多少个比中位数大的
man1 :表示为从中位数到最左边缺了多少个比中位数小的的
man2表示从中位数的位置到最又边缺了多少个比中位数小的
故
zuo 是从中位数到左边中位数刚好是n的连续个数
you是是从中位数到右边中位数刚好是n的连续个数
所以最后的结果是左边的zuo+you+zuo*you+que1【i】*man2【i】+que2【i】+man1【i】
但是如果题目数据中输入两个要求的中位数我这个方法必定挂掉
解释的不清楚,就当成日记来写吧
代码奇丑无比,求大神轻打脸
一开始以为打死都不信这代码能过
但是想思路加上打代码花了两个小时,觉得不试一下放弃一下可惜了
这道题目主要采用的是DP的思想,但是却没有转移方程
用一个vis[]来标记这个数到中位数到底一路扫过来的大小状态
然后枚举出四个数组
分别为
que1【i】:表示为从中位数到最左边缺了多少个比中位数大的
que2【i 】:表示从中位数的位置到最右边缺了多少个比中位数大的
man1 :表示为从中位数到最左边缺了多少个比中位数小的的
man2表示从中位数的位置到最又边缺了多少个比中位数小的
故
zuo 是从中位数到左边中位数刚好是n的连续个数
you是是从中位数到右边中位数刚好是n的连续个数
所以最后的结果是左边的zuo+you+zuo*you+que1【i】*man2【i】+que2【i】+man1【i】
但是如果题目数据中输入两个要求的中位数我这个方法必定挂掉
解释的不清楚,就当成日记来写吧
代码奇丑无比,求大神轻打脸
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int num[40011]; int vis[40010]; int place; int que1[40011]; int que2[40011]; int man1[40010]; int man2[40010]; int zuo,you; int main() { int m,n,i; while(scanf("%d%d",&m,&n)!=EOF) { memset(que1,0,sizeof(que1)); memset(que2,0,sizeof(que2)); memset(man1,0,sizeof(man1)); memset(man2,0,sizeof(man2)); zuo=you=0; bool flag=false; for(i=1;i<=m;i++) { scanf("%d",&num[i]); if(num[i]==n&&!flag) { place=i; vis[i]=0; flag=true; } if(num[i]>n) vis[i]=1; if(num[i]<n) vis[i]=-1; } if(!flag) { printf("0\n"); continue; } int x=place; int sum=0; while(x-1>=1) { x=x-1; sum+=vis[x]; if(sum>0) man1[sum]++; else if(sum<0) { que1[abs(sum)]+=1; } else if(sum==0) { zuo++; } } sum=0;x=place; while(x+1<=m) { x+=1; sum+=vis[x]; if(sum==0) { you++; } else if(sum>0) { man2[sum]++; } else if(sum<0) { que2[abs(sum)]++; } } long long ans=zuo*you; for(i=1;i<=m;i++) { ans+=(que1[i]*man2[i]); ans+=(que2[i]*man1[i]); } ans+=zuo;ans+=you; printf("%lld\n",ans+1); } return 0; }
相关文章推荐
- UI01_UIView
- UITableView中Cell的位置交换
- 60. Permutation Sequence
- UIView的layoutSubviews和drawRect方法何时调用
- 经典中的经典Unique Binary Search Trees II
- hdoj-1159-Common Subsequence【动态规划求最长公共子序列】
- 利用UIView做出霓虹灯的效果
- 求逆序对——Ultra-QuickSort 题解解析
- UIView
- IOS开发之UITableView1
- Snail—UI学习之系统标签栏UITabBarController
- POJ 1679 The Unique MST
- ios UI 适配布局相关文章
- CodeForces 5C Longest Regular Bracket Sequence
- Beginners Guide To Learn Dimension Reduction Techniques
- UI02_Label
- ExQuilla的使用和破解
- StringBuffer 与 StringBuilder类的使用
- Android API Guides 阅读笔记(7)----Overview Screen
- request.getParameterMap()的用法