文章目录

  • 0 压缩后缀数组
  • 1 新年礼物
  • 2 聚会
  • 3 辽哥游戏
  • 立阳二中、清华医学系谢俞

0 压缩后缀数组





据传是水题
当f[i]=i时,原数组s的i位置一定是偶数,那么s[i]=a[对应的位置]*2
否则s[i]=s[f[i]]-1

#include <cstdio>using namespace std;int n;
int c[20004],a[20004],tot;
int s[20004];int main(){scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&c[i]);for (int i=1;i<=n/2;i++) scanf("%d",&a[i]);for (int i=1;i<=n;i++)if (c[i]==i) s[i]=a[++tot]*2;for (int i=1;i<=n;i++)if (c[i]!=i)s[i]=s[c[i]]-1;for (int i=1;i<=n;i++)printf("%d ",s[i]);
}

1 新年礼物

Windbreaker计划送一些项链给他的朋友们作为新年礼物。为了表示诚意,他决定自己制作全部的项链。他购买了若干种珍珠,每种珍珠都有特定的颜色。他要制作的项链都是M-完美的,也就是每条项链都是恰好由M种珍珠组成的。Windbreaker想知道他最多能送出多少条项链。给定每种珍珠的数目,你要回答的是Windbreaker最多可以制作多少条M-完美项链。

我,应该是水过去的
就每次找出最大的m个数,都减去5(太小超时,太大错,所以说是水过去的啦),放进堆里;重复以上步骤知道堆内大于0的不足m个

#include <cstdio>
#include <queue>
#include <cstring>using namespace std;priority_queue<int> q;
int n,m,ans,d;
priority_queue<int> a;int main(){scanf("%d",&n);while (n!=0){while (!q.empty()) q.pop();for (int i=1;i<=n;i++){int x;scanf("%d",&x);q.push(x);}scanf("%d",&m);ans=0;while (!a.empty()) a.pop();while (q.size()>=m){for (int i=1;i<=m;i++){a.push(-q.top());q.pop();}if (!q.empty()) d=(-a.top()-q.top()+5); else d=-a.top();if (d<0-a.top()) ans+=d; else d=-a.top(),ans+=d;for (int i=1;i<=m;i++){if (-a.top()-d>0) q.push(-a.top()-d);a.pop();}}printf("%d\n",ans);scanf("%d",&n);}
}

2 聚会

Tzdin想组织一个圣诞晚会。N位女士和M位男士(M>=N)会被邀请参加这个聚会。在聚会的开始,Tzdin会派发一些写着某位男士信息的卡片给每位女士;每位女士都会收到若干张这种卡片。然后每位女士可以从她收到的卡片里挑选一位男士作为她的伴侣。我们可以认为经过Tzdin的引导,每位女士都一定可以挑选到一位男士作为他的伴侣,而每位男士最多成为1位女士的伴侣。Tzdin想知道的是,有哪些男士,无论女士们怎么选择,最终都一定会拥有伴侣。

想到是匈牙利算法了呀,方法错了呗:P
应该先找出最大匹配,然后对于每个女士,让她不和在最大匹配中的那位男士匹配,如果此时她无法匹配,那么这个男士满足一定会有伴侣
毕竟最大匹配是O(n3)O(n^3)O(n3)呀

#include <cstdio>
#include <cstring>using namespace std;const int N=1001;
int n,m;
int a[1003][1003];
bool b[1003],f[1003];
int s[1003],cover[1003];
int s2[1003];bool dfs(int w){for (int i=1;i<=a[w][0];i++)if ((b[a[w][i]])&&(!cover[a[w][i]])){int l=s[a[w][i]];s[a[w][i]]=w;cover[a[w][i]]=1;if ((l==0)||(dfs(l))) return 1;s[a[w][i]]=l;      }return 0;
}bool find(){for (int i=1;i<=n;i++){memset(cover,0,sizeof cover);if (!dfs(i)) return 0; }return 1;
}int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){scanf("%d",&a[i][0]);for (int j=1;j<=a[i][0];j++)scanf("%d",&a[i][j]);}memset(b,1,sizeof b);memset(f,0,sizeof f);find();for (int i=1;i<=m;i++){b[i]=0;memset(cover,0,sizeof cover);memcpy(s2,s,sizeof s2);if ((s[i]!=0)&&(!dfs(s[i]))) f[i]=1;b[i]=1;memcpy(s,s2,sizeof s);}for (int i=1;i<=m;i++)if (f[i])printf("%d\n",i);
}

3 辽哥游戏

