2016 Multi-University Training Contest 7
6/12
2016 Multi-University Training Contest 7
期望 B Balls and Boxes(BH)
题意:
n个球放到m个盒子里,xi表示第i个盒子里的球的数量,求V的期望值。
思路:
官方题解:
代码:
- #include <bits/stdc++.h>
- typedef long long ll;
- ll GCD(ll a, ll b) {
- return b ? GCD (b, a % b) : a;
- }
- int main() {
- ll n, m;
- while (scanf ("%I64d%I64d", &n, &m) == 2 && n + m) {
- ll x = n * (m - 1);
- ll y = m * m;
- ll gcd = GCD (x, y);
- printf ("%I64d/%I64d\n", x / gcd, y / gcd);
- }
- return 0;
- }
图论 E Elegant Construction(BH)
题意:
构造一张图,使得第i个点恰好能走到a[i]个点。
思路:
显然从a[i]=0的点开始,a[i]大的点一定会连向少的点,类似拓扑排序的做法。时间复杂度O(n^2)。
代码:
- #include <bits/stdc++.h>
- const int N = 1e3 + 5;
- int n;
- struct Edge {
- int u, v;
- };
- std::vector<Edge> edges;
- struct Node {
- int v, id;
- bool operator < (const Node &rhs) const {
- return v < rhs.v;
- }
- }a[N];
- bool vis[N];
- int solve() {
- std::sort (a+1, a+1+n);
- edges.clear ();
- memset (vis, false, sizeof (vis));
- for (int i=1; i<=n; ++i) {
- if (a[i].v != 0) return -1;
- vis[a[i].id] = true;
- for (int j=1; j<=n; ++j) {
- if (vis[a[j].id]) continue;
- if (a[j].v == 0) continue;
- edges.push_back ({a[j].id, a[i].id});
- a[j].v--;
- }
- }
- return (int) edges.size ();
- }
- int main() {
- int T;
- scanf ("%d", &T);
- for (int cas=1; cas<=T; ++cas) {
- scanf ("%d", &n);
- for (int i=1; i<=n; ++i) {
- scanf ("%d", &a[i].v);
- a[i].id = i;
- }
- int m = solve ();
- printf ("Case #%d: %s\n", cas, m != -1 ? "Yes" : "No");
- if (m != -1) {
- printf ("%d\n", m);
- for (int i=0; i<m; ++i) {
- printf ("%d %d\n", edges[i].u, edges[i].v);
- }
- }
- }
- return 0;
- }
优先队列+优化 J Joint Stacks(BH)
题意:
两个栈,A和B,三种操作:入栈,出栈,以及A,B按照入栈时间合并,输出每次出栈的数字。
思路:
可以用优先队列来模拟栈操作,合并的话就是按照时间排序后合并,时间复杂度应该是O(nlogn)(应该还要大),结果超时了。后来试过用并查集乱搞可是写搓了,一度想弃疗。。。后来再回到原来的做法,加了一个优化(队列小的合并到大的),就AC了!(也就是想到了并查集按秩合并的思想)
当然巧妙的做法还是官方的三个栈。
代码:
优先队列
- #include <bits/stdc++.h>
- const int N = 1e5 + 5;
- int n;
- struct Node {
- int x, t;
- bool operator < (const Node &rhs) const {
- return t < rhs.t;
- }
- };
- std::priority_queue<Node> pque[2];
- int real[2];
- void merge(int id1, int id2) {
- if (pque[id2].size () > pque[id1].size ()) {
- std::swap (id1, id2);
- std::swap (real[0], real[1]);
- }
- while (!pque[id2].empty ()) {
- pque[id1].push (pque[id2].top ());
- pque[id2].pop ();
- }
- }
- int main() {
- int cas = 0;
- while (scanf ("%d", &n) == 1 && n) {
- printf ("Case #%d:\n", ++cas);
- char op[10], C[2], D[2];
- for (int i=0; i<2; ++i) {
- while (!pque[i].empty ()) pque[i].pop ();
- }
- real[0] = 0; real[1] = 1;
- for (int i=1; i<=n; ++i) {
- scanf ("%s", op);
- if (op[0] == 'p') {
- scanf ("%s", C);
- int id = C[0] - 'A';
- id = real[id];
- if (op[1] == 'u') {
- int x;
- scanf ("%d", &x);
- pque[id].push ({x, i});
- } else {
- printf ("%d\n", pque[id].top ().x);
- pque[id].pop ();
- }
- } else {
- scanf ("%s%s", C, D);
- int id1 = C[0] - 'A';
- int id2 = D[0] - 'A';
- merge (real[id1], real[id2]);
- }
- }
- }
- return 0;
- }
O(n)
- void work()
- {
- top[0] = top[1] = top[2] = 0;
- for (int i = 0; i < n; ++i) {
- char op[10], s[5];
- scanf("%s%s", op, s);
- int a = s[0] - 'A';
- if (op[1] == 'u') {
- scanf("%d", &x[i]);
- sta[a][top[a]++] = i;
- } else if (op[1] == 'o') {
- if (!top[a]) a = 2;
- printf("%d\n", x[sta[a][--top[a]]]);
- } else {
- scanf("%s", s);
- top[2] = merge(sta[0], sta[0] + top[0],
- sta[1], sta[1] + top[1],
- sta[2] + top[2]) - sta[2];
- top[0] = top[1] = 0;
- }
- }
- }
2016 Multi-University Training Contest 7的更多相关文章
- 2016 Al-Baath University Training Camp Contest-1
2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...
- 2016 Al-Baath University Training Camp Contest-1 E
Description ACM-SCPC-2017 is approaching every university is trying to do its best in order to be th ...
- 2016 Al-Baath University Training Camp Contest-1 A
Description Tourist likes competitive programming and he has his own Codeforces account. He particip ...
- 2016 Al-Baath University Training Camp Contest-1 J
Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...
- 2016 Al-Baath University Training Camp Contest-1 I
Description It is raining again! Youssef really forgot that there is a chance of rain in March, so h ...
- 2016 Al-Baath University Training Camp Contest-1 H
Description You've possibly heard about 'The Endless River'. However, if not, we are introducing it ...
- 2016 Al-Baath University Training Camp Contest-1 G
Description The forces of evil are about to disappear since our hero is now on top on the tower of e ...
- 2016 Al-Baath University Training Camp Contest-1 F
Description Zaid has two words, a of length between 4 and 1000 and b of length 4 exactly. The word a ...
- 2016 Al-Baath University Training Camp Contest-1 D
Description X is well known artist, no one knows the secrete behind the beautiful paintings of X exc ...
- 2016 Al-Baath University Training Camp Contest-1 C
Description Rami went back from school and he had an easy homework about bitwise operations (and,or, ...
随机推荐
- 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解
我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...
- Linux下安装配置MongoDB 3.0.x 版本数据库
说明: 操作系统:CentOS 5.X 64位 IP地址:192.168.21.128 实现目的: 安装配置MongoDB数据库 具体操作: 一.关闭SElinux.配置防火墙 1.vi /etc/s ...
- 《OpenCV入门》(三)
这部分主要讲形态学的,回头把代码跑跑再来说下代码的感受:http://blog.csdn.net/poem_qianmo/article/details/24599073
- FOJ 1205
Problem 1205 小鼠迷宫问题 Accept: 522 Submit: 1679 Time Limit: 1000 mSec Memory Limit : 32768 KB Pro ...
- 中位数与第K小元素
算法实际上是模仿快速排序算法设计出来的,其基本思想也是对输入数组进行递归划分,与快速排序不同的是,它只对划分出来的子数组之一进行递归处理: int randompartition(int a[],in ...
- Spring事务传播、隔离等级
事务传播 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.这是最常见的选择. PROPAGATION_SUPPORTS 支持当前事 ...
- Java字符串split函数的注意事项
Java字符串的split方法可以分割字符串,但和其他语言不太一样,split方法的参数不是单个字符,而是正则表达式,如果输入了竖线(|)这样的字符作为分割字符串,会出现意想不到的结果, 如, Str ...
- localResizeIMG
http://think2011.net/localResizeIMG/test/ 演示一下 自己试试 点我直接进入演示页面 说明 在客户端压缩好要上传的图片可以节省带宽更快的发送给后端,特别适合在移 ...
- 新浪网易淘宝等IP地区信息查询开放API接口调用方法
通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...
- Dan计划:重新定义人生的10000个小时
一. 1985年,芝加哥大学的Benjamin Bloom教授,出版了一本重要著作<如何培养天才>(Developing Talent in Young People). 他研究的是,如何 ...