0

0

Codeforces Round #231 (Div. 2)

php中文网

php中文网

发布时间:2016-06-07 15:44:03

|

1165人浏览过

|

来源于php中文网

原创

Problems # Name A counting sticks standard input/output 1 s, 256 MB x2326 B Very Beautiful Number standard input/output 1 s, 256 MB x856 C Dominoes standard input/output 2 s, 256 MB x803 D Physical Education and Buns standard input/output

Problems

Codeforces Round #231 (Div. 2)

 

 

# Name    
A

counting sticks

standard input/output

editGPT
editGPT

一款浏览器插件,让ChatGPT修改、校对英语文章

下载
1 s, 256 MB
Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) x2326
B

Very Beautiful Number

standard input/output

1 s, 256 MB
Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) x856
C

Dominoes

standard input/output

2 s, 256 MB
Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) x803
D

Physical Education and Buns

standard input/output

2 s, 256 MB
Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) x234
E

Lightbulb for Minister

standard input/output

1 s, 256 MB
Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) Codeforces Round #231 (Div. 2) x49

A题:先处理字符串把3个位置的数字保存下来,在去判断相等或者差值为2,去移动即可。

B题:枚举最后一位数字,模拟往前推数字,推到第一位判断是不是和一开始枚举的数字相同。

C题:贪心,10和01其实是一样的,所以先保存下11,10和01的总数,00的个数,先从左往右放11,放完之后,在从右边往左边去放10,01,每行交替着放即可,剩下的就是00。

D题:从小到大排序后,先枚举公差d,先变化后的序列A1是0,然后求出整个需要去向上移动的最大值和最小值(可能是负的),那么变化后的序列其实可以看成一条斜率k是d,b是A1的直线,然后这条直线无论上移下移,那么对于最大值和最小值肯定还是原来那2个位置,那么只要保证移动到最大值和最小值中的最大值尽可能小,那么就是去中间肯定是最优的,为(up + down + 1)/2  (要向上取整所以+1),最后维护ans的最小值即可。

D题:还有一种解法,二分答案,然后去判断,判断的方式先枚举公差,在用O(n)的方法去维护每个上下区间从大到小。

代码:

A题:

#include <stdio.h>
#include <string.h>

char c;

int main() {
    int num[3], s = 0; 
    memset(num, 0, sizeof(num));
    while ((c = getchar()) != EOF && c != '\n') {
        if (c == '+' || c == '=') s++;
        else num[s]++;
    }
    if (num[0] - 1 + num[1] == num[2] + 1) {
        if (num[0] == 1) num[1]--;
        else if (num[1] == 1) num[0]--;
        else if (num[0] != 1 && num[1] != 1) num[0]--;
        num[2]++;
    }
    else if (num[0] + num[1] == num[2]) {
    
    }
    else if (num[0] + 1 + num[1] == num[2] - 1) {
        if (num[2] == 1) {
            printf("Impossible\n");
            return 0;
        }
        num[2]--;
        num[0]++;
    }
    else {
        printf("Impossible\n");
        return 0;
    }
    int i;
    for (i = 0; i < num[0]; i++)
        printf("|");
    printf("+");
    for (i = 0;i < num[1]; i++)
        printf("|");
    printf("=");
    for (i = 0; i < num[2]; i++)
        printf("|");
    printf("\n");
    return 0;
}

B题:

#include <stdio.h>
#include <string.h>

int p, x, ans[1000005];

int main() {
    scanf("%d%d", &p, &x);
    int yu = 0;
    for (int i = 0; i <= 9; i++) {
        int s = i; int j; yu = 0;
        for (j = 0; j < p; j++) {
            ans[j] = s;
            int ji = s * x + yu;
            s = ji % 10;
            yu = ji / 10;
        }
        if (s == i && j == p && ans[p - 1] != 0 && yu == 0) {
            for (int j = p - 1; j >= 0; j--)
                printf("%d", ans[j]);
            printf("\n");
            return 0;
        }
    }
    printf("Impossible\n");
    return 0;
}

C题:

#include <stdio.h>
#include <string.h>

int n, m, i, j;
int num10, num00, num11;
char str[10], ans[1005][1005][4];

int main() {
    num10 = num00 = num11 = 0;
    scanf("%d%d", &n, &m);
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++) {
            scanf("%s", str);
            if (strcmp(str, "00") == 0)
                num00++;
            if (strcmp(str, "01") == 0 || strcmp(str, "10") == 0)
                num10++;
            if (strcmp(str, "11") == 0)
                num11++;
        }
    
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            strcpy(ans[i][j], "00");
    i = 0; j = 0;
    while (num11) {
        strcpy(ans[i][j], "11");
        j++;
        if (j == m) {
            j = 0;
            i++;
        }
        num11--;
    }
    int jj = m - 1;
    while (num10) {
        strcpy(ans[i][jj], "10");
        num10--;
        if (jj == j) break;
        jj--;
    }
    i++;
    jj = m - 1;
    while (num10) {
        strcpy(ans[i][jj], "01");
        num10--;
        if (jj == j) break;
        jj--;
    }
    int flag = 0; j--;
    if (j == -1) {
        j = m - 1;
        i++;
    }
    while (num10) {
        if (flag == 0)
            strcpy(ans[i][j], "01");
        else
            strcpy(ans[i][j], "10");
        j--;
        if (j == -1) {
            j = m - 1;
            i++;
            flag = 1 - flag;
        }
        num10--;
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < m - 1; j++) {
            printf("%s ", ans[i][j]);
        }
        printf("%s\n", ans[i][j]);
    }
    return 0;
}

D题1:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define INF 0x3f3f3f3f
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;

const int N = 1005;
int n, num[N];

void solve() {
    int ans = INF, start, dd;
    sort(num, num + n);
    for (int d = 0; d <= 20000; d++) {
        int up = -INF, down = INF;
        for (int i = 0; i < n; i++) {
            up = max(up, i * d - num[i]);
            down = min(down, i * d - num[i]);
        }
        int res = (up - down + 1) / 2;
        if (ans > res) {
            ans = res; start = -up + res; dd = d;
        }
    }
    printf("%d\n%d %d\n", ans, start, dd);
}

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &num[i]);
    solve();
    return 0;
}

D题2:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define INF 0x3f3f3f3f
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;

const int N = 1005;
const int M = 10005;
int n, num[N], start, dd;

bool judge(int Max) {
	for (int d = 0; d <= 20000; d++) {
		int up = num[n - 1] + Max, down = num[n - 1] - Max;
		for (int i = n - 2; i >= 0; i--) {
			up = min(num[i] + Max, up - d);
			down = max(num[i] - Max, down - d);
		}
		if (down <= up) {
			start = down;
			dd = d;
			return true;
		}
	}
	return false;
}

void solve() {
	int l = 0, r = M;
	sort(num, num + n);
	while (l < r) {
		int mid = (l + r) / 2;
		if (judge(mid)) r = mid;
		else l = mid + 1;
	}
	printf("%d\n%d %d\n", l, start, dd);
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", &num[i]);
	solve();
    return 0;
}


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JS轻松实现打地鼠游戏
JS轻松实现打地鼠游戏

共6课时 | 0.7万人学习

前端工程师必备技能—PS切图
前端工程师必备技能—PS切图

共11课时 | 1.9万人学习

JS开发验证表单教程
JS开发验证表单教程

共9课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号