Practice

sort

给定一系列形如 \(A<B\) 的不等关系,判断前 \(k\) 个不等关系是否即可确定 \(n\) 个元素之间的大小顺序;如果不可确定,判断前 \(k\) 个不等关系是否即存在矛盾。

例如:

  1. [input 1]
  2. 4 6
  3. A<B
  4. A<C
  5. B<C
  6. C<D
  7. B<D
  8. A<B
  9. [output 1]
  10. Sorted sequence determined after 4 relations: ABCD.
  11. [input 2]
  12. 3 2
  13. A<B
  14. B<A
  15. [output 2]
  16. Inconsistency found after 2 relations.
  17. [input 3]
  18. 26 1
  19. A<Z
  20. [output 3]
  21. Sorted sequence cannot be determined.

利用拓扑序判断:

当没有点入度为 0,或当最终入队的点的个数 \(< n\) 时,不等关系存在矛盾。

当有不止一个点入度为 0,或当取同一个队首 \(u\) 时有不止一个 \(v\) 的入度变为 0 时,不等关系不足以推定所有元素顺序。

否则,拓扑序即为元素顺序。

总的来说,思路须要理清才能完整无误地写出程序。

  1. /* P1347 排序
  2. * Au: GG
  3. */
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <algorithm>
  7. #include <queue>
  8. using namespace std;
  9. int n, m, ans, t;
  10. char buf[6], lst[30];
  11. int head[30], nex[900], to[900], d[30], du[30];
  12. inline void add(int x, int y) {
  13. nex[++head[0]]=head[x], head[x]=head[0], to[head[0]]=y;
  14. ++du[y];
  15. }
  16. inline int toposort() {
  17. memcpy(d, du, sizeof du);
  18. memset(lst, 0, sizeof lst);
  19. queue<int> q;
  20. int p=0, pp=0, cnt=0, res=0;
  21. for (int i=1; i<=n; i++) if (!d[i]) q.push(i), ++p;
  22. if (p>1) res=2;
  23. while (!q.empty()) {
  24. int now=q.front(); q.pop(); pp=0, ++cnt, lst[++lst[0]]='A'+now-1;
  25. for (int k=head[now]; k; k=nex[k]) {
  26. if (--d[to[k]]==0) {
  27. q.push(to[k]);
  28. if (pp++) res=2;
  29. }
  30. }
  31. }
  32. if (cnt<n) return 1;
  33. return res;
  34. }
  35. int main() {
  36. scanf("%d%d", &n, &m);
  37. for (int i=1; i<=m; i++) {
  38. scanf("%s", buf), add(buf[0]-'A'+1, buf[2]-'A'+1);
  39. ans=toposort();
  40. if (ans<2) {t=i; break; }
  41. }
  42. if (!ans) printf("Sorted sequence determined after %d relations: %s.\n", t, lst+1);
  43. else if (ans<2) printf("Inconsistency found after %d relations.\n", t);
  44. else printf("Sorted sequence cannot be determined.\n");
  45. return 0;
  46. }

[POI2012] HUR-Warehouse Store

\(n\) 天。第 \(i\) 天上午会进货 \(A_i\) 件商品,中午的时候会有顾客需要购买 \(B_i\) 件商品,可以选择满足顾客的要求,或是无视掉他。如果要满足顾客的需求,就必须要有足够的库存。问最多能够满足多少个顾客的需求。

贪心。思路不难。

注意 priority_queue 默认为大根堆,所以实现大根要定义小于关系,实现小根要定义大于关系。(被坑了)

  1. /* [POI2012]HUR-Warehouse Store
  2. * Au: GG
  3. */
  4. #include <cstdio>
  5. #include <algorithm>
  6. #include <queue>
  7. using namespace std;
  8. #define ll long long
  9. int n, a[250003], b[250003], ans, cnt;
  10. ll tot;
  11. struct node {
  12. int id, val;
  13. bool operator < (const node& A) const {return val<A.val; }
  14. };
  15. priority_queue<node> q;
  16. int main() {
  17. scanf("%d", &n);
  18. for (int i=1; i<=n; i++) scanf("%d", &a[i]);
  19. for (int i=1; i<=n; i++) scanf("%d", &b[i]);
  20. for (int i=1; i<=n; i++) {
  21. tot+=a[i];
  22. if (tot>=b[i]) tot-=b[i], ++ans, q.push((node) {i, b[i]});
  23. else if (!q.empty() && q.top().val>b[i]) tot+=q.top().val-b[i], q.pop(), q.push((node) {i, b[i]});
  24. }
  25. printf("%d\n", ans);
  26. while (!q.empty()) a[++cnt]=q.top().id, q.pop();
  27. sort(a+1, a+cnt+1);
  28. for (int i=1; i<=cnt; i++) printf("%d ", a[i]);
  29. return 0;
  30. }

password

给定三个数 \(n\)、\(a\)、\(b\),\(x\)、\(y\) 满足下面的一些条件:

  1. $x \operatorname{and} y=y $;
  2. \((ax+by) \operatorname{xor} (ay+bx)\) 最大;
  3. \(1\le x,y\le n\)。

