Codeforces Round #352 (Div. 2)

时间:2022-11-10 15:53:31

模拟 A - Summer Camp

#include <bits/stdc++.h>

int a[1100];
int b[100];
int len; void init() {
int i = 1, tot = 1;
while (tot <= 1010) {
int t = i, c = 0;
while (t) {
b[c++] = t % 10;
t /= 10;
}
for (int i=c-1; i>=0; --i) {
a[tot++] = b[i];
}
i++;
}
} int main() {
init ();
int n; scanf ("%d", &n);
printf ("%d", a[n]);
return 0;
}

构造 B - Different is Good

题意:问最少改变多少个字母使得该字符串的所有子串不相同

分析:子串有长度为1的,所以如果字符串长度大于26一定不可行,否则就把相同的字母用没出现的字母替换.

#include <bits/stdc++.h>

const int N = 1e5 + 5;
char str[N];
int vis[30]; int main() {
int n; scanf ("%d%s", &n, str);
if (n > 26) {
puts ("-1");
} else {
int ans = 0;
for (int i=0; i<n; ++i) {
if (vis[str[i]-'a']) {
ans++;
} else {
vis[str[i]-'a'] = true;
}
}
printf ("%d\n", ans);
}
return 0;
}

几何+贪心 C - Recycling Bottles

题意:A和B捡罐头,每次只能捡一个然后到垃圾桶去,再从垃圾桶出发去捡,问捡完所有罐头所需的最少总路程

分析:除从A或B出发第一次捡罐头的距离不确定外,其他的都可以看成sum (dis (T, p[i]) *2),所以只需要 min (-dis (T, p[i]) + dis (A, p[i])).因为A和B捡罐头是独立的,只要A和B都捡一个罐头使得差值最小,重复时特判下就行了.更一般的做法是A任意选择一个罐头,B选择除A选的外里最小差值的那一个,可以预处理出前缀最小和后缀最小.

#include <bits/stdc++.h>

const int N = 1e5 + 5;
const double INF = 1e18 + 5;
const double EPS = 1e-8;
struct Point {
double x, y;
Point() {}
Point(double x, double y) {
this->x = x;
this->y = y;
}
}point[N];
Point A, B, O;
double dis[N];
double sum;
double pre[N], suff[N];
double add[N];
int n; Point read_point() {
double x, y; scanf ("%lf%lf", &x, &y);
return Point (x, y);
} double squ(double x) {
return x * x;
} double calc_dis(Point a, Point b) {
return sqrt (squ (a.x - b.x) + squ (a.y - b.y));
} int main() {
A = read_point ();
B = read_point ();
O = read_point ();
scanf ("%d", &n);
for (int i=1; i<=n; ++i) {
point[i] = read_point ();
dis[i] = calc_dis (point[i], O);
pre[i] = suff[i] = -dis[i] + calc_dis (point[i], B);
add[i] = -dis[i] + calc_dis (point[i], A);
sum += dis[i] * 2;
}
pre[0] = suff[n+1] = INF;
for (int i=1; i<=n; ++i) {
pre[i] = std::min (pre[i], pre[i-1]);
}
for (int i=n; i>=1; --i) {
suff[i] = std::min (suff[i], suff[i+1]);
}
double ans = sum + suff[1]; //just B
for (int i=1; i<=n; ++i) {
ans = std::min (ans, sum + std::min (0.0, std::min (pre[i-1], suff[i+1])) + add[i]);
}
printf ("%.12f\n", ans);
return 0;
}

二分 D - Robin Hood

题意:n个人,k次操作,每次把最大的数分1到最小的数,问k次后最大值和最小值的差

分析:二分最小值和最大值,思想是求出min(max) 刚好使得小于它的到它的操作正好是k.处理好二分的边界,因为二分时是尽量使得最小值大,最大值小.

#include <bits/stdc++.h>

