Good Bye 2014 A B C D E

2024-06-01 18:58
文章标签 good 2014 bye

本文主要是介绍Good Bye 2014 A B C D E,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A:签到,从左往右走一遍判断下有没有遇到t即可


B:先利用floyd求出传递闭包,然后利用这个传递闭包贪心小的尽量往前放即可


C:贪心的策略,放的顺序其实根据拿的顺序就可以确定的,所以只要在拿的顺序上从左往右扫一遍即可


D:先DFS预处理出每条边两边点的个数,然后三元组对于每个边经过都是n - 2次,所以一个边都会被计算到n - 2 * 一边点 * 另一边点个数


E:问题可以转化为查询每个区间,未被覆盖的长度,那么利用线段树+离线处理,从右往左不断添加区间并查询即可


代码:

#include <cstdio>
#include <cstdlib>const int N = 30005;int n, t, a[N];int main() {scanf("%d%d", &n, &t);for (int i = 1; i <= n - 1; i++)scanf("%d", &a[i]);int bo = 0;for (int i = 1; i <= t;) {if (i == t) {bo = 1;break;}i += a[i];}printf("%s\n", bo ? "YES" : "NO");	return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 305;int n, a[N], g[N][N], vis[N];
char str[N];int main() {scanf("%d", &n);for (int i = 0; i < n; i++) scanf("%d", &a[i]);for (int i = 0; i < n; i++) {scanf("%s", str);for (int j = 0; j < n; j++)g[i][j] = str[j] - '0';g[i][i] = 1;}for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {g[i][j] |= (g[i][k]&g[k][j]);}}}for (int i = 0; i < n; i++) {int Min = n;for (int j = 0; j < n; j++) {if (g[j][i] && !vis[a[j]]) {Min = min(Min, a[j]);}}vis[Min] = 1;printf("%d ", Min);}return 0;
}


#include <cstdio>
#include <cstring>const int N = 505;
typedef long long ll;int n, m, w[N], vis[N][N];int v;
ll sum = 0;int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)scanf("%d", &w[i]);for (int i = 1; i <= m; i++) {scanf("%d", &v);for (int j = 1; j <= n; j++)sum += w[j] * vis[v][j];memset(vis[v], 0, sizeof(vis[v]));for (int j = 1; j <= n; j++) {if (v == j) continue;vis[j][v] = 1;}			}printf("%lld\n", sum);return 0;
}

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;const int N = 100005;int n;struct Edge {int u, v, id, num;double len;Edge(){}Edge(int u, int v, int id) {this->u = u;this->v = v;this->id = id;}
} e[N];vector<Edge> g[N];int dfs(int u, int p) {int sz = 1;for (int i = 0; i < g[u].size(); i++) {int v = g[u][i].v;if (v == p) continue;int tmp = dfs(v, u);sz += tmp;e[g[u][i].id].num = tmp;}return sz;
}int main() {scanf("%d", &n);int u, v;double  w;for (int i = 1; i <= n - 1; i++) {scanf("%d%d%lf", &u, &v, &w);e[i].len = w;g[u].push_back(Edge(u, v, i));g[v].push_back(Edge(v, u, i));}dfs(1, 0);int q;scanf("%d", &q);int id, vv;double sum = 0;for (int i = 1; i <= n - 1; i++) {sum += (double)(n - 2) * (e[i].num) * (n - e[i].num) * (e[i].len);}double c1 = (double)n * (n - 1) * (n - 2) / 2 / 3;while (q--) {scanf("%d%d", &id, &vv);sum -= (double)(n - 2) * (e[id].num) * (n - e[id].num) * (e[id].len - vv);e[id].len = vv;printf("%.10lf\n", sum / c1);}return 0;
}

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 200005;struct query {int l, r, id;
} s[N], q[N];int n, ans[N];bool cmp(query a, query b) {return a.l > b.l;
}int hash[N * 2], hn;int find(int x) {return lower_bound(hash, hash + hn, x) - hash;
}#define lson(x) ((x<<1)+1)
#define rson(x) ((x<<1)+2)struct Node {int l, r, len, lazy;void gao() {lazy = 1;len = 0;}
} node[N * 8];void pushup(int x) {node[x].len = node[lson(x)].len + node[rson(x)].len;
}void pushdown(int x) {if (node[x].lazy) {node[x].lazy = 0;node[lson(x)].gao();node[rson(x)].gao();}
}void build(int l, int r, int x = 0) {node[x].l = l; node[x].r = r; node[x].lazy = 0;if (l == r) {node[x].len = hash[r + 1] - hash[l];return;}int mid = (l + r) / 2;build(l , mid, lson(x));build(mid + 1, r, rson(x));pushup(x);
}void add(int l, int r, int x = 0) {if (node[x].l >= l && node[x].r <= r) {node[x].gao();return;}pushdown(x);int mid = (node[x].l + node[x].r) / 2;if (l <= mid) add(l, r, lson(x));if (r > mid) add(l, r, rson(x));pushup(x);
}int query(int l, int r, int x = 0) {if (node[x].l >= l && node[x].r <= r)return node[x].len;int mid = (node[x].l + node[x].r) / 2;int ans = 0;pushdown(x);if (l <= mid) ans += query(l, r, lson(x));if (r > mid) ans += query(l, r, rson(x));pushup(x);return ans;
}int main() {scanf("%d", &n);hn = 0;for (int i = 0; i < n; i++) {scanf("%d%d", &s[i].l, &s[i].r);s[i].r += s[i].l;hash[hn++] = s[i].l;hash[hn++] = s[i].r;}sort(hash, hash + hn);hn = unique(hash, hash + hn) - hash;build(0, hn - 2);int qn;scanf("%d", &qn);for (int i = 0; i < qn; i++) {scanf("%d%d", &q[i].l, &q[i].r);q[i].l--;q[i].r--;q[i].l = s[q[i].l].l;q[i].r = s[q[i].r].l;q[i].id = i;}sort(q, q + qn, cmp);int now = n - 1;for (int i = 0; i < qn; i++) {while (s[now].l >= q[i].l && now >= 0) {add(find(s[now].l), find(s[now].r) - 1);now--;}ans[q[i].id] = query(find(q[i].l), find(q[i].r) - 1);}for (int i = 0; i < qn; i++)printf("%d\n", ans[i]);return 0;
}


