2012 winter training @HIT Day 2 解题报告

今天第二天,主要练习二分和枚举。其实我突然发现,当做题突然卡主的时候,不妨想想今天练习的是什么内容……

传送门http://acm.hit.edu.cn/hoj/contest/view?id=100128

 

Problem A:Crossed Ladders

此题导致本人郁闷一整天。。从哪说起呢 看到这道题觉得很像初中数学的平面几何,抄起家伙开始列方程,最初的想法就是把表达式写出来之后程序里几句话搞定。

最后方程是出来了,但是在尝试整理成x=?形式的时候失败了。。就连下午和同学出去蹦跶都还在想这道题……终于在晚饭之后数次尝试无果的情况下放弃解方程,感叹数学才70多分的孩子还是换一种方法把。。询问度娘后发现这是一道很经典甚至古老的数学题,wikipedia上一句话令在下恍然大明白!忘了原句是啥了,大意是:某方程可以用逼近的方式得出解……然后思路就哗哗的呀,想起今天的主题,想起初中的时候二分逼近求解的时候我还写过一个用二分法解一元二次方程的经历,然后就……无语了。哎,此题还是借了度娘一臂之力,甚是惭愧……

 1 /*This Code is Submitted by acehypocrisy for Problem 4000086 at 2012-01-19 22:45:39*/
2 #include <stdio.h>
3 #include <cmath>
4 #include <stdlib.h>
5
6 int main()
7 {
8 double x, y, c;
9 while (scanf("%lf %lf %lf", &x, &y, &c) == 3){
10 double w, wMax, wMin;
11 wMax = ((x < y) ? x : y);
12 wMin = 0;
13 w = wMax / 2;
14 double A = sqrt(x * x - w * w);
15 double B = sqrt(y * y - w * w);
16 while(fabs(A * B / (A + B) - c) > 0.0001){
17 if (A * B / (A + B) - c < 0){
18 wMax = w;
19 }else{
20 wMin = w;
21 }
22 w = (wMax + wMin) / 2;
23 A = sqrt(x * x - w * w);
24 B = sqrt(y * y - w * w);
25 }
26 printf("%.3f\n", w);
27 }
28 return 0;
29 }

 

Problem B:Prime Palindromes

这道题是hoj1004,我们的高级语言程序设计课当时的lab1(或者是lab2……记不清了),所以有现成的代码,很猥琐地直接贴了上去。。只不过比1004的时间限制更严格,好像佳男学长改之后是3s,之前是1s。

思路就是生成回文数然后再判断是否是素数,判断素数从3开始只判断奇数,试到<=sqrt,我是在生成回文数的时候就跳过了偶数。这样基本就完全无压力了,0.4s就完全可以给出输入 5 1000000000的输出。
这个代码是当时写的,其实我都很不好意思拿出来……生成回文数的地方很奇葩很暴力,完全可以写出既简洁又高效的代码的……哎,望各位看官莫笑。

 1 /*This Code is Submitted by acehypocrisy for Problem 4000087 at 2012-01-18 22:26:01*/
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <math.h>
5
6 int main(int argc, char *argv[])
7 {
8 unsigned int a,b,result[100000];
9 scanf("%u %u",&a,&b);
10
11
12 int i,i1,i2,i3,i4,i5;
13
14 int n=0;
15 result[0]=5;
16 result[1]=7;
17 result[2]=11;
18 n=3;
19
20 for (i1=1;i1<=9;i1+=2){
21 for (i2=0;i2<=9;i2++){
22 if (i1%2==0)
23 continue;
24 result[n]=i1*100+i2*10+i1;
25 n++;
26 }
27 }
28
29 for (i1=1;i1<=9;i1+=2){
30 for (i2=0;i2<=9;i2++){
31 for (i3=0;i3<=9;i3++){
32 if (i1%2==0)
33 continue;
34 result[n]=i1*10000+i2*1000+i3*100+i2*10+i1;
35 n++;
36 }
37 }
38 }
39
40 for (i1=1;i1<=9;i1+=2){
41 for (i2=0;i2<=9;i2++){
42 for (i3=0;i3<=9;i3++){
43 for (i4=0;i4<=9;i4++){
44 if (i1%2==0)
45 continue;
46 result[n]=i1*1000000+i2*100000+i3*10000+i4*1000+i3*100+i2*10+i1;
47 n++;
48 }
49 }
50 }
51 }
52
53 for (i1=1;i1<=9;i1+=2){
54 for (i2=0;i2<=9;i2++){
55 for (i3=0;i3<=9;i3++){
56 for (i4=0;i4<=9;i4++){
57 for (i5=0;i5<=9;i5++){
58 result[n]=i1*100000000+i2*10000000+i3*1000000+i4*100000+i5*10000+i4*1000+i3*100+i2*10+i1;
59 n++;
60 }
61 }
62 }
63 }
64 }
65
66
67 for (i=0;i<n;i++){
68 if (result[i]<a||result[i]>b)
69 continue;
70 int k,j=sqrt(result[i]);
71 int flag=0;
72 for (k=3;k<=j;k+=2){
73 if (result[i]%k==0){
74 flag=1;
75 break;
76 }
77 }
78 if (flag==1)
79 continue;
80 printf("%d\n",result[i]);
81 }
82
83 return 0;
84 }