张辽是一个长发飘飘的非常聪明的男孩,人人都称他为“辽哥”。辽哥喜欢玩一个有趣的电脑游戏。这个游戏开始的时候有n个碉堡,每个碉堡拥有一个防御值和一个附加值。玩家拥有一个初始的攻击力。如果玩家破坏了一个碉堡,则他能得到1分。每一次,辽哥会选择一个碉堡进行攻击。所有未被破坏的碉堡会联合起来防御,因此为了破坏那个碉堡,辽哥的攻击力必须大于或者等于所有未被破坏的碉堡的防御值之和,否则辽哥就会输掉游戏。如果辽哥成功破坏了那个碉堡,那么他的攻击力会变成那个碉堡的附加值,然后他可以选择下一个攻击的目标。

由于辽哥拥有强大的编程能力,他不费吹灰之力就改写了那个游戏。在游戏开始前,他可以用炸弹消灭任意的碉堡,但是他不能通过这种方式来获得分数。问题来了,在游戏开始后,辽哥可以得到的最大分数是多少?

据闻是贪心加DP
炸掉碉堡就是不选择这些碉堡
设f[i]是剩下i个碉堡时所有碉堡最小的防御值
如果从前往后进行游戏很麻烦,所以
f[i]=min(f[i],f[i-1]+a[j]) {b[j]>=f[i-1]}
即这时还有i-1个碉堡,要选择上一个被炸的碉堡;这个被炸的碉堡,需要
防御值在可选的碉堡中最小
附加值大于已选的所有碉堡

排序就是按照a[i]+b[i]排序

#include <cstdio>
#include <algorithm>
#include <cstring>using namespace std;int n,l,r,ans,s;
struct node{int f,g;
}a[1003];
int f[1003];bool comp(node a,node b){return a.f+a.g>b.f+b.g;
}int main(){while (~scanf("%d",&n)){memset(a,0,sizeof a);for (int i=1;i<=n;i++)scanf("%d%d",&a[i].f,&a[i].g);scanf("%d",&s);sort(a+1,a+1+n,comp);memset(f,0x3f,sizeof f);f[0]=0;for (int i=n;i;i--){for (int j=n;j;j--)if (a[i].g>f[j-1])f[j]=min(f[j],f[j-1]+a[i].f);}l=0,r=n;while (l<=r){int mid=(l+r)/2;if (f[mid]<=s) ans=mid,l=mid+1;else r=mid-1;}printf("%d\n",ans);}
}

立阳二中、清华医学系谢俞

“我是谢俞。还有,我不涂黑指甲油”

2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP相关推荐

  1. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点

    Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...

  2. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  3. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  4. 《惢客创业日记》2019.04.20(周六)对于慈善原罪的思考

    今天是周六,很大一部分时间都放在整理创业日记上,不过,还是挤出一些时间规划了一下惢客慈善.今天分享一个对于慈善原罪的一个重要思考,当然也是一个解决方案,不过,听完我接下来的分享后,可能,会觉得我的想法 ...

  5. 2019.08.15【NOIP提高组】模拟 A 组

    解题报告 JZOJ 6296 投票 题目 分析 代码 JZOJ 6294 动态数点 题目 分析 代码 JZOJ 6303 演员 题目 分析 代码 JZOJ 6296 投票 题目 分析 根据贪心从小到大 ...

  6. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  7. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  8. {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C

    2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...

  9. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

最新文章

  1. 【转】[退役]纪念我的ACM——headacher@XDU
  2. Hbase shell详情
  3. 我的世界minecraft-Python3.9编程(1)-开发环境配置(1)
  4. BOOST_TEST_TRAIT_SAME的用法实例
  5. VTK:Rendering之InterpolateCamera
  6. python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境
  7. java简单文本编译器_java -简易文本编辑器
  8. STM32学习:外部中断
  9. 82.反向代理与负载均衡原理
  10. JavaFX Dialogs (官方支持)
  11. java接口之双端队列
  12. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理
  13. 鼠标宏会不会封号_每天一个英雄联盟封号技巧:峡谷先锋可以连续撞塔两次,你会吗?...
  14. C# 访问 带密码的access数据库
  15. php公众号模板在哪,微信公众号页面模板在哪里设置的?微信公众号页面模板怎么设置?...
  16. 数据结构,持续更新!!!
  17. 计算机酷睿处理器排行,2018电脑英特尔处理器排名(cpu性能天梯图)
  18. 斗图?教你用 Python 制作表情包
  19. python 批量处理图片文件(做到图片不变形)
  20. 详细代码注释1148: 组合三位数之一

热门文章

  1. 8月5号 图论,拓扑排序入门
  2. “数字赋能、政务瘦身”,烽火助力疫情下“数字政府”改革提速
  3. 引起进程调度的原因有以下几类
  4. 【51NOD 1585】买邮票送邮票
  5. 那些年,我们一起写过的代码
  6. 2017.11月8复习总结
  7. 网上流传的手机日入百元的方法
  8. 常用转接IC,转接芯片整理汇总
  9. SpotlessCity:第一个干洗服务网站 反映纽约人有多懒
  10. 一个例题:浮动引起元素变成行内块元素-display:inline-block