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长春-网络赛的更多相关文章

  1. 2013 ACM/ICPC 长春网络赛E题

    题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...

  2. 2013 ACM/ICPC 长春网络赛F题

    题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...

  3. hdu 4762 && 2013 ACM/ICPC 长春网络赛解题报告

    这次的答案是猜出来的,如果做得话应该是应该是一个几何概型的数学题: 答案就是:n/(m^(n-1)); 具体的证明过程: 1.首先枚举这M个点中的的两个端点,概率是:n*(n-1); 2.假设这个蛋糕 ...

  4. hdu 4763 && 2013 ACM/ICPC 长春网络赛解题报告

    一个KMP的简单题 不过好久没用过这个东东了,今天写的时候花了很多时间: 只需要花点时间判断下所有的元素都相同的的情况就行了! #include<cstdio> #include<c ...

  5. HDU 4763 Theme Section (2013长春网络赛1005,KMP)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. HDU 4764 Stone (2013长春网络赛,水博弈)

    Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. 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 ...

  8. HDU 4759 Poker Shuffle(2013长春网络赛1001题)

    Poker Shuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. HDU 4768 Flyer (2013长春网络赛1010题,二分)

    Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 逆向与BOF基础——注入shellcode并执行&Return-to-libc

    逆向与BOF基础--注入shellcode并执行 准备阶段 下载安装execstack. 本次实验实验的shellcode是心远的文章中生成的代码,即\x31\xc0\x50\x68\x2f\x2f\ ...

  2. 20145327 《网络对抗》MSF基础应用

    20145327 <网络对抗>MSF基础应用 主动攻击ms08_067 两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版) kali ip地址:192.168.4 ...

  3. 20145329 《网络对抗技术》浏览器MS11_050安全漏洞攻击

    两台虚拟机: kali ip:192.168.96.130 windows xp sp3(包含IE7)ip:192.168.96.128 1.在kali终端中开启msfconsole. 2.进入漏洞模 ...

  4. android 实践项目四

    android 实践项目四 本周主要是开发android baidumap实现公交的查询 1.权限的取得和对屏幕的支持 <uses-permission android:name="a ...

  5. np.random.normal()正态分布

    高斯分布的概率密度函数 numpy中 numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数的意义为: loc:float 概率分布的均值,对应着整 ...

  6. Educational Codeforces Round 21 Problem D(Codeforces 808D)

    Vasya has an array a consisting of positive integer numbers. Vasya wants to divide this array into t ...

  7. [BZOJ1497]最大获利

    Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一 ...

  8. 【第三十六章】 metrics(4)- metrics-graphite

    将metrics report给graphite(carbon-relay) 一.代码 1.pom.xml <!-- metrics-graphite --> <dependency ...

  9. hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b

    hdoj上一道有意思的题目,题目: 人见人爱a+b 敲的也蛮快的,大概十分钟左右就AC了.代码如下: 人见人爱a+b #include<stdio.h> int main() { int ...

  10. [POJ1958][Strange Tower of Hanoi]

    题目描述 求解 \(n\) 个盘子 \(4\) 座塔的 Hanoi 问题最少需要多少步 问题分析 考虑 \(3\) 座塔的 Hanoi 问题,记 \(f[i]\) 表示最少需要多少步, 则 \(f[i ...