题目传送门

【题目大意】

有$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 题解报告相关推荐

  1. POJ3263 Tallest Cow【差分数组】

    Tallest Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5486 Accepted: 2524 Descripti ...

  2. 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 383  Solved: 21 ...

  3. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  4. 【差分】Tallest Cow(poj 3263/luogu 2879)

    Tallest Cow poj 3263 luogu 2879 题目大意: 现在有n头牛,两头牛如果要相互看到,那他们之间的牛必须比他们两低,现在给出n,最高牛的位置和高度,和m对关系,要你求每头牛最 ...

  5. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow

    洛谷P2879 [USACO07JAN]区间统计Tallest Cow 题目描述 给出牛的可能最高身高,然后输入m组数据 a b,代表a,b可以相望,最后求所有牛的可能最高身高输出 输入输出格式 输入 ...

  6. [BZOJ1635][Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 656  Solved: 40 ...

  7. bzoj 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 647  Solved: 39 ...

  8. CSP-2019day1题解报告

    day1题解报告 题目 T1 T2 从链想起 转为正解 T3(摘自同级大佬xez) 题目 T1传送门 T2传送门 T3传送门 T1 乍一看,这道题做过,可以用对称性做,如果他的长度过了一半,就输出1, ...

  9. 爆炸的符卡洋洋洒洒题解报告

    爆炸的符卡洋洋洒洒题解报告 标签:动态规划 题目链接 来源:牛客网 解题思路: 显而易见的背包问题 但再观察a,b的数据范围,开不了那么大的dp数组 这就启发我们去优化,由于题目要求魔力总耗的是k的倍 ...

  10. 2022杭电多校5题解报告(同步自语雀)

    一.赛后总结 Wuhu~萌新又来啦~ 第一次在考场上写出NTT,虽然是比较裸,但感觉真的不错~ 开场看03,思路比较直,就是dijk,但跨层跳跃想了好久~最后想到了类似于B树或者B-树一类的层内链表, ...

最新文章

  1. Java Socket例子
  2. java使用stream将List转为Map
  3. NOIP2017提高组比赛总结
  4. python编写赛车_python udp 协议发送接收秒速赛车平台搭建数据
  5. Django中的form如何设置field的html属性呢?
  6. python colorama_Python常用模块—— Colorama模块
  7. 使用base64格式生成图片
  8. python实现归结演绎推理_归结演绎推理.ppt
  9. php漂浮广告代码,JS随机漂浮广告代码具体实例
  10. someone you loved 歌词翻译
  11. 一枚前端UI组件库 KUI for Vue
  12. 从0到1构建基于Springboot+SpringCloud的微信点餐系统
  13. 科大奥锐密立根油滴实验数据_密立根油滴实验原始数据记录表
  14. 云数据库Mysql 购买和使用(腾讯云为例)
  15. python小游戏课程设计报告_贪吃蛇游戏课程设计报告
  16. python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...
  17. 教你如何学模电——三极管篇
  18. 有苦有乐的算法 --- 用栈和递归的方式实现二叉树的前序遍历、中序遍历、后序遍历
  19. crash: mod命令
  20. KindEditor上传图片后回调传入文本框和列表框并显示图片

热门文章

  1. 拓端tecdat:R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
  2. mysql忘记root密码安装_MySql忘记root密码的解决方法
  3. Android入门笔记02
  4. opencv美颜磨皮
  5. pytorch view()函数
  6. 2019-02-26-GCN资料
  7. 解决UnicodeEncodeError: 'gbk' codec can't encode character u'\u25aa' in position 344 : illegal multiby
  8. python求解LeetCode 习题 Excel Sheet Column Title
  9. Servlet之间的跳转(MVC模式)
  10. 2021-06-16单例模式详解