15年-ICPC长春-网络赛
ID | name | status | one word |
POJ 5437 | Alisha’s Party | 赛后AC、 | 优先队列,模拟。对时间t排序 |
POJ 5438 | Ponds | 赛后AC | 循环链表 |
POJ 5439 | Aggregated Counting | ||
POJ 5440 | Clock Adjusting | ||
POJ 5441 | Travel | 赛后AC | 并查集+离线化。注音可以休息、 |
POJ 5442 | Favorite Donut | ||
POJ 5443 | The Water Problem | 题如其名,水题。 | ..........就是水。 |
POJ 5444 | Elven Postman | 赛后AC | 二叉树建和遍历。 |
POJ 5445 | Food Problem | ||
POJ 5446 | Unknown Treasure | ||
POJ 5447 | Good Numbers | ||
POJ 5448 | Marisa’s Cake | ||
POJ 5449 | Robot Dog |
很多题就是想不到思路。其实是可以做的。第一场只过了1道。。。。。。。。。人艰不拆。。。。。。
poj 5437
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- #include <algorithm>
- #include <queue>
- using namespace std;
- struct Node {
- char name[];
- int val;
- int t;
- bool operator < (const Node &a) const {
- if (a.val != val)
- return a.val > val;
- else return a.t < t;
- }
- }node[];
- struct Open {
- int t, per;
- }open[];
- bool cmp(Open a, Open b) {
- return a.t < b.t;
- }
- Node rem[];
- priority_queue<Node>que;
- int main() {
- int k, m, q;
- int t;
- scanf("%d", &t);
- while (t--) {
- memset(open, , sizeof(open));
- memset(rem, , sizeof(rem));
- scanf("%d%d%d", &k, &m, &q);
- for (int i=; i<k; ++i) {
- scanf("%s%d", node[i].name, &node[i].val);
- node[i].t = i;
- }
- for (int i=; i<m; ++i) {
- scanf("%d%d", &open[i].t, &open[i].per);
- }
- while (!que.empty()) {
- que.pop();
- }
- sort(open, open+m, cmp);
- int cnt = ;
- int t = ;
- for (int i=; i<m; ++i) {
- if (t < open[i].t) {
- for (int j=t; j < open[i].t; ++j) {
- que.push(node[j]);
- }
- t = open[i].t;
- }
- int num = ;
- while(num < open[i].per && !que.empty() && cnt < k) {
- rem[cnt++] = que.top();
- num++;
- que.pop();
- }
- }
- if (open[m-].t < k) {
- for (int i=open[m-].t; i<k; ++i) {
- que.push(node[i]);
- }
- }
- while(!que.empty() && cnt < k) {
- rem[cnt++] = que.top();
- que.pop();
- }
- int a;
- for (int i=; i<q; ++i) {
- scanf("%d", &a);
- if (i == )
- printf("%s", rem[a-].name);
- else printf(" %s", rem[a-].name);
- }
- printf("\n");
- }
- return ;
- }
poj 5438
- #include <queue>
- #include <stdio.h>
- #include <iostream>
- #include <algorithm>
- #include <string.h>
- using namespace std;
- #define maxn 100000+50 // 边的个数
- #define maxm 10000+50 // 节点个数
- int t, p, m, a, b;
- int val[maxm];
- int head[maxm];
- int deg[maxm];
- bool vis[maxm];
- long long ans, temp;
- int num;
- struct Edge {
- int v, next;
- }edge[maxn];
- int totEdge;
- queue<int>que;
- void addEdge(int a, int b) {
- edge[totEdge].v = b;
- edge[totEdge].next = head[a];
- head[a] = totEdge++;
- }
- void init() {
- memset(head, -, sizeof(head));
- memset(edge, , sizeof(edge));
- memset(val, , sizeof(val));
- memset(vis, , sizeof(vis));
- memset(deg, , sizeof(deg));
- totEdge = ;
- ans = ;
- while(!que.empty())
- que.pop();
- }
- void topSort() {
- for (int i=; i<=p; ++i) {
- if (deg[i] == )
- vis[i] = true;
- if (deg[i] == ) {
- vis[i] = true;
- que.push(i);
- }
- }
- while(!que.empty()) {
- int top = que.front();
- //cout << top << "===\n";
- que.pop();
- for (int i=head[top]; i!=-; i=edge[i].next) {
- int v = edge[i].v;
- //cout << v << "----\n";
- deg[v]--;
- if (!vis[v]) {
- if (deg[v] == )
- vis[v] = true;
- else if (deg[v] == ) {
- vis[v] = true;
- que.push(v);
- }
- }
- }
- //cout << "***\n";
- }
- }
- void Dfs(int u, int fa) {
- // cout << val[u] << "===" << u << endl;;
- num += ;
- temp += val[u];
- vis[u] = true;
- for (int i=head[u]; i!=-; i=edge[i].next) {
- int v = edge[i].v;
- if (!vis[v] && v != fa) {
- Dfs(v, u); // u开头的这条链上的最后一个子节点,如果是u ,就说明到环的开始了。
- }
- }
- }
- int main() {
- cin >> t;
- while (t--) {
- init();
- cin >> p >> m;
- for (int i=; i<=p; ++i) {
- cin >> val[i];
- }
- for (int i=; i<m; ++i) {
- cin >> a >> b;
- addEdge(a, b);
- addEdge(b, a);
- deg[a]++;
- deg[b]++;
- }
- topSort();
- for (int i=; i<=p; ++i) {
- num = ;
- temp = ;
- if (!vis[i])
- Dfs(i, );
- if (num & ) {
- ans += temp;
- }
- }
- cout << ans << endl;
- }
- return ;
- }
poj 5441
- // 先对边按权值排序,然后对询问按照权值排序。
- // 每次在满足当前条件下,遍历。把两个端点所在的集合
- // 并起来。此时增加的pair数就是2*num1*num2.
- // 因为已经对询问按照权值排序。所以后面的集合一定会覆盖前面的、
- // 所以只要一直询问下去。记录就可以了。
- // 有一点并查集离线查询的地方。
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- #define maxn 201000 // 节点数
- #define maxm 51000 // 询问数
- #define tot 1001000 // 边数
- int t, n, m, q;
- int num[maxn]; // 维护每个节点当前所在集合的节点个数、
- int ans[maxm]; // 保存每次询问的结果、
- int fa[maxn]; // 并查集
- struct Node {
- int st, ed, dis;
- }node[tot];
- int cmp(Node a, Node b) {
- return a.dis < b.dis;
- }
- struct Querry{
- int id, ask;
- }que[maxm];
- void init() {
- for (int i=; i<=n; ++i) {
- fa[i] = i;
- num[i] = ;
- }
- memset(ans, , sizeof(ans));
- }
- int cmp2(Querry a, Querry b) {
- return a.ask < b.ask;
- }
- int find_(int i) {
- if (fa[i] == i) return i;
- else return fa[i] = find_(fa[i]);
- }
- int main() {
- int a, b, d;
- scanf("%d", &t);
- while (t--) {
- scanf("%d%d%d", &n, &m, &q);
- init();
- for (int i=; i<=m; ++i) {
- scanf("%d%d%d", &a, &b, &d);
- node[i].st = a;
- node[i].ed = b;
- node[i].dis = d;
- }
- sort(node+, node++m, cmp);
- for (int i=; i<q; ++i) {
- scanf("%d", &que[i].ask);
- que[i].id = i+;
- }
- sort(que, que+q, cmp2);
- int now = ;
- int tempans = ;
- int flag = ;
- for (int i=; i<q; ++i) {
- flag = que[i].id;
- for(; node[now].dis<=que[i].ask && now<=m; now++) {
- int t1 = node[now].st;
- int t2 = node[now].ed;
- if (t1 == t2) {
- continue;
- }
- if (find_(t1) == find_(t2)) {
- continue;
- }
- else if (find_(t1) != find_(t2)) {
- tempans += *num[find_(t1)]*num[find_(t2)];
- num[find_(t1)] += num[find_(t2)];
- fa[find_(t2)] = find_(t1);
- }
- }
- ans[flag] += tempans;
- }
- for (int i=; i<=q; ++i) {
- printf("%d\n", ans[i]);
- }
- }
- return ;
- }
poj 5444
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- using namespace std;
- struct Tree {
- int l, r;
- }node[];
- bool flag;
- void init() {
- memset(node, , sizeof(node));
- }
- void addNode(int u, int c) {
- if (node[u].l== && u<c) {node[u].l = c;return;}
- else if (node[u].r== && u>c) {node[u].r = c;return;}
- else if (u<c) addNode(node[u].l, c);
- else addNode(node[u].r, c);
- }
- void find(int u, int c) {
- if (u == c)
- return;
- else if (u<c) {
- cout << 'W';
- find(node[u].l, c);
- }
- else if (u > c) {
- cout << 'E';
- find(node[u].r, c);
- }
- }
- int main() {
- int t, n, q, r, c;
- cin >> t;
- while(t--) {
- init();
- cin >> n;
- cin >> r;
- node[r].l = node[r].r = ;
- for (int i=; i<n; ++i) {
- cin >> c;
- addNode(r, c);
- }
- cin >> q;
- for (int i=; i<q; ++i) {
- flag = true;
- cin >> c;
- find(r, c);
- cout << endl;
- }
- }
- return ;
- }
15年-ICPC长春-网络赛的更多相关文章
- 2013 ACM/ICPC 长春网络赛E题
题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...
- 2013 ACM/ICPC 长春网络赛F题
题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...
- hdu 4762 && 2013 ACM/ICPC 长春网络赛解题报告
这次的答案是猜出来的,如果做得话应该是应该是一个几何概型的数学题: 答案就是:n/(m^(n-1)); 具体的证明过程: 1.首先枚举这M个点中的的两个端点,概率是:n*(n-1); 2.假设这个蛋糕 ...
- hdu 4763 && 2013 ACM/ICPC 长春网络赛解题报告
一个KMP的简单题 不过好久没用过这个东东了,今天写的时候花了很多时间: 只需要花点时间判断下所有的元素都相同的的情况就行了! #include<cstdio> #include<c ...
- HDU 4763 Theme Section (2013长春网络赛1005,KMP)
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 4764 Stone (2013长春网络赛,水博弈)
Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 4762 Cut the Cake (2013长春网络赛1004题,公式题)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 4759 Poker Shuffle(2013长春网络赛1001题)
Poker Shuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- 微信小程序——2、配置json文件
配置文件详解 主配置文件app.json 主配置文件位于主目录中,用于进行全局配置.包括页面文件的路径.窗口表现.设置网络超时时间.设置多tab等 下面通过微信最初自带小程序来学习 { "p ...
- C++类的静态成员变量初始化 Win32 API 定时器使用
1.类的静态成员变量 .h 类声明入下 class A { public: static int x; }; .cpp文件 这样初始化. ; 2.定时器使用 1.SetTimer(HWND,UINT, ...
- List集合实现简易学生管理
题目: 代码: package org.wlgzs; import java.util.ArrayList; import java.util.List; import java.util.Scann ...
- 判断一个String中是否有指定字符或字符串
String test=“qwer”; if (test.contains("个we")){ do; }
- Linux deepin 中Jetbrain Idea等软件中文显示异常
解决方案:安装常用的中文字体 # 文鼎宋体[推荐] sudo apt install fonts-arphic-uming # 文鼎楷体[推荐] sudo apt install fonts-arph ...
- 【镜像地址】Maven地址列表
1.国内OSChina提供的镜像,非常不错 <mirror> <id>CN</id> <name>OSChina Central</name> ...
- java的基本数据类型默认值
这里就举int类型 默认值在类实例化,也就是对象中才有默认值0,或者是静态变量. 1.先看局部变量使用(不行,报错) 2.静态变量 3.类非静态属性
- UVa 1395 苗条的生成树(Kruskal+并查集)
https://vjudge.net/problem/UVA-1395 题意: 给出一个n结点的图,求苗条度(最大边减最小边的值)尽量小的生成树. 思路: 主要还是克鲁斯卡尔算法,先仍是按权值排序,对 ...
- 机器学习-数据可视化神器matplotlib学习之路(四)
今天画一下3D图像,首先的另外引用一个包 from mpl_toolkits.mplot3d import Axes3D,接下来画一个球体,首先来看看球体的参数方程吧 (0≤θ≤2π,0≤φ≤π) 然 ...
- Vhost.conf 范例
NameVirtualHost *:80 <VirtualHost *:80> ServerName haofei.com DocumentRoot "E:/test/" ...