NC235611 牛牛国的战争

题目链接

关键点

1、因为要在能击败所有敌军的基础下,求存活最多的数量,那么我们可以对敌军的防御力从大到小排列,对于友军的攻击力从大到小排列,这样遍历一次敌军,将所有可以击败该敌军的友军防御力存入multiset,因为防御力可能会重复

2、对于多个可以击败敌军的友军,我们挑选那个刚刚好可以击败敌军且存活的,如果没有,那么横竖都为失去一个友军,干脆失去那个防御力最低的

3、对于存活的计算,我们再选择友军时,可能所有的友军不会都加入set中,因此最后要加上,同样的set里的所有元素不一定都会上场,也得加上

完整代码

# include <cstdio>
# include <iostream>
# include <set>
# include <algorithm>
using namespace std;
const int N = 100000+10;
int t, n, m;
multiset<int>s;
struct fri{int g, f;
}f[N];
struct di{int g, f;
}d[N];
bool cmp1(fri f1, fri f2)
{return f1.g>f2.g;
}
bool cmp2(di d1, di d2)
{return d1.f>d2.f;
}
int main()
{cin>>t;for (int k=1; k<=t; k++){s.clear();cin>>n>>m;for (int i=1; i<=n; i++){cin>>f[i].g>>f[i].f;}for (int i=1; i<=m; i++)cin>>d[i].g>>d[i].f;sort(f+1, f+1+n, cmp1);sort(d+1, d+1+m, cmp2);int pos = 1, ans = 0, flag = 0;for (int i=1; i<=m; i++){while (f[pos].g>=d[i].f && pos<=n){
//                 cout<<f[pos].g<<" "<<d[i].f<<endl;s.insert(f[pos].f);pos++;}if (s.size()==0){flag = 1;cout<<"Case #"<<k<<": -1"<<endl;break;}auto it = s.upper_bound(d[i].g);if (it!=s.end()){ans++;s.erase(it);}else{s.erase(s.begin());}
//             cout<<s.size()<<endl;}
//         cout<<ans<<" "<<s.size()<<" "<<pos<<endl;if (!flag)cout<<"Case #"<<k<<": "<<ans+s.size()+n+1-pos<<endl;}return 0;
}

NC23803 DongDong认亲戚

题目链接

关键点:

1、利用map来使名字对应数字,然后直接上并查集

完整代码

# include <cstdio>
# include <iostream>
# include <map>
using namespace std;
const int N = 200000+10;
int n, m;
int fa[N];
map<string, int>mp;
int find(int x)
{return (x==fa[x])? x: fa[x] = find(fa[x]);
}
void unite(int x, int y)
{fa[find(x)] = find(y);
}
int main()
{for (int i=0; i<N; i++)fa[i] = i;cin>>n>>m;for (int i=1; i<=n; i++){string s;cin>>s;mp[s] = i;}for (int i=1; i<=m; i++){int x;string a, b;cin>>x>>a>>b;if (x==2){int f1 = find(mp[a]), f2 = find(mp[b]);if (f1==f2)cout<<"1"<<endl;elsecout<<"0"<<endl;}elseunite(mp[a], mp[b]);}return 0;
}

NC235622 叠积木

题目链接

关键点:

1、我们用一个fa数组存每个积木的父亲(设为该积木的最底下的积木),一个d数组存每个积木到最底下有多少个积木,一个cnt数组存该积木一共有多少(下标为最底下的积木)

2、对于每一次的搭建,比如从x->y,先找到x的父亲fx,y的父亲fy,判断不相等后将

fa[fx] = fy,d[fx] = cnt[fy](当前x父亲(即x最底下的积木距离此时的父亲结点(fy)的距离为y积木的数量)), cnt[fy]+=cnt[fx](y积木的数量加上x积木的数量)

3、对于find,除了fa[x] = find(fa[x]);还有d[x] += d[fa[x]],不断更新该积木与父亲的距离

完整代码

# include <iostream>
# include <cstdio>
using namespace std;
const int N = 30000+10;
int n;
int fa[N], d[N], cnt[N];
int find(int x)
{if (fa[x]!=x){int t = find(fa[x]);d[x] += d[fa[x]];fa[x] = t;}return fa[x];
}
void unite(int x, int y)
{int f1 = find(x), f2 = find(y);if (f1!=f2){fa[f1] = f2;d[f1] = cnt[f2];cnt[f2] += cnt[f1];}
}
int main()
{cin>>n;for (int i=1; i<=N; i++){fa[i] = i;d[i] = 0;cnt[i] = 1;}for (int i=1; i<=n; i++){char c;cin>>c;if (c=='M'){int x, y;cin>>x>>y;unite(x, y);}else{int x;cin>>x;find(x);cout<<d[x]<<endl;}}return 0;
}

刷题记录(NC235611 牛牛国的战争,NC23803 DongDong认亲戚,NC235622 叠积木)相关推荐

  1. 【刷题记录①】Java从0到1入门|基础知识巩固练习

    JAVA从0到1入门刷题记录 目录 一.类型转换 二.简单运算 三.四舍五入 四.交换变量值 五.计算商场折扣 六.判断体重指数 总结 我几乎每天都会刷题训练来使自己对各种算法随时保持一个清晰的状态. ...

  2. 重走长征路---OI每周刷题记录---6月14日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  3. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  4. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  5. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

  6. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)

    LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...

  7. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  8. LeetCode刷题记录10——434. Number of Segments in a String(easy)

    LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...

  9. LeetCode刷题记录9——58. Length of Last Word(easy)

    LeetCode刷题记录9--58. Length of Last Word(easy) 目录 LeetCode刷题记录9--58. Length of Last Word(easy) 题目 语言 思 ...

最新文章

  1. android上传图片崩溃,导致安卓手机死机的照片拍摄者表示这张照片是无意之举...
  2. 【Kaidi安装问题】install_mkl.sh报错,没有数字签名
  3. 微软职位内部推荐-Senior SDE
  4. java设计模式---职责链模式
  5. wincc服务器系统,什么情况下用wincc服务器与客户端
  6. Linux常用命令大全(持续更新)
  7. php mysql网站统计源码_php统计器代码(在线人数据统计程序源码)
  8. 计算机网络常用术语WWW,计算机网络常用术语
  9. Silverlight Blend动画设计系列二:旋转动画(RotateTransform)
  10. Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
  11. mac使用nvm安装node进行多版本管理
  12. 5G+折叠屏:华为Mate Xs打造多项创新体验
  13. 腾讯软件测试笔试题西安,腾讯软件测试笔试题题库
  14. html表白代码大全可复制,浪漫的html表白特效网页制作源
  15. Ubuntu如何清理系统垃圾
  16. 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:1.工厂模式概念
  17. 手速最快的是电竞选手?错了,是程序员
  18. 深度学习与自然语言处理实验——中文信息熵的计算
  19. linux 下 android手机驱动解决办法
  20. 计算机无法打开声音,驱动正常但是电脑没声音怎么办-电脑自学网

热门文章

  1. 深度学习是表示学习的经典代表(浅谈什么是深度学习)
  2. 看《李开复先生谈创新思维》
  3. QT应用编程: 域名解析(域名转IP)
  4. appnode怎么样_Linux面板AppNode免费开放使用,你还在用宝塔吗? - 立金哥
  5. 18. Redis 管理命令-查看服务器状态
  6. 名字作诗,让你的名片更具有趣味性和个性化
  7. “社畜”群体的崛起带来了哪些营销新契机?
  8. python中num函数是什么意思_如何理解python3函数中num的用法?
  9. 取消自动续费服务的步骤
  10. XBOX GAMEPASS取消自动续费