求 \(x\) 和 \(y\)。其中:and 表示按位与,xor 表示按位异或。

显然,二进制下 \(y\subseteq x\)。所以只需要枚举 \(x\),\(y\) 用生成子集的方法(如下)。

  1. for (int x=1; x<=n; x++)
  2. for (int y=x; y; y=(y-1)&x) { // 生成子集(不包括空集)
  3. calc=(a*y+b*x)^(a*x+b*y);
  4. if (calc>ans) ans=calc, ax=x, ay=y;
  5. }

最大边权最小的最短路

图 \(G=(V,E)\) 是无向图,每条边 \(E_i\) 有一个边权 \(W_i\)。 要求以起点为 \(s\),终点为 \(t\),寻找一条路径,使路径上最大的边权 \(W_\max\) 最小。

Floyd 算法,状态转移方程改为:

\[g(i,j)=\min\Big(g(i,j), \max\big(g(i,k), g(k,j)\big)\Big),i,j,k\in V
\]

23-25 October in 614的更多相关文章

  1. NYOJ-79 拦截导弹 AC 分类: NYOJ 2014-01-01 23:25 167人阅读 评论(0) 收藏

    #include<stdio.h> int main(){ int num[1000]={0}; int n,m,x,y; scanf("%d",&n); wh ...

  2. ffmpeg-201701[10,16,21,23,25]-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  3. 创建ListView的基本步骤 分类: H1_ANDROID 2013-10-31 23:25 1276人阅读 评论(0) 收藏

    参考<疯狂android讲义>第2.5节P94 1.创建一个或者多个ListView <LinearLayout xmlns:android="http://schemas ...

  4. 26 October in 614

    Practice tower 有 \(N\,(2\le N\le 600000)\) 块砖,要搭一个 \(N\) 层的塔,要求:如果砖 \(A\) 在砖 \(B\) 上面,那么 \(A\) 不能比 \ ...

  5. 22 October in 614

    Contest A. defile struct 自定义排序.按照题意抽象成模型模拟就可以了. 自定义排序核心代码: struct node { int x, id; } d[1000003]; bo ...

  6. VS运行速度缓慢卡顿 2020年1月3日23:25:35

    Java中一个类文件对应一个类 C#中一个类文件中可以包含多个类 使用visual studio2017过程中,发现启动调试时,总是会很慢,结束调试也会很慢,在这里可以通过关闭掉IntelliTrac ...

  7. 第23章 排序算法(包括merge等)

      第23章 排序算法  Sorting:1 sort Sort elements in range (function template)2 stable_sort Sort elements pr ...

  8. JavaSE_ 多线程 总目录(23~24)

    JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JV ...

  9. JavaSE学习总结第23天_多线程1

      23.01  多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02  进程概述及多进程的意义 要想说 ...

随机推荐

  1. redis连接报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...

    连接redis报错: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persis ...

  2. 软件体系结构-分层、代理、MVC、管道与过滤器

    什么是软件架构? 程序或计算系统的软件体系结构是系统的一个或多个结构,包括软件元素.这些元素的外部可见属性以及它们之间的关系. ——Software Engineering Institute(SEI ...

  3. jQuery DataTables 分页

    HTML:================================================================== <div class="ibox-con ...

  4. ELK+Filebeat (2)

    ELK+Filebeat收集多台机器不同日志 采坑:在使用了6.0版本的ELK以后,使用如上配置,if [type]匹配不到在filebeat里面使用document_type定义的字符串.在多次调试 ...

  5. js 函数 写法

    // function ckeckName(){}; // function checkUser(){}; // function checkPassWorld(){}; // var checkNa ...

  6. spring-第四篇之让bean获取所在的spring容器

    1.如上一篇文章所述,有时候bean想发布一些容器事件,就需要先获取spring容器,然后将Event交由spring容器将事件发布出去. 为了让bean获取它所在的spring容器,可以让该bean ...

  7. java_第一年_JavaWeb(9)

    JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...

  8. P4390 [BOI2007]Mokia 摩基亚

    传送门 对于一个询问 $(xa,ya),(xb,yb)$,拆成 $4$ 个询问并容斥一下 具体就是把询问变成求小于等于 $xb,yb$ 的点数,减去小于等于 $xa-1,yb$ 和小于等于 $xb,y ...

  9. 大数据-hadoop学习记录

    hadoop 创始人 DogCutting 高效,可扩展性,高容错性,价格低廉的大数据软件处理架构 主要应用于数据分析.数据实时查询.数据挖掘领域 HDFS(HadoopDistributeFileS ...

  10. 一、WebApi模型验证实践项目使用

    一.启语 前面我们说到,模型验证的原理(包含1.项目创建,2.模型创建,3.走通测试模型验证,4.在过滤器中处理返回json格式(非控制器内))-完全是新手理解使用的,新番理解 通常情况下,对于那些经 ...