模拟 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. 【转载】Java反射: 数组

    原创链接:http://czj4451.iteye.com/blog/1479486 java.lang.reflect.Array Java反射机制通过Array类来处理数组,结合java.lang ...

  2. Emgu.CV/opencv 绘图 线面文字包括中文

    绘图很简单 Emgu.CV.Image<Bgr, Byte> image;   使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文   CircleF circle = ...

  3. (转)理解MySQL——索引与优化

    参考资料:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html ———————————— 全文: 写在前面:索引对查询的速度有着 ...

  4. 清北学堂模拟赛day7 石子合并加强版

    /* 注意到合并三堆需要枚举两个端点,其实可以开一个数组记录合并两堆的结果,标程好像用了一个神奇的优化 */ #include<iostream> #include<cstdio&g ...

  5. Coursera-Getting and Cleaning Data-Week3-dplyr+tidyr+lubridate的组合拳

    Coursera-Getting and Cleaning Data-Week3 Wednesday, February 04, 2015 好久不写笔记了,年底略忙.. Getting and Cle ...

  6. 如何快速上手使用STM32库函数

    一.背景 如前文所述,利用标准库函数的好处在于,可以快速开发,不用去对着数据手册,小心翼翼的一位一位的配置那些繁复的寄存器,因为这些工作意法半导体已经找了一些顶级的工程师帮你做了,杰作既是其库函数.当 ...

  7. PHP通用分页(Pager)类

    三种不同展示方式 附上style~ 1. 效果图1 2.效果图2    3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...

  8. 微信公共服务平台开发(.Net 的实现)12-------网页授权(上 :更加深入理解OAuth2.0 )

    我们首先来认识一下OAuth协议吧,这个东西很早就听说过,总觉得离我很远(我的项目用不到这些),但是最近不得不学习一下了.我在网上找了一些解释,认为解释的最好的是这样说的(出处:http://hi.b ...

  9. 【Alpha版本】 第二天 11.8

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 我要招聘详情的展示 注册界面的实现 填写招聘时用户填写各个日期到可 ...

  10. jquery.validate.js插件使用

    jQuery验证控件jquery.validate.js使用说明+中文API 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-valid ...