这篇关于Good Bye 2014 A B C D E的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021848

相关文章

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

【UVA】1619-Feel Good(数据结构-栈)

既然所有数都是大于等于0的,那么在一个区间最小值一定的情况下,这个区间越长越好(当然有特殊情况) 对一个数a[i],left[i]代表左边第一个比它小的,right[i]代表右边第一个比它小的 如何构造left[i]呢?,从左往右构造一个单调递增的栈(一定是单调的!) 当a[i]比栈顶元素小的时候,栈顶元素出栈,(否则的话入栈,left[i]就是栈顶元素的位置,right数组同理可得

2014年暑假培训 - 数论

A银河上的星星 /**************************************************************     Problem: 1014     User: DoubleQ     Language: C++     Result: Accepted     Time:190 ms     Memor

2014暑假集训搜索专题

A - 漫步校园 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划

[置顶] 2014训练计划进阶版

动态规划: 区间dp,树状dp,数位dphdu3555, sgu258, sgu390  队列优化: zoj3399 最小表示法的状态压缩DP: spoj2159  专题链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=38881#overview 专题链接: http://acm.hust.edu.cn/vjudg

[置顶] 2014训练计划

每个专题结束后会有5小时的专题赛~ 1、hustOJ目前支持谷歌、火狐浏览器等部分浏览器。 2、欢迎吐槽~ 3、推荐该阶段用书(以下具体算法实现多数可在此书中找到详解):算法竞赛入门经典之训练指南(刘汝佳) 4、题解报告:专题中的题目多是经典题目,百度搜索即有详细解答~ 5、专题相关知识点红字标出,建议先百度红字部分,有助于专题学习~ 6、专题时间会在"ACM 今天你AC了吗?"(12

2014级寒假特训之并查集专题

Problem A: Double和XXZ的生日宴请 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 9   Solved: 7 [ Submit][ Status][ Web Board] [ Edit] [ TestData] Description Double 和 XXZ同一天生日,他们俩30岁生日那天,当年