最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

CodeforcesRound#265(Div.2)_html/css

来源:动视网 责编:小采 时间:2020-11-27 15:55:12
文档

CodeforcesRound#265(Div.2)_html/css

CodeforcesRound#265(Div.2)_html/css_WEB-ITnose:Codeforces Round #265 (Div. 2) 题目链接 A:把数字变换后比较一下几个不一样即可 B:连续2个以上0当作一次操作,开头的0和结尾的0可以忽略 C:贪心从末尾去构造,由于保证一开始是回文,所以保证修改后出现回文只可能为长度2或3的,这样的话判断复杂
推荐度:
导读CodeforcesRound#265(Div.2)_html/css_WEB-ITnose:Codeforces Round #265 (Div. 2) 题目链接 A:把数字变换后比较一下几个不一样即可 B:连续2个以上0当作一次操作,开头的0和结尾的0可以忽略 C:贪心从末尾去构造,由于保证一开始是回文,所以保证修改后出现回文只可能为长度2或3的,这样的话判断复杂


Codeforces Round #265 (Div. 2)

题目链接

A:把数字变换后比较一下几个不一样即可

B:连续2个以上0当作一次操作,开头的0和结尾的0可以忽略

C:贪心从末尾去构造,由于保证一开始是回文,所以保证修改后出现回文只可能为长度2或3的,这样的话判断复杂度就很小了

D:暴力枚举情况,然后判断

E:把操作逆过来处理出每个数字对应的位数和相应数字,然后在for一遍计算答案即可

代码:

A:

#include #include 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 #include 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 #include #include 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 #include #include #include #include #include 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 #include #include #include 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 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;}

文档

CodeforcesRound#265(Div.2)_html/css

CodeforcesRound#265(Div.2)_html/css_WEB-ITnose:Codeforces Round #265 (Div. 2) 题目链接 A:把数字变换后比较一下几个不一样即可 B:连续2个以上0当作一次操作,开头的0和结尾的0可以忽略 C:贪心从末尾去构造,由于保证一开始是回文,所以保证修改后出现回文只可能为长度2或3的,这样的话判断复杂
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top