Problem C:Fibonacci Extended

高级一点的斐波那契数列,在F(n-1)和F(n-2)前面多了系数A和B。而且是给出Fn,F0来求F1,也不太麻烦,就是在数据类型上要多做注意。我的两次WA全都献给long long了。

解题思想的关键部分就是用一个数组Fn[41][2]来保存Fn用F1和F0来表示时二者的系数。例如,F0 = 0 * F1 + 1 * F0,所以Fn[0][0] = 0, Fn[0][1] = 1,以此类推,Fn[i][0]存放的是F1的系数,[1]存放的是F0的系数。题目中给出N<=40,所以要有41个空间。最后就可以算出F1了。

要注意的是long long啊。。一定要注意呀。。。这道题居然猥琐的连系数都要用longlong来存,这样int情何以堪……

 1 /*This Code is Submitted by acehypocrisy for Problem 4000088 at 2012-01-19 22:10:56*/
2 #include <stdio.h>
3
4 long long Fn[41][2];
5
6 int main()
7 {
8 int A, B, N, F0;
9 long long FN;
10 while (scanf("%d %d %d %d %lld", &A, &B, &N, &F0, &FN) == 5){
11 int i;
12 Fn[0][0] = 0;
13 Fn[0][1] = 1;
14 Fn[1][0] = 1;
15 Fn[1][1] = 0;
16 Fn[2][0] = A;
17 Fn[2][1] = B;
18 for(i = 3; i <= N; i++){
19 Fn[i][0] = A * Fn[i - 1][0] + B * Fn[i - 2][0];
20 Fn[i][1] = A * Fn[i - 1][1] + B * Fn[i - 2][1];
21 }
22 int F1 = (FN - Fn[N][1] * F0) / Fn[N][0];
23 printf("%d\n", F1);
24 }
25 return 0;
26 }
27

 

Problem D:Minimum Area

和整数点相关的问题,最开始暴力枚举奉献了一次TLE,然后学乖了用二分法。。。

其实核心问题就是如何寻找最小的C,中间统计整数点的时候用了一小点点的“优化”(虽然有点可有可无,效果一点都不明显……),就是当当前统计的那一列的点只有一个的时候,他往后的所有列的点就全是1了,这个时候加一下就可以break了。。最后微积分学告诉我们,答案应该是C * lnC - C + 1 ……库函数里的log()就是以e为底的。

 

 1 /*This Code is Submitted by acehypocrisy for Problem 4000089 at 2012-01-19 21:27:36*/
