Home  >  Article  >  Web Front-end  >  Codeforces Round #265 (Div. 2)_html/css_WEB-ITnose

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

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

Codeforces Round #265 (Div. 2)

Question link

A: Just transform the numbers and compare the differences

B: More than 2 consecutive 0s As an operation, the 0 at the beginning and the 0 at the end can be ignored

C: Greedy construction from the end. Since it is guaranteed to be a palindrome at the beginning, it is guaranteed that the length of the palindrome after modification can only be 2 or 3. Yes, in this case the judgment complexity will be very small

D: Violently enumerate the situation, and then judge

E: Reverse the operation to process the number of digits and corresponding digits corresponding to each number , and then calculate the answer in for

Code:

A:

#include <cstdio>#include <cstring>int n, num[105], sb[105];char s[105];int main() {    scanf("%d", &n);    scanf("%s", s);    for (int i = 0; i < n; i++) {        num[i] = s[i] - '0';        sb[i] = num[i];    }    num[0]++;    for (int i = 0; i < n; i++) {        if (num[i] == 2) {            num[i] = 0;            num[i + 1]++;        }    }    int ans = 0;    for (int i = 0; i < n; i++)        if (sb[i] != num[i])            ans++;    printf("%d\n", ans);    return 0;}

B:

#include <cstdio>#include <cstring>const int N = 1005;int n, num[N];int solve() {	int ans = 0;	int s = 0, e = n - 1;	while (num[s] == 0 && s < n) s++;	while (num[e] == 0 && e >= 0) e--;	for (int i = s ; i <= e; i++) {		if (num[i] == num[i - 1] && num[i] == 0)			continue;		ans++;	}	return ans;}int main() {	scanf("%d", &n);	for (int i = 0; i < n; i++)		scanf("%d", &num[i]);	printf("%d\n", solve());	return 0;}

C:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1005;int n, p;char str[N];bool solve(int u) {	if (u < 0) return false;	str[u]++;	if (str[u] - 'a' == p) {		if (solve(u - 1)) {			str[u] = 'a' - 1;			return solve(u);		}	} else {		if (u - 1 >= 0 && str[u] == str[u - 1]) return solve(u);		if (u - 2 >= 0 && str[u] == str[u - 2]) return solve(u);		return true;	}}int main() {	scanf("%d%d", &n, &p);	scanf("%s", str);	if (solve(n - 1)) printf("%s\n", str);	else printf("NO\n");	return 0;}

D:

#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>#include <set>using namespace std;struct Point {	int v[3];	void read() {		for (int i = 0; i < 3; i++)			scanf("%d", &v[i]);	}	bool operator == (const Point& c) const {		return (v[0] == c.v[0] && v[1] == c.v[1] && v[2] == c.v[2]);	}} p[10];typedef long long ll;ll dis(Point a, Point b) {	ll dx = a.v[0] - b.v[0];	ll dy = a.v[1] - b.v[1];	ll dz = a.v[2] - b.v[2];	return dx * dx + dy * dy + dz * dz;}ll d[10];bool judge() {	for (int i = 1; i < 8; i++)		for (int j = 0; j < i; j++) {			if (p[i] == p[j]) return false;		}	d[0] = 0;	for (int i = 1; i < 8; i++)		d[i] = dis(p[0], p[i]);	sort(d, d + 8);	ll a = d[1], b = d[4], c = d[7];	if (a != d[2] || a != d[3] || d[2] != d[3]) return false;	if (b != d[5] || b != d[6] || d[5] != d[6]) return false;	if (2 * a != b) return false;	if (a + b != c) return false;	return true;}bool dfs(int u) {	if (u == 8) {		if (judge())			return true;		return false;	}	sort(p[u].v, p[u].v + 3);	do {		if (dfs(u + 1)) return true;	} while (next_permutation(p[u].v, p[u].v + 3));	return false;}int main() {	for (int i = 0; i < 8; i++)		p[i].read();	if (!dfs(0)) printf("NO\n");	else {		printf("YES\n");		for (int i = 0; i < 8; i++)			printf("%d %d %d\n", p[i].v[0], p[i].v[1], p[i].v[2]);	}	return 0;}

E:

#include <cstdio>#include <cstring>#include <cmath>#include <vector>using namespace std;typedef long long ll;const ll MOD = 1000000007;const int N = 100005;char str[N], sss[N];int n;ll pow_mod(ll x, ll k) {    ll ans = 1;    while (k) {        if (k&1) ans = (ans * x) % MOD;        x = x * x % MOD;        k >>= 1;    }    return ans;}ll v[15], l[15];ll idx(char c) {    return c - '0';}struct State {    ll u;    vector<ll> v;    void init(char *str) {        int len = strlen(str);        u = idx(str[0]);        v.clear();        for (int i = 3; i < len; i++)            v.push_back(idx(str[i]));    }} s[N];int main() {    scanf("%s", str);    scanf("%d", &n);    for (int i = 0; i < n; i++) {        scanf("%s", sss);        s[i].init(sss);    }    for (int i = 0; i < 10; i++) {        v[i] = i;        l[i] = 1;    }    for (int i = n - 1; i >= 0; i--) {        ll lt = 0, vt = 0;        for (int j = 0; j < s[i].v.size(); j++) {            ll nu = s[i].v[j];            vt = (vt * pow_mod(10, l[nu]) % MOD + v[nu]) % MOD;            lt = (lt + l[nu]) % (MOD - 1);        }        v[s[i].u] = vt;        l[s[i].u] = lt;    }    ll ans = 0;    for (int i = 0; i < strlen(str); i++) {        ll nu = idx(str[i]);        ans = (ans * pow_mod(10, l[nu]) % MOD + v[nu]) % MOD;    }    printf("%lld\n", ans);    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