Codeforces Round #195 A B C 三题合集 (Div. 2)
A 题 Vasily the Bear and Triangle
题目大意
一个等腰直角三角形 ABC,角 ACB 是直角,AC=BC,点 C 在原点,让确定 A 和 B 的坐标,使得三角形包含一个矩形,这个矩形一个角在原点,另一个点在 (x, y) 处,并且三角形 ABC 的面积尽量小
将 A B 两点按照 x 坐标从小到大输出
做法分析
A B 两点必然在坐标轴上,且线段 AB 经过点 (x, y),那么简单分类讨论下就行了
交之前犹豫了一下,10分钟才提交...
参考代码
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; const int N=; int x, y; int main() {
scanf("%d%d", &x, &y);
if(x> && y> || x< && y<) {
if(x<) {
printf("%d %d %d %d\n", x+y, , , x+y);
}
else {
printf("%d %d %d %d\n", , x+y, x+y, );
}
}
else {
if(x<) {
printf("%d %d %d %d\n", x-y, , , y-x);
}
else {
printf("%d %d %d %d\n", , y-x, x-y, );
}
}
return ;
}
A
B 题 Vasily the Bear and Fly
题目大意
在平面上有 2*m(1≤m≤105) 个同样半径的圆。他们编号分别为 1~2*m,分上下两排排列.
第 1 到 m 个圆的圆心坐标分别为:(2R-R, 0), (4R-R, 0),...,(2mR-R, 0)
第 m+1 到第 m+m 个圆的圆心坐标分别为:(2R-R, 2R), (4R-R, 2R),...,(2mR-R, 2R)
有一只 fly(苍蝇?)在这个平面上运动了 m2 次,这 m2 次运动分别编号为 0~(m2-1),编号为 i 的那次运动从第 1+i/m 个圆的圆心运动到第 m+1+i%m 个圆的圆心,且走最短路,fly 走过的路径必须包含在这 2*m 个圆确定的区域中,不能走到外面的其他地方
现在问,这只 fly 的 m2 次运动中,每次运动走过的平均距离是多少
做法分析
典型的数学题,当时看见,菊花莫名其妙的一紧,脚趾头都抓紧了......
观察这 2*m 个圆的圆心坐标不难发现,他们分成了上下两排,同一排相邻的两个圆相切,上下相邻的两个圆相切
再观察 fly 每次运动走的圆的分布规律,不难发现是每次选定一个下面的圆的圆心,分别以上面的圆的圆心为目的点走一次最短路,所以总共有 m2 次运动
那么一个最通常的想法就是:求出这 m2 次运动总共走过的距离
先看看最短路吧:
由于每次一定是一个圆在下面,一个圆在上面,那么可以这样搞:
当两个圆相邻时(列号差为 0),最短路是 2R
当两个圆的列号差为 1 时,最短路是 2R+√2R
当两个圆的列号差为 2 时,最短路是 2R+2√2R
当两个圆的列号差为 3 时,最短路是 4R+2√2R
当两个圆的列号差为 4 时,最短路是 6R+2√2R
当两个圆的列号差为 5 时,最短路是 8R+2√2R
......
将他们存进一个数组 A 中,A[i] 表示列号差为 i 的最短路长度
以 m 为单位,看看每次运动的起始点和终止点
前 m 次运动:起始点始终是下面第 1 个圆,终止点从上面第 1 个圆变化到第 m 个圆
接下来的 m 次运动:起始点始终是下面第 2 个圆,终止点从上面第 1 个圆变化到第 m 个圆
再接下来的 m 次运动:起始点始终是下面第 3 个圆,终止点从上面第 1 个圆变化到第 m 个圆
......
细心的读者在这里的时候估计已经知道该怎么做了,还没想出来的朋友可以接着往下看
从上面可以看出:起始点是在不停的往前走的,而终止点始终是上面的圆从 1 到 m
我们再以 m 为单位,看看他们的距离和
前 m 次运动的距离和我们可以求出来:sum1=∑A[i]
那么接下来的 m 次运动的距离和呢:sum2=sum-A[m-1]+A[1]
再接下来的的 m 次运动的距离和呢:sum3=sum2-A[m-2]+A[2]
第 4 个 m 次运动的距离和:sum4=sum3-A[m-3]+A[3]
......
相信看到这里,大家都知道该怎么做了 o(m) 的扫一遍,用两个指针辅助,这样就可以求出来了
参考代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath> using namespace std; const int N=; int m;
double R, A[N]; void init() {
A[]=, A[]=+sqrt();
for(int i=; i<m; i++) A[i]=*(i-)+*sqrt();
} int main() {
scanf("%d%lf", &m, &R);
init();
double ans=;
for(int i=; i<m; i++) {
ans+=A[i];
}
int p1=, p2=m-;
double last=ans;
for(int i=; i<m; i++) {
last=last-A[p2]+A[p1];
ans+=last;
p1++, p2--;
}
printf("%lf\n", ans/m/m*R);
return ;
}
B
C 题 Vasily the Bear and Sequence
题目大意
给了 n(1≤n≤105) 个不同的数,要求选出一些数出来,使得这些数按位取与之后的数在二进制下,最低位的 1 所在的位尽量高,如果有多重方案,输出选取数的数量最大的一个方案
做法分析
初一看很神,其实仔细想一下不难发现这题比 B 题还水...
考虑最后选取的数按位取与之后得到的数,设为 sum
要使 sum 在二进制下 1 的最低位最高,也就是说,这一位 1 以后,所有的数都应该是 0
想到这里,反应比较快的读者肯定知道该怎么做了
枚举最低位,设为 pos,先在所有数中选出二进制表示下,在 pos 位为 1,的那些数,如果这些数按位取与,能够使得所有低于 pos 位的二进制位全为 0,那么这些数就是一个合法的答案,当然,如果我们是从高位往地位枚举的,这些数就是我们最后的答案了
参考代码
#include <cstring>
#include <cstdio>
#include <iostream> using namespace std; int A[], n;
bool vs[]; int main() {
scanf("%d", &n);
for(int i=; i<n; i++) scanf("%d", &A[i]);
for(int i=; i>=; i--) {
bool flag=;
memset(vs, , sizeof vs);
for(int j=; j<n; j++) if(A[j]&(<<i)) vs[j]=;
for(int pos=i-; pos>= && flag; pos--) {
bool all=;
for(int j=; j<n && !all; j++) if(vs[j]) {
if(!(A[j]&(<<pos))) all=;
}
if(!all) flag=;
}
if(flag) break;
}
int cnt=;
for(int i=; i<n; i++) if(vs[i]) cnt++;
printf("%d\n", cnt);
for(int i=; i<n; i++) if(vs[i]) {
printf("%d", A[i]);
cnt--;
if(!cnt) printf("\n");
else printf(" ");
}
return ;
}
C
Codeforces Round #195 A B C 三题合集 (Div. 2)的更多相关文章
- DP+贪心水题合集_C++
本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...
- NOIP水题合集[3/未完待续]
NOIP2008pj传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球, ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- Codeforces Round #195 (Div. 2) D题Vasily the Bear and Beautiful Strings
这场CF,脑子乱死啊...C题,搞了很长时间,结束了,才想到怎么做.B题,没看,D题,今天看了一下,很不错的组合题. 如果n和m都挺多的时候 以下情况都是变为1,根据偶数个0,最后将会为1,奇数个0, ...
- Educational Codeforces Round 24 CF 818 A-G 补题
6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...
- Codeforces Round #197 (Div. 2) (A、B、C、D、E五题合集)
A. Helpful Maths 题目大意 给一个连加计算式,只包含数字 1.2.3,要求重新排序,使得连加的数字从小到大 做法分析 把所有的数字记录下来,从小到大排序输出即可 参考代码 #inclu ...
- Educational Codeforces Round 7 B. The Time 水题
B. The Time 题目连接: http://www.codeforces.com/contest/622/problem/B Description You are given the curr ...
- Educational Codeforces Round 7 A. Infinite Sequence 水题
A. Infinite Sequence 题目连接: http://www.codeforces.com/contest/622/problem/A Description Consider the ...
- Educational Codeforces Round 2 A. Extract Numbers 模拟题
A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...
随机推荐
- hibernate 问题集
1.Could not obtain transaction-synchronized Session for current thread 解决方法: 在web.xml中加入如下配置: <fi ...
- Oracle 查询用户和删除用户
------------------------------- 一.查询用户命令: select username from dba_users; 示例: 二.删除用户命名: drop user 用户 ...
- 白条VS花呗,快餐式消费金融成巨头新战场
在这一次的国庆假期前,90后网红密子君吃空麦当劳事件引发了网友们的热议.短短半个小时,这位90后网红就吃光了25包薯条,随后又吃下两杯麦旋风,其疯狂举动引得四周食客纷纷围观拍照.那么,是什么刺激这位9 ...
- android retrofit @Query用法
http://www.b3a4a.com/?id=71 //https://login.xx.cn/mobile/login?access_token=A7E3D8CC98776F7C16F328B6 ...
- 正在开发纯BS的可在线编辑内容的电子病历编辑器
在线电子病历编辑器功能预览,支持Firefox/Chrome/Opera/UC/IE/Safari.演示地址 http://www.dcwriter.cn:9090/ 在WINFORM.NET中的效果 ...
- INFO - InstallShield中的InstallScript工程Setup.exe /s的使用细节
在InstallShield的各种工程类型中,Basic MSI工程Build出的安装包基于Windows Installer标准,所以默认就支持静默安装(至于如何静默安装,请自行补充相关知识).而对 ...
- AngularJS指令嵌套时link函数执行顺序的问题
今天研究指令嵌套时,发现子指令的link函数先于父指令的link函数执行. 这样和预想的顺序不一样. 也就是说,如果子指令的某个scope变量依赖于父指令传来的参数时,可能一直是undefinded比 ...
- mysql慢日志设置
mysql的慢日志查询对于sql的优化还是很有意义的,具体说下如何开启这个mysql慢查询日志(默认是开启的). 关于设置在mysql的官方手册或网上都有很多,但是要注意的是,mysql5.6与之前的 ...
- Chrome谷歌浏览器首页被改为Hao123导航怎么办|附各类解决方法【转】
软件小子:昨天偶然间发现自己的chrome浏览器的首页被篡改成hao123导航了,要是自己设置的还无所谓,但是后面还有尾巴.顿时就火了,又是哪款软件这么流氓,太无良了,我非常确定我肯定是没有勾选什么设 ...
- Mac OS 中设置VPN(pptp连接方式)
第一步:点击系统设置(如图) 第二步:点击网络,进入网络设置(如图) 第三步:点击+号-创建新服务,创建新的VPN网络连接(如图) 第四步:接口-中选-VPN, VPN类型-中选-PPTP,服务名称- ...