2 #include <stdio.h>
3 #include <math.h>
4
5 int main()
6 {
7 int T;
8 scanf("%d", &T);
9 while(T--){
10 int N;
11 scanf("%d", &N);
12 int C, Cmin, Cmax, count;
13 Cmax = N;
14 Cmin = 0;
15 while (Cmax - Cmin > 1){
16 C = (Cmax + Cmin) / 2;
17 count = 0;
18 for (int j = 1; j <= C; j++){
19 count += C / j;
20 if (C / j == 1){
21 count += C - j;
22 break;
23 }
24 }
25 if(count >= N){
26 Cmax = C;
27 }else{
28 Cmin = C;
29 }
30 }
31 C = Cmax;
32 double result = C * log(C) - C + 1;
33 printf("%.4f\n", result);
34 }
35 return 0;
36 }

现在正好是0:00 恩。。。明天的题据说用java更给力?明天的题明天再说吧。。。感谢老妈陪我到凌晨。。。

转载于:https://www.cnblogs.com/tuesday/archive/2012/01/20/2327688.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修改myeclipse中web项目的工作路径或默认路径

如何修改myeclipse中web项目的工作路径或默认路径 博客分类&#xff1a; J2EE开发技术指南安装好myeclipse后&#xff0c;第一次启动myeclipse时&#xff0c;都会弹出会弹出Workspace Launcher对话框&#xff0c;叫你设置myeclipse工作路径。通常我们设置完了后&#xff0c;为了…

FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

出现问题场景&#xff1a;作为刚接触FreeRTOS实时操作系统的菜鸟&#xff0c;我在练习一个程序功能&#xff1a;按键3按下&#xff0c;将LED闪烁的任务挂起&#xff1b;按键4按下&#xff0c;将LED闪烁的任务恢复到就绪。按键使用外部中断。恢复就绪的语句是xTaskResumeFromISR…

无法连接到远程的SQL SERVER2000

1、先保证ping通 2、在dos下写入telnet ip 1433不会报错 3、用ip连如企业管理器&#xff1a; 企业管理器-->右键SQlserver组-->新建sqlserver注册-->下一步-->写入远程实例名&#xff08;IP,机器名&#xff09;-->下一步-->…

妙趣横生算法 3:寻找相同元素的指针

实例说明 在已知两个从小到大的有序的数表中寻找出现的相同元素在第一个数表中的指针。 运行结果 实例解析 设两个数表的首元素指针分别为pa和pb,两个数表分别有元素an和bn个。另外&#xff0c;引入两个指针变量ca和cb,分别指向两个数表的当前访问元素。由于两个数表从小到大有…

PostgreSQL学习手册(PL/pgSQL过程语言)【转】

原文http://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html 一、概述&#xff1a; PL/pgSQL函数在第一次被调用时&#xff0c;其函数内的源代码(文本)将被解析为二进制指令树&#xff0c;但是函数内的表达式和SQL命令只有在首次用到它们的时候&#xff0c;…

Nginx 笔记与总结(14)expires 缓存设置

设置缓存&#xff0c;可以提高网站性能。 当网站的部分内容&#xff0c;比如新闻站的图片&#xff0c;一旦发布就不太可能发生更改&#xff0c;此时需要用户在访问一次页面之后&#xff0c;把该页面的图片缓存在用户的浏览器端一段时间&#xff0c;就可以用到 nginx 的 expires…

WP7应用开发笔记(8) IP输入框控件

因为需要在手机上配置IP&#xff0c;我需要一个界面输入IP地址&#xff0c;虽然直接使用TextBox&#xff0c;但是这样不太友好&#xff0c;我希望能够有和Windows网络设置上一样的IP输入框。所以决定写一个自定义控件。 设计控件外观 4个TextBox和3个显示“.”的TextBlock就可以…

C#并发实战Parallel.ForEach使用

前言&#xff1a;最近给客户开发一个伙食费计算系统&#xff0c;大概需要计算2000个人的伙食。需求是按照员工的预定报餐计划对消费记录进行检查&#xff0c;如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则。一开始我的想法比较简单&#xff0c;直接用一…

[MSDN]ASP.NET MVC2(5)MVCRoute和urls

