模拟 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 #352 (Div. 2) C. Recycling Bottles 暴力+贪心

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

  2. Codeforces Round #352 (Div. 2) D. Robin Hood

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

  3. Codeforces Round #352 (Div. 2) D. Robin Hood (二分答案)

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

  4. Codeforces Round #352 (Div. 1) B. Robin Hood 二分

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

  5. Codeforces Round #352 (Div. 1) A. Recycling Bottles 暴力

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

  6. Codeforces Round #352 (Div. 2) B. Different is Good 水题

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

  7. Codeforces Round #352 (Div. 2) A. Summer Camp 水题

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

  8. Codeforces Round #352 (Div. 2) ABCD

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

  9. Codeforces Round #352 (Div. 2) B - Different is Good

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

随机推荐

  1. 新手理解HTML、CSS、javascript之间的关系

    http://www.cnblogs.com/dreamingbaobei/p/5062901.html 工作多年,一直忙忙碌碌的应用各种技术,现在不忙了,问问自己究竟在做什么,究竟会什么竟答不上来, ...

  2. python基础2(数据类型、数据运算、for循环、while循环、列表)

    1.数据类型 python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是一个对象,即所有数据都是对象. 对象的3个特性: 身份:即内存地址,可以用id()来获取 类型 ...

  3. 在github上搭建hexo博客

    准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...

  4. win10如何100%提升网络速度

    1.Win+R运行,输入gpedit.msc 2.依次打开"计算机配置"-"管理模板"-"网络"-"QoS数据包计划程序" ...

  5. 如何撤销 PhpStorm/Clion 等 JetBrains 产品的 “Mark as Plain Text” 操作 ?

    当把某个文件“Mark as Plain Text”时,该文件被当做普通文本,就不会有“代码自动完成提示”功能,如下图所示: 但是呢,右键菜单中貌似没有 相应的撤销 操作, 即使是把它删除,再新建一个 ...

  6. HTML5CSS3特效-上下跳动的小球-遁地龙卷风

    (-1)写在前面 我用的是chrome49,这个idea是我在stackoverflow上回答问题时看到了,多谢这位同行,加深了我对很多技术点的理解,最近刚到北京,忙碌了一两天,在后续的日子里,会被安 ...

  7. CentOS 7.0,启用iptables防火墙

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  8. 2.MongoDB 基于node.js访问和操作集合

    对于频繁使用的Node.js来说,常见的任务是集合的动态操控. 较大的安装给每个大客户一个单独的集合,以便客户登入或离开时.根据需要添加或删除集合. MongoDB Node.js 驱动程序 Db和C ...

  9. WebService -- Java 实现之 CXF (初体验)

    1. 认识WebService 简而言之,她就是:一种跨编程语言以及操作系统的远程调用技术. 大家都可以根据定义好的规范和接口进行开发,尽管各自的使用的开发语言和操作系统有所不同,但是由于都遵循统一的 ...

  10. cf596d

    题意:有一排等高的树木,高度都为h.给出每棵树在数轴上的坐标,每次有可能是最左边或者最右边的立着的树倒下,概率都是0.5.最终所有树都倒下.每棵树在倒下的时候有p的概率向左倒,1-p的概率向右倒.如果 ...