typedef long long ll;
const int N = 5e5 + 5;
int a[N];
int n, k; bool check(int val, int op) {
ll need = 0;
for (int i=0; i<n; ++i) {
if (op == 1) {
if (a[i] <= val) {
need += val - a[i];
} else {
break;
}
} else if (op == 2 && a[i] >= val) {
need += a[i] - val;
}
}
return need <= k;
} int main() {
scanf ("%d%d", &n, &k);
ll sum = 0;
for (int i=0; i<n; ++i) {
scanf ("%d", a+i);
sum += a[i];
}
std::sort (a, a+n);
int ansl = -1, ansr = 1e9;
int left = a[0], right = sum / n;
while (left <= right) {
int mid = left + (right - left) / 2;
if (check (mid, 1)) {
ansl = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
left = sum / n;
if (sum % n) {
left++;
}
right = a[n-1];
while (left <= right) {
int mid = left + (right - left) / 2;
if (check (mid, 2)) {
ansr = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
printf ("%d\n", ansr - ansl);
return 0;
}

  

Codeforces Round #352 (Div. 2)的更多相关文章

  1. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; C&period; Recycling Bottles 暴力&plus;贪心

    题目链接: http://codeforces.com/contest/672/problem/C 题意: 公园里有两个人一个垃圾桶和n个瓶子,现在这两个人需要把所有的瓶子扔进垃圾桶,给出人,垃圾桶, ...

  2. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; D&period; Robin Hood

    题目链接: http://codeforces.com/contest/672/problem/D 题意: 给你一个数组,每次操作,最大数减一,最小数加一,如果最大数减一之后比最小数加一之后要小,则取 ...

  3. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; D&period; Robin Hood &lpar;二分答案&rpar;

    题目链接:http://codeforces.com/contest/672/problem/D 有n个人,k个操作,每个人有a[i]个物品,每次操作把最富的人那里拿一个物品给最穷的人,问你最后贫富差 ...

  4. Codeforces Round &num;352 &lpar;Div&period; 1&rpar; B&period; Robin Hood 二分

    B. Robin Hood 题目连接: http://www.codeforces.com/contest/671/problem/B Description We all know the impr ...

  5. Codeforces Round &num;352 &lpar;Div&period; 1&rpar; A&period; Recycling Bottles 暴力

    A. Recycling Bottles 题目连接: http://www.codeforces.com/contest/671/problem/A Description It was recycl ...

  6. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; B&period; Different is Good 水题

    B. Different is Good 题目连接: http://www.codeforces.com/contest/672/problem/B Description A wise man to ...

  7. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; A&period; Summer Camp 水题

    A. Summer Camp 题目连接: http://www.codeforces.com/contest/672/problem/A Description Every year, hundred ...

  8. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; ABCD

    Problems     # Name     A Summer Camp standard input/output 1 s, 256 MB    x3197 B Different is Good ...

  9. Codeforces Round &num;352 &lpar;Div&period; 2&rpar; B - Different is Good

    A wise man told Kerem "Different is good" once, so Kerem wants all things in his life to b ...

随机推荐

  1. centos7作为web服务器优化

    centos7作为web服务器优化 原文 http://itindex.net/detail/51140-centos7-web-服务器 1.加大打开文件数的限制(open files) 查看 uli ...

  2. Python 字典&lpar;Dictionary&rpar;操作详解

    Python 字典(Dictionary)的详细操作方法. Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字 ...

  3. 研究一下uucode编码

    uucode编码是把任意二进制数据转换为ascii字符的编码用于在一些只能传递文本的地方传送二进制数据uu模块提供了encode()和decode()用于将一个文件转换为uucode编码的字符文件,文 ...

  4. Ubuntu下找不到ttyUSB&ast;问题解决

    一.硬件连接 确认Ubuntu对USB转串口设备的支持. 1.# lsmod | grep usbserial如果有usbserial,说明系统支持USB转串口. 如果没有,先安装ch340驱动或者c ...

  5. js动态创建表单数据

    var formData = new FormData(); formData.append("file",fileList[i]); formData.append(" ...

  6. HTML5 &amp&semi; tel &amp&semi; make a phone call

    HTML5 & tel & make a phone call 咋呼叫呀,网页怎么打电话? { key: "exploreCorpPhone", title: &q ...

  7. Confluence 6 色彩选择器展开的页面

    色彩选择器展开的页面中对色彩的选择配置. https://www.cwiki.us/display/CONFLUENCEWIKI/Customising+Colour+Schemes

  8. 【2】IOS APP打包发布

    目的: 本文的目的是对IOS APP打包发布做了对应的介绍,大家可根据文档步骤进行mac环境部署: 申请苹果开发者账号 此处略 创建申请证书 这样做的目的就是为你的电脑安装发布许可证,只有这样你的电脑 ...

  9. &lbrack;UE4&rsqb;HorizontalBox,整体向右对齐

  10. &OpenCurlyDoubleQuote;全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...