poj3263 Tallest Cow 题解报告
题目传送门
【题目大意】
有$N$头奶牛站成一行,给出最高的奶牛身高$H$及其编号,已知$M$对关系,即第$i$头奶牛能看见第$j$头奶牛时,满足条件:
1.第$j$头奶牛的身高不小于第$i$头奶牛
2.假定$j<i$,则从$j+1$到$i-1$之间的每一头奶牛身高都小于第$i$头奶牛且小于第$j$头奶牛
求每个奶牛可能的最高身高。
【思路分析】
我个人的思路是这样的,所有奶牛的初始身高为最高身高,已知第$i$头奶牛能看见第$j$头奶牛且$j<i$,则
$$h[j]=max(h[j],h[i])$$
$$for(int x=j+1;x<i;x++)h[x]--;$$
把$M$个关系正循环一遍,反循环一遍,然后输出……就over。
据说正解是前缀和,我也讲一下吧,是这样的,设一个数组$c[i]$表示奶牛$i$身高与最高身高的差值,即最后的答案为$H+c[i]$。对于每一个关系中的$i$和$j$(假定$j<i$),把$c$数组中下标为$j+1$到$i-1$的数都减1。但是这样复杂度太高(据说有$O(MN)$),于是我们用一个$d$数组来转化一下,$d[j+1]--;d[i]++$,表示“身高减1”的影响从$j+1$开始,持续到$i-1$,到$i$结束。最后,$c$数组的值等于$d$数组的前缀和,即
$$c[x]=\sum_{y=1}^{x}d[y]$$
【代码实现】
1 #include<iostream> 2 #include<cstdio> 3 #define rg register 4 #define go(i,a,b) for(rg int i=a;i<=b;i++) 5 #define back(i,a,b) for(rg int i=a;i>=b;i--) 6 using namespace std; 7 const int N=10002; 8 int n,I,H,m; 9 int h[N],a[N],b[N]; 10 int main(){ 11 scanf("%d%d%d%d",&n,&I,&H,&m); 12 go(i,1,n) h[i]=H; 13 go(i,1,m){ 14 scanf("%d%d",&a[i],&b[i]); 15 int A=a[i],B=b[i]; 16 if(h[A]>h[B]) h[B]=h[A]; 17 if(A>B) swap(A,B); 18 go(j,A+1,B-1) h[j]=min(h[A],h[B])-1; 19 } 20 back(i,r,1){ 21 int A=a[i],B=b[i]; 22 if(h[A]>h[B]) h[B]=h[A]; 23 if(A>B) swap(A,B); 24 go(j,A+1,B-1) h[j]=min(h[A],h[B])-1; 25 } 26 go(i,1,n) printf("%d\n",h[i]); 27 return 0; 28 }
我的玄学代码
1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #define rg register 5 #define go(i,a,b) for(rg int i=a;i<=b;i++) 6 #define back(i,a,b) for(rg int i=a;i>=b;i--) 7 using namespace std; 8 const int N=10002; 9 map<pair<int,int>,bool> existed; 10 int c[N],d[N]; 11 int main(){ 12 int n,p,H,m; 13 scanf("%d%d%d%d",&n,&p,&H,&m); 14 go(i,1,m){ 15 int a,b; 16 scanf("%d%d",&a,&b); 17 if(a>b) swap(a,b); 18 if(existed[make_pair(a,b)]) continue; 19 d[a+1]--;d[b]++; 20 existed[make_pair(a,b)]=1; 21 } 22 go(i,1,n){ 23 c[i]=c[i-1]+d[i]; 24 printf("%d\n",H+c[i]); 25 } 26 return 0; 27 }
正解代码
转载于:https://www.cnblogs.com/THWZF/p/11245065.html
poj3263 Tallest Cow 题解报告相关推荐
- POJ3263 Tallest Cow【差分数组】
Tallest Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5486 Accepted: 2524 Descripti ...
- 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 383 Solved: 21 ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- 【差分】Tallest Cow(poj 3263/luogu 2879)
Tallest Cow poj 3263 luogu 2879 题目大意: 现在有n头牛,两头牛如果要相互看到,那他们之间的牛必须比他们两低,现在给出n,最高牛的位置和高度,和m对关系,要你求每头牛最 ...
- 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
洛谷P2879 [USACO07JAN]区间统计Tallest Cow 题目描述 给出牛的可能最高身高,然后输入m组数据 a b,代表a,b可以相望,最后求所有牛的可能最高身高输出 输入输出格式 输入 ...
- [BZOJ1635][Usaco2007 Jan]Tallest Cow 最高的牛
1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 656 Solved: 40 ...
- bzoj 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 647 Solved: 39 ...
- CSP-2019day1题解报告
day1题解报告 题目 T1 T2 从链想起 转为正解 T3(摘自同级大佬xez) 题目 T1传送门 T2传送门 T3传送门 T1 乍一看,这道题做过,可以用对称性做,如果他的长度过了一半,就输出1, ...
- 爆炸的符卡洋洋洒洒题解报告
爆炸的符卡洋洋洒洒题解报告 标签:动态规划 题目链接 来源:牛客网 解题思路: 显而易见的背包问题 但再观察a,b的数据范围,开不了那么大的dp数组 这就启发我们去优化,由于题目要求魔力总耗的是k的倍 ...
- 2022杭电多校5题解报告(同步自语雀)
一.赛后总结 Wuhu~萌新又来啦~ 第一次在考场上写出NTT,虽然是比较裸,但感觉真的不错~ 开场看03,思路比较直,就是dijk,但跨层跳跃想了好久~最后想到了类似于B树或者B-树一类的层内链表, ...
最新文章
- Java Socket例子
- java使用stream将List转为Map
- NOIP2017提高组比赛总结
- python编写赛车_python udp 协议发送接收秒速赛车平台搭建数据
- Django中的form如何设置field的html属性呢?
- python colorama_Python常用模块—— Colorama模块
- 使用base64格式生成图片
- python实现归结演绎推理_归结演绎推理.ppt
- php漂浮广告代码,JS随机漂浮广告代码具体实例
- someone you loved 歌词翻译
- 一枚前端UI组件库 KUI for Vue
- 从0到1构建基于Springboot+SpringCloud的微信点餐系统
- 科大奥锐密立根油滴实验数据_密立根油滴实验原始数据记录表
- 云数据库Mysql 购买和使用(腾讯云为例)
- python小游戏课程设计报告_贪吃蛇游戏课程设计报告
- python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...
- 教你如何学模电——三极管篇
- 有苦有乐的算法 --- 用栈和递归的方式实现二叉树的前序遍历、中序遍历、后序遍历
- crash: mod命令
- KindEditor上传图片后回调传入文本框和列表框并显示图片
热门文章
- 拓端tecdat:R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
- mysql忘记root密码安装_MySql忘记root密码的解决方法
- Android入门笔记02
- opencv美颜磨皮
- pytorch view()函数
- 2019-02-26-GCN资料
- 解决UnicodeEncodeError: 'gbk' codec can't encode character u'\u25aa' in position 344 : illegal multiby
- python求解LeetCode 习题 Excel Sheet Column Title
- Servlet之间的跳转(MVC模式)
- 2021-06-16单例模式详解