说明&#xff1a;本内容来自微软的webcast&#xff0c;讲师为苏鹏。视频没有书方便(想看哪页就看哪页)&#xff0c;所以抄录要点和老师语录。 内容介绍 - url和routes介绍 - routes匹配url的工作方式 - 使用routes Router对象mvc运转的核心。 预备知…

一个、说到所有的扩展指标

版权声明&#xff1a;本文博客原创文章&#xff0c;博客&#xff0c;未经同意&#xff0c;不得转载。

张小娴的文章,喜欢的,贴来存档

爱情是不能报复的爱情是不能报复的。一旦采取报复行动&#xff0c;你只会失去它。有些女人很傻&#xff0c;她以为以牙还牙就可以挽回一段爱情。男朋友在外面有女人&#xff0c;于是&#xff0c;她也去找男人。然而&#xff0c;两者的分别却是她男朋友找自己喜欢的女人&#xf…

MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化

当你希望在 Map 中不使用 String 为 Key&#xff0c;那么你需要使用 MessagePackKeySerializer 来为 key 进行序列化。 本测试方法&#xff0c;可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serializ…

批量获取远程计算机MAC

功能及用途 用于采集局域网所有计算机信息主要是mac地址&#xff0c;ip地址&#xff0c;主机名。 格式化读写函数 fprintf()格式化写 fscanf()格式化读 使用说明 IP文件&#xff1a;ip.txt IP文件格式&#xff1a;ip空格其他信息 IP文件和该执行文件放同一目录 代码 // ALLMAC.…

网络通信和网络编程

一、软件结构 C/S Client/Server B/S Browser/Server 二、网络通信协议 1、协议分类 UDP 应用&#xff1a; TCP/IP 三、网络编程三要素 1、协议&#xff08;UDP、TCP/IP&#xff09; 2、IP地址 3、端口号 转载于:https://www.cnblogs.com/wmqiang/p/11333351.html

[Android] 输入系统(二)

在上一篇文章的最后&#xff0c;我们发现InputDispatcher是调用了InputChannel->sendMessage把键值发送出去&#xff0c;那么相应的&#xff0c;也有接收键值的地方。接收函数是InputChannel->receiveMessage。 在InputConsumer::consume内找到了receiveMessage&#xff…

字体--Ubuntu手记之系统配置

今天上午终于实现了一次无windows办公。但是一上午下来竟然感到有些眼睛花&#xff0c;也不知道是因为ubunbtu的字体没配好&#xff0c;于是开始琢磨着下几个字体&#xff0c;还是照老规矩&#xff0c;先到社区里面搜。找到一个比较好的地址里面的字体比较多&#xff0c;"…

MM 常用table

*------------------------------------------------* MM 模块总结*------------------------------------------------mara " 物料主表makt " 物料描述 likp " 销售订单-Headerlips " 销售定单-Itemproj " 项目定义prps " 采购定…

TCP协议和套接字

一、TCP通信概述&#xff0c;逻辑连接就是三次握手 二、客户端和服务端实现TCP协议通信基本步骤 1、客户端套接字对象 Socket 2、服务端套接字ServerSocket 客户端补充完整代码&#xff1a;除了创建各自的Socket对象有关代码&#xff0c;其他代码一样&#xff0c;就输出流的输出…

【常用术语缩写】

---abbreviation--- href&#xff1a;Hypertext Reference的缩写。意思是超文本引用&#xff1b;gc()方法&#xff1a;garbage collector&#xff1b;MDI(Multiple Document Interface)就是所谓的多文档界面;ifconfig: network interfaces configuring&#xff0c;网络接口配置…

[摘抄]MySQL数据库系统的常规管理介绍

在运行数据库系统时&#xff0c; MySQL的使用相当简单&#xff0c;且进行MySQL安装和使用所需的工作也很少。然而&#xff0c;不论您是什么级别的专家&#xff0c;MySQL的安装程序都不能自动运行。必须有人来监视它以确保它能顺利和有效地运行&#xff0c;有时还必须知道当问题…