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 ...
随机推荐
- SVC(STM32)
这两个都是 system level service,有什么区别呢?…… 手册上说 SVC 这个指令是同步的,而 PendSV 是异步的,请问是什么意思呢?…… 高手路过尽请留言啊
- 【第三十二章】 elk(3)- broker架构 + 引入logback
实际中最好用的日志框架是logback,我们现在会直接使用logback通过tcp协议向logstash-shipper输入日志数据.在上一节的基础上修改!!! 一.代码 1.pom.xml 1 &l ...
- K条最短路径算法(KSP, k-shortest pathes):Yen's Algorithm
参考: K最短路径算法之Yen's Algorithm Yen's algorithm 基于网络流量的SDN最短路径转发应用 K条最短路径算法:Yen's Algorithm 算法背景 K 最短路径问 ...
- React Native之进度条ProgressViewIOS的使用
import React,{Component}from 'react'; import { AppRegistry, StyleSheet, Text, View, ProgressViewIOS, ...
- hdu 5587 Array 二分
Array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem ...
- LIBS+=
ZC: “LIBS+=”是要结合“LIBPATH += ”一起使用的?类似下面的用法: ZC: “LIBS+=”指明lib文件的名称,“LIBPATH += ”指明lib文件的路径.最后还要把DLL文 ...
- 《F4+2》β冲刺第二天
β冲刺第二天 1.每个成员今日完成的任务: 马仲山:系统代码和开发总结文档的完善 马婧(12):完善需求文档 马婧(13):完善设计文档 马世芳:对部分功能实现进行测试 张俊逸:针对测试出现的问题完善 ...
- Android移动应用界面的模板化设计
Android没有像苹果开发那样功能强大的界面开发工具,本身 ADT插件提供的界面编辑能力有限,没办法刻画所有的界面情况:Android的界面xml代码可以进行人工修改,而Iphone的全部在图形界面 ...
- Myeclise下tomcat启动报错,启动超时
错误截图如下: 大概说的是tomcat7在本地不能在45秒内启动,如果项目需要更多的时间,试着去更改server配置 解决方法: 找到项目工作空间目录下 workspace\.metadata\.pl ...
- URAL 2072 Kirill the Gardener 3
URAL 2072 思路: dp+离散化 由于湿度的范围很大,所以将湿度离散化 可以证明,先到一种湿度的最左端或者最右端,然后结束于最右端或最左端最优,因为如果结束于中间,肯定有重复走的路 状态:dp ...