23-25 October in 614
Practice
sort
给定一系列形如 \(A<B\) 的不等关系,判断前 \(k\) 个不等关系是否即可确定 \(n\) 个元素之间的大小顺序;如果不可确定,判断前 \(k\) 个不等关系是否即存在矛盾。
例如:
[input 1]
4 6
A<B
A<C
B<C
C<D
B<D
A<B [output 1]
Sorted sequence determined after 4 relations: ABCD. [input 2]
3 2
A<B
B<A [output 2]
Inconsistency found after 2 relations. [input 3]
26 1
A<Z [output 3]
Sorted sequence cannot be determined.
利用拓扑序判断:
当没有点入度为 0,或当最终入队的点的个数 \(< n\) 时,不等关系存在矛盾。
当有不止一个点入度为 0,或当取同一个队首 \(u\) 时有不止一个 \(v\) 的入度变为 0 时,不等关系不足以推定所有元素顺序。
否则,拓扑序即为元素顺序。
总的来说,思路须要理清才能完整无误地写出程序。
/* P1347 排序
* Au: GG
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int n, m, ans, t;
char buf[6], lst[30];
int head[30], nex[900], to[900], d[30], du[30];
inline void add(int x, int y) {
nex[++head[0]]=head[x], head[x]=head[0], to[head[0]]=y;
++du[y];
}
inline int toposort() {
memcpy(d, du, sizeof du);
memset(lst, 0, sizeof lst);
queue<int> q;
int p=0, pp=0, cnt=0, res=0;
for (int i=1; i<=n; i++) if (!d[i]) q.push(i), ++p;
if (p>1) res=2;
while (!q.empty()) {
int now=q.front(); q.pop(); pp=0, ++cnt, lst[++lst[0]]='A'+now-1;
for (int k=head[now]; k; k=nex[k]) {
if (--d[to[k]]==0) {
q.push(to[k]);
if (pp++) res=2;
}
}
}
if (cnt<n) return 1;
return res;
}
int main() {
scanf("%d%d", &n, &m);
for (int i=1; i<=m; i++) {
scanf("%s", buf), add(buf[0]-'A'+1, buf[2]-'A'+1);
ans=toposort();
if (ans<2) {t=i; break; }
}
if (!ans) printf("Sorted sequence determined after %d relations: %s.\n", t, lst+1);
else if (ans<2) printf("Inconsistency found after %d relations.\n", t);
else printf("Sorted sequence cannot be determined.\n");
return 0;
}
[POI2012] HUR-Warehouse Store
\(n\) 天。第 \(i\) 天上午会进货 \(A_i\) 件商品,中午的时候会有顾客需要购买 \(B_i\) 件商品,可以选择满足顾客的要求,或是无视掉他。如果要满足顾客的需求,就必须要有足够的库存。问最多能够满足多少个顾客的需求。
贪心。思路不难。
注意 priority_queue
默认为大根堆,所以实现大根要定义小于关系,实现小根要定义大于关系。(被坑了)
/* [POI2012]HUR-Warehouse Store
* Au: GG
*/
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
int n, a[250003], b[250003], ans, cnt;
ll tot;
struct node {
int id, val;
bool operator < (const node& A) const {return val<A.val; }
};
priority_queue<node> q;
int main() {
scanf("%d", &n);
for (int i=1; i<=n; i++) scanf("%d", &a[i]);
for (int i=1; i<=n; i++) scanf("%d", &b[i]);
for (int i=1; i<=n; i++) {
tot+=a[i];
if (tot>=b[i]) tot-=b[i], ++ans, q.push((node) {i, b[i]});
else if (!q.empty() && q.top().val>b[i]) tot+=q.top().val-b[i], q.pop(), q.push((node) {i, b[i]});
}
printf("%d\n", ans);
while (!q.empty()) a[++cnt]=q.top().id, q.pop();
sort(a+1, a+cnt+1);
for (int i=1; i<=cnt; i++) printf("%d ", a[i]);
return 0;
}
password
给定三个数 \(n\)、\(a\)、\(b\),\(x\)、\(y\) 满足下面的一些条件:
- $x \operatorname{and} y=y $;
- \((ax+by) \operatorname{xor} (ay+bx)\) 最大;
- \(1\le x,y\le n\)。
求 \(x\) 和 \(y\)。其中:and 表示按位与,xor 表示按位异或。
显然,二进制下 \(y\subseteq x\)。所以只需要枚举 \(x\),\(y\) 用生成子集的方法(如下)。
for (int x=1; x<=n; x++)
for (int y=x; y; y=(y-1)&x) { // 生成子集(不包括空集)
calc=(a*y+b*x)^(a*x+b*y);
if (calc>ans) ans=calc, ax=x, ay=y;
}
最大边权最小的最短路
图 \(G=(V,E)\) 是无向图,每条边 \(E_i\) 有一个边权 \(W_i\)。 要求以起点为 \(s\),终点为 \(t\),寻找一条路径,使路径上最大的边权 \(W_\max\) 最小。
Floyd 算法,状态转移方程改为:
\]
23-25 October in 614的更多相关文章
- 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 ...
- 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 ...
- 创建ListView的基本步骤 分类: H1_ANDROID 2013-10-31 23:25 1276人阅读 评论(0) 收藏
参考<疯狂android讲义>第2.5节P94 1.创建一个或者多个ListView <LinearLayout xmlns:android="http://schemas ...
- 26 October in 614
Practice tower 有 \(N\,(2\le N\le 600000)\) 块砖,要搭一个 \(N\) 层的塔,要求:如果砖 \(A\) 在砖 \(B\) 上面,那么 \(A\) 不能比 \ ...
- 22 October in 614
Contest A. defile struct 自定义排序.按照题意抽象成模型模拟就可以了. 自定义排序核心代码: struct node { int x, id; } d[1000003]; bo ...
- VS运行速度缓慢卡顿 2020年1月3日23:25:35
Java中一个类文件对应一个类 C#中一个类文件中可以包含多个类 使用visual studio2017过程中,发现启动调试时,总是会很慢,结束调试也会很慢,在这里可以通过关闭掉IntelliTrac ...
- 第23章 排序算法(包括merge等)
第23章 排序算法 Sorting:1 sort Sort elements in range (function template)2 stable_sort Sort elements pr ...
- JavaSE_ 多线程 总目录(23~24)
JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JV ...
- JavaSE学习总结第23天_多线程1
23.01 多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02 进程概述及多进程的意义 要想说 ...
随机推荐
- koa2 源码解读 application
koa2的源码比较简单,重点解读aplication, 其中context源码比较简单,主要是一些error cookies等,重点可以关注下delegate,delegate模块中,主要通过prot ...
- PHP 开启错误显示并设置错误报告级别
警告:生产环境永远都不要显示任何错误信息! 显示错误(display_errors)和错误报告(error_reporting)是两回事.PHP 脚本发生错误时,可以根据设置选择是否报告这个错误(记录 ...
- mysqladmin - 管理 MySQL 服务器、获取运行状态
官方文档 mysqladmin 是管理 MySQL 服务器的客户端,可以用来检测服务器的配置和当前状态.创建和删除数据库等. 1. mysqladmin 的调用语法 shell> mysqlad ...
- hexo博客yilia主题深度设置
转载:Shuyan http://dongshuyan.com/2019/05/24/hexo博客注意事项/ 1.微信分享异常 这里是themes\yilia\layout\ _partial\pos ...
- CentOS利用Lua访问Redis
首先确保你编译的Lua是支持链接外部动态链接库的.因为在对Redis进行访问时是需要使用socket通信的, 而这依赖于外部的C语言写的动态连接库. 首先,这里先下载Redis的Lua客户端访问包re ...
- each of which 用法
each of which 在以下為 同位語,非關代. 1. An urn contains two balls, each of which is known to be either white ...
- P2324 [SCOI2005]骑士精神(A*)
P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...
- 【转】通俗理解Java序列化与反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- 攻防世界--csaw2013reversing2
测试文件:https://adworld.xctf.org.cn/media/task/attachments/3f35642056324371b913687e770e97e6.exe 1.准备 打开 ...
- 录制rtsp音视频
1.使用ffmpeg来录制rtsp视频 视频 ffmpeg -y -i rtsp://172.16.23.66:554/h264major -vcodec copy -f mp4 record.mp4 ...