Home >Web Front-end >HTML Tutorial >Codeforces Round #264 (Div. 2)_html/css_WEB-ITnose

Codeforces Round #264 (Div. 2)_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:58:451092browse

Codeforces Round #264 (Div. 2)

Question link

A: Pay attention to the situation where the special judgment is just right, and for the rest, just judge the maximum value of the record one by one

B : Scan it once, fill it with money if there is not enough, and record the excess energy

C: Process the main and secondary diagonals, and then only choose the largest one for black and white squares.

D: Transformed into a DAG longest path problem, record the position of each number in each sequence. If a number can be placed, then the number in each sequence must be at the end of the previous sequence. Behind the number

E: Work hard, pre-process the tree, and then find a matching one from the current position upwards for each query. If there is no matching one, it will be -1

Code:

A:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n, s;int main() {	scanf("%d%d", &n, &s);	int x, y;	int flag = 1;	int ans = 0;	for (int i = 0; i < n; i++) {		scanf("%d%d", &x, &y);		if (x == s) {			if (y == 0) {				ans = max(ans, y);				flag = 0;			}		}		else if (x < s) {			ans = max(ans, (100 - y) % 100);			flag = 0;		}	}	if (flag) printf("-1\n");	else printf("%d\n", ans);	return 0;}

B:

#include <cstdio>#include <cstring>const int N = 100005;typedef long long ll;int n;ll h[N];int main() {	scanf("%d", &n);	for (int i = 1; i <= n; i++)		scanf("%lld", &h[i]);	ll now = 0;	ll ans = 0;	for (int i = 1; i <= n; i++) {		if (h[i] > h[i - 1]) {			ll need = h[i] - h[i - 1];			if (now >= need) {				now -= need;			} else {				ans += need - now;				now = 0;			}		} else {			now += h[i - 1] - h[i];		}	}	printf("%lld\n", ans);	return 0;}

C:

#include <cstdio>#include <cstring>const int N = 2005;typedef long long ll;int n;ll g[N][N], zhu[N + N], fu[N + N];int main() {	scanf("%d", &n);	for (int i = 0; i < n; i++)		for (int j = 0; j < n; j++)			scanf("%lld", &g[i][j]);	for (int i = 0; i < n; i++) {		for (int j = 0; j < n; j++) {			zhu[i - j + n] += g[i][j];			fu[i + j] += g[i][j];		}	}	ll b = -1, w = -1;	int bx, by, wx, wy;	for (int i = 0; i < n; i++) {		for (int j = 0; j < n; j++) {			ll sum = zhu[i - j + n] + fu[i + j] - g[i][j];			if ((i + j) % 2 == 0) {				if (b < sum) {					b = sum;					bx = i + 1;					by = j + 1;				}			}			else {				if (w < sum) {					w = sum;					wx = i + 1;					wy = j + 1;				}			}		}	}	printf("%lld\n", b + w);	printf("%d %d %d %d\n", bx, by, wx, wy);	return 0;}

D:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1005;struct Num {	int v[10], la;} num[N];bool cmp(Num a, Num b) {	return a.la < b.la;}int n, k, dp[N][N];bool judge(int i, int j) {	for (int x = 0; x < k; x++) {		if (num[i].v[x] < num[j].v[x]) return false;	}	return true;}int main() {	scanf("%d%d", &n, &k);	for (int i = 0; i < k; i++) {		int tmp;		for (int j = 1; j <= n; j++) {			scanf("%d", &tmp);			num[tmp].v[i] = j;		}	}	for (int i = 0; i <= n; i++) {		int maxv = 0;		for (int j = 0; j < k; j++) {			maxv = max(maxv, num[i].v[j]);		}		num[i].la = maxv;	}	sort(num, num + n + 1, cmp);	/*	for (int i = 0; i <= n; i++) {		for (int j = 0; j < k; j++) {			printf("%d ", num[i].v[j]);		}		printf("\n");	}*/	for (int i = 1; i <= n; i++) {		for (int j = 0; j < i; j++) {			dp[i][j] = max(dp[i][j], dp[i - 1][j]);			if (judge(i, j)) {				dp[i][i] = max(dp[i][i], dp[i][j] + 1);			}		}	}	int ans = 0;	for (int i = 0; i <= n; i++)		ans = max(ans, dp[n][i]);	printf("%d\n", ans);	return 0;}

E:

#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N = 100005;int n, q, val[N], f[N];vector<int> g[N];void dfs(int u, int fa) {	f[u] = fa;	for (int i = 0; i < g[u].size(); i++) {		int v = g[u][i];		if (v == fa) continue;		dfs(v, u);	}}int gcd(int a, int b) {	while (b) {		int tmp = a % b;		a = b;		b = tmp;	}	return a;}int query(int u) {	int v = val[u];	u = f[u];	while (u) {		if (gcd(val[u], v) > 1) return u;		u = f[u];	}	return -1;}int main() {	scanf("%d%d", &n, &q);	for (int i = 1; i <= n; i++)		scanf("%d", &val[i]);	int u, v;	for (int i = 1; i < n; i++) {		scanf("%d%d", &u, &v);		g[u].push_back(v);		g[v].push_back(u);	}	dfs(1, 0);	int tp, a, b;	while (q--) {		scanf("%d%d", &tp, &a);		if (tp == 1) {			printf("%d\n", query(a));		} else {			scanf("%d", &b);			val[a] = b;		}	}	return 0;}


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn