// 杭电上的重现赛:http://acm.hdu.edu.cn/contests/contest_show.php?cid=867

// 杭电6555~6566可交题

A - The Fool

题目大意:

求∑(1,n) [n/i] 的奇偶性。

分析及代码:

这个求和可以分块计算,复杂度O(√N),完全可行。

我觉得是水题就打表找规律了,发现前3项1~3结果是奇数,接着5项4~8结果是偶数,再接着7项是奇数,再然后9项时偶数......如此交替。

那么只需要计算n在哪一段就能确定奇偶性了,时间复杂度O(1)。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; int main() {
int t = , T; cin>>T;
while(t<T) {
int n;
scanf("%d", &n);
int k = sqrt(n+);
if(k*k<n+) ++k; printf("Case %d: ", ++t);
if(k&) printf("even\n");
else printf("odd\n");
} return ;
}

B - The World

题目大意:

世界时间换算问题,本题只考虑4个城市,每次给两个城市和其中一个城市的时间,求另一城市的时间。

分析及代码:

听说队友A不掉,然后又看不懂样例了,遂尝试解题。

本题还是有点坑的,如果给定的时间都是标准24小时制,那就非常简单了,加加减减就完事了。

看了百度百科才明白什么是真正的12小时制

十二小时制是一个时间规则把一日二十四小时分为两个时段,分别为上午(拉丁文ante meridiem表示中午之前)和 下午(拉丁文post meridiem表示中午之后)。每个时段由十二个小时构成,以数字12、1、2、3、4、5、6、7、8、9、10、11依次序表示。

所以12小时制里是不存在 0:30 AM 和 0:30 PM 的!!!

注意24小时制与12小时的转化后,就没什么问题了O.O

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<map>
using namespace std;
map<string, int> mp;
int main() { mp["Beijing"] = ;
mp["Washington"] = -;
mp["London"] = ;
mp["Moscow"] = ; string city1, city2;
int h, min;
string ap;
int t = , T; cin>>T;
while(t<T) {
scanf("%d:%d", &h, &min);
cin>>ap;
cin>>city1;
cin>>city2; if(ap=="PM" && h!=) h += ; // 转化成24小时制
if(ap=="AM" && h==) h = ; h += mp[city2] - mp[city1];
printf("Case %d: ", ++t); if(h>=) {
printf("Tomorrow ");
h -= ;
}else if(h<) {
printf("Yesterday ");
h += ;
} else {
printf("Today ");
} if(h>=) printf("%d:%02d PM\n", h==?:h-, min);
else
printf("%d:%02d AM\n", h==?:h, min); } return ;
}

E - The Tower

题目大意:

 计算几何题。给你一个高h,底面半径r的圆锥体,以及一个点(x0, y0, z0)和速度(vx, vy, vz),求什么时候落到圆锥面上。

分析及代码:

一看很简单啊,求直线方程与圆锥面的交点就完事了。

整了半天把圆锥面的方程写出来了(开始写错WA了一发):

  (z - h)^2 = h^2/r^2 * (x^2+y^2)

直线方程

  (x-x0)/vx = (y-y0)/vy = (z-z0)/vz

联立消去x, y

解一元二次方程求出z

注意z的范围0<=z<=h,筛选过后选距离z0近的一点,fabs((z-z0)/vz)就是答案。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define sqr(x) ((x)*(x)) int main() {
double r, h;
double x0, y0, z0, vx, vy, vz;
int t = , T; cin>>T;
while(t<T) { scanf("%lf %lf", &r, &h);
scanf("%lf %lf %lf", &x0, &y0, &z0);
scanf("%lf %lf %lf", &vx, &vy, &vz);
printf("Case %d: ", ++t); if(fabs(vz)<1e-) { // 一定要特殊处理,后面的计算vz作了分母
if(fabs(vy)<1e-) {
double xx = sqr((z0-h)*(r/h)) - y0*y0;
xx = sqrt(xx);
printf("%.10lf\n", min(fabs(xx-x0), fabs(-xx-x0))/fabs(vx));
} else {
double a = + sqr(vx/vy);
double b =*vx/vy*(x0-vx/vy*y0);
double c = sqr(x0-vx/vy*y0) - sqr(r/h)*sqr(z0-h); double y1 = (-b+sqrt(b*b-*a*c))//a;
double y2 = (-b-sqrt(b*b-*a*c))//a;
printf("%.10lf\n", min(fabs(y1-y0), fabs(y2-y0))/fabs(vy));
}
continue;
}
double a = (vx*vx+vy*vy)/(vz*vz) - r*r/(h*h);
double b = *(vx/vz*(x0-vx/vz*z0)+vy/vz*(y0-vy/vz*z0)) + *r*r/h;
double c = sqr(x0-vx/vz*z0) + sqr(y0-vy/vz*z0) - r*r;
// printf("%lf %lf %lf\n", a, b, c); if(fabs(a)<1e-) { // 实际没用,可以删掉
printf("%.10lf\n", fabs((-c/b-z0)/vz));
continue;
}
double z1 = (-b+sqrt(b*b-*a*c))//a;
double z2 = (-b-sqrt(b*b-*a*c))//a; // double zz = fabs(z1-z0)<fabs(z2-z0)?z1:z2;
// double xx = x0 + vx/vz*(zz-z0);
// double yy = y0 + vy/vz*(zz-z0);
double zz;
if(z1>h) zz = z2;
else if(z2>h) zz = z1;
else zz = fabs(z1-z0)<fabs(z2-z0)?z1:z2; printf("%.10lf\n", fabs((zz-z0)/vz)); } return ;
}

PS: 看到题解令(x-x0)/vx = (y-y0)/vy = (z-z0)/vz = t, 用t分别表示x, y, z再带入圆锥方程,直接解出t,貌似可以不用特殊处理(vz=0的情况)。

G - High Priestess

题目大意:

给你数量10^4个阻值为1欧的电阻,求通过串并联得到一个阻值为r的等效电阻的方案,精度至少为1e-8。

分析及代码:

将阻值r转化为连分数的形式,然后根据串并联公式将分式里的+合理转化成相应形式。

具体来说,连分数的数位ki有奇数个的时候:

  1. 最后一个数字先并联(如1/3就是三个1欧并联);
  2. 将接下来的数字串联,并且接着与前一个电路串联
  3. 再将接下来的数字并联,并且接着与前一个电路并联
  4. 交替进行2-3两步,直到数位枚举完毕。

连分数的数位为偶数时,跟上面过程相似,不同的是第一步为串联,以后步骤的串联与并联交换即可。

例如组成 r = 0.33 = 1/(3 + 1/33)

  1. 33个1欧电阻串联得到33欧
  2. 3个1欧并联得到1/3欧,1/3与33并联得到 33/100,即0.33。
  3. 两个数字枚举完,结束。

 

代码WA了,还在debug...


(未完待续。。。)

2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)的更多相关文章

  1. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std; typedef long lo ...

  2. 2018CCPC吉林赛区(重现赛)部分题解

    The Fool 题目链接 Problem Description The Fool is numbered 0 – the number of unlimited potential –and th ...

  3. [2018CCPC吉林赛区(重现赛)- 感谢北华大学] 补题记录 躁起来

    1007 High Priestess 埃及分数 1008 Lovers 线段树维护取膜意义下的区间s和. 每个区间保存前缀lazy和后缀lazy. #include <iostream> ...

  4. 2018CCPC吉林赛区

    传送门 A - The Fool 整除分块即可. B - The World 模拟即可. C - Justice 题意: 给出\(n\)个数\(k_i\),每个数的权值为\(\frac{1}{2^{k ...

  5. 2018CCPC吉林赛区(重现赛)

    http://acm.hdu.edu.cn/contests/contest_show.php?cid=867 A题,直接分块,不知道正解是什么. #include<bits/stdc++.h& ...

  6. 2018-2019 ACM-ICPC 焦作赛区 部分题解

    题目链接:https://codeforces.com/gym/102028 B. Ultraman vs. Aodzilla and Bodzilla 题意: 两只怪兽,它们的生命和攻击分别为hpA ...

  7. 2018CCPC 吉林现场赛 赛后总结

    一直以来都没有比赛完写总结的习惯,导致前面几次比赛都没有写过总结. 这是我写的第一场总结把,有时间有想法还记得细节的话再把前面几次比赛的总结给补上把. 热身赛: 热身赛的时候,写的比较急想着快点做出题 ...

  8. HDU 6556 (2018CCPC吉林 B题)

    ### HDU 6556 题目链接 ### 题目大意: 给你四个国家的时区,告诉你 A 国家的时间,让你输出这时候在 B 国家的时间,还需要输出对于 A 国家来说这是 昨天.今天 还是 明天. 分析前 ...

  9. 2018ccpc吉林 E:THE TOWER——数形结合

    题目 链接 给你一个圆锥(位于坐标原点,告诉你高h 和底面半径 r),和一个点(x,y,z)并告诉你这个点的速度, 让你求点和圆锥相撞的最小时间(保证一定相撞) 分析 易知,将直线的参数方程与圆锥曲面 ...

随机推荐

  1. 以 Ubuntu 为例:清理 linux 系统的"垃圾"文件

    clean 命令删除所有的软件安装包. 在网络连接正常的情况下,我们执行软件安装命令,软件安装结束后,以 .deb 为后缀的软件包就不再需要了.这种情况和 Windows 平台.手机的安卓平台上的情况 ...

  2. Navicat Premium_11.2.7 安装及破解,连接Oracle数据库

    下载Navicat Premium_11.2.7简体中文版, 安装 Navicat 11 for Windows 系列原版程序.Navicat | 下载 Navicat 14 天 Windows.Ma ...

  3. Python学习笔记(五)——异常处理

    Python 异常总结 异常名称 解释 AssertionError 断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点 OSError ...

  4. 蛮好用的Gungho重点工作督查督办跟踪管理系统

    重点工作督查督办跟踪管理系统可以实现: 为了确保上级重要决定.指示和本单位重大目标和工作部署及时落到实处,确定实效,提升办事效率. 重点工作督查督办事项包括: 1)上级单位或领导的批示指示: 2)公司 ...

  5. python读文件判断是否已到EOF

    python读文件判断是否已到EOF,也即结尾,一般其它语言都是以EOF直接来判断的,比如 if ( fp.read(chunk_size) == EOF), 但python到结尾后是返回空字符串的, ...

  6. BeanPostProcessor原理--使用讲解

    <Spring源码解析>笔记 BeanPostProcessor原理学习 在学习BeanPostProcessor的原理学习完之后,对Spring如何使用充满好奇,尝试使用例子进行理解,以 ...

  7. VS开发工具的常用插件

    转 http://www.spersky.com/post/vsPlugins.html 我目前主要用的是Hide Main Page——公司配给的电脑屏幕分辨率好小,还是1366*768的,去掉头可 ...

  8. 玩转gulp之gulp编译less

    用好gulp grunt webpack让前端编程走向自动化,是作为一个前端开发必须学会的技能,不然逼格怎么提升的上去呢... 然后教大家如何用gulp装逼.一点点的学,都是相通的嘛 1. 安装nod ...

  9. jquery学习笔记(一):选择器

    内容来自[汇智网]jquery学习课程 1.1 基础选择器 选择器 功能 返回值 #id 根据给定的id匹配一个元素 单个元素 element 根据给定的元素名匹配所有元素 元素集合 .class 根 ...

  10. 一些关于Hibernate延迟加载的误区

    最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助. 首先是第一个误区:延迟加 ...