算法课作业1

https://vjudge.net/contest/581138

A - Humidex

模拟题

题目大意

给三个类型数字通过公式来回转化

思路

求e的对数有log函数,不懂为什么不会出精度错误,很迷,给的三个数字也没有顺序,需要多判断。

#include<cstdio>
#include<iostream>
#include<cmath>
//Sometimes weather reports give the temperature and dewpoint,
// or the temperature and humidex
/*
D 15.0 H 34.0
D 25.0 H 42.3
E
*/
using namespace std;
int main()
{char a,b;double a1,b1;while(1){cin>>a;if(a=='E')break;cin>>a1>>b>>b1;if(a=='T'&&b=='D'||a=='D'&&b=='T'){ if(a=='D'&&b=='T')swap(a1,b1);double e=6.11*(pow(2.718281828,5417.7530*((1/273.16)-(1/(b1+273.16)))));double h=0.5555*(e-10.0);double humidex = a1+h;printf("T %.1lf D %.1lf H %.1lf\n",a1,b1,humidex);}else if(a=='T'&&b=='H'||a=='H'&&b=='T'){if(a=='H'&&b=='T')swap(a1,b1);double dewpoint;double h=b1-a1;double e=h/0.5555+10.0;double x=log(e/6.11)/5417.753;dewpoint=1/(1/273.16-x)-273.16;printf("T %.1lf D %.1lf H %.1lf\n",a1,dewpoint,b1);}else // d h{if(a=='H'&&b=='D')swap(a1,b1);double e=6.11*pow(2.718281828,5417.7530*((1/273.16)-(1/(a1+273.16))));double h=(0.5555)*(e - 10.0);double temperature=b1-h;printf("T %.1lf D %.1lf H %.1lf\n",temperature,a1,b1);}}}

B - Moving Tables

题目大意

两排都是房间,一排两百个房间,上面按奇数,下面按偶数编号,之后房间两两之间要搬桌子,搬桌子期间中间通道全部占用,可同步进行,搬一次10分钟,求最小时间

思路

就把中间通道编号,奇数和偶数的编号调成1-200,之后对区间进行累加,重合次数最多的就是最小时间。注意坑就是,区间不一样从小到大,l,r要判断一下大小。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int box[205];
/*
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
*/
int main()
{int T;cin>>T;while(T--){int n;cin>>n;memset(box,0,sizeof(box));int maxx=0;for(int i=1; i<=n; i++){int l,r;cin>>l>>r;if(l%2==1)l=l+1;if(r%2==1)r=r+1;l=l/2;r=r/2;if(l>r)swap(l,r);for(int j=l; j<=r; j++){box[j]++;maxx=max(box[j],maxx);}}printf("%d\n",maxx*10);}}

C - Counterfeit Dollar

题意

有12个硬币,现在知道其中有一个假的,已知称三次天平可以找出来假硬币,假硬币有可能轻或重,每次给三组称量结果,求出哪个是硬币,是轻是重。

思路

好丑陋的代码,不懂为啥我写的这么长,思路不太好吧,我的思路就是去暴力枚举每一个假硬币,并且枚举它是轻的假还是重的假,用box数组记录每次天平上各个位置的重量,真硬币就算重量1,假轻硬币就重量0,假重硬币就重量10,最后判断,找出来就行,模拟题,写的是真费劲,OJ还不支持string 用的char还查了一堆函数,费劲,代码能力现在下降严重。

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
/*
1
ABCDEF GHIJKL up 
ABC DEF even 
I J down 
*/
int box[20];
int main()
{int n;cin>>n;while(n--){char a[3][15],b[3][15],c[3][15];memset(box,0,sizeof(box));for(int i=0; i<3; i++){scanf("%s %s %s",a[i],b[i],c[i]);strcat(a[i],b[i]);}for(int i=1; i<=12; i++) // 枚举每个都是假币{char x='A'+i-1;// 假币轻int flagt=0;int pos,lenn;char t[20];for(int j=0; j<3; j++){memset(box,0,sizeof(box));int len=strlen(a[j]);for(int k=0; k<len; k++){if(a[j][k]!=x)box[k]++;if(a[j][k]==x){pos=k;lenn=len;
//						t=c[j];strcpy(t,c[j]);}}int box1=0,box2=0;for(int k=0; k<len/2; k++)box1+=box[k];for(int k=len/2; k<len; k++)box2+=box[k];if(strcmp(c[j],"even")==0&&box1==box2) flagt++;if(strcmp(c[j],"up")==0&&box1>box2) flagt++;if(strcmp(c[j],"down")==0&&box1<box2) flagt++;
//				printf("%d %d %c %d len=%d\n",box1,box2,x,flagt,len);}//假币重if(flagt!=3){flagt=0;for(int j=0; j<3; j++){memset(box,0,sizeof(box));int len=strlen(a[j]);for(int k=0; k<len; k++){if(a[j][k]!=x)box[k]++;if(a[j][k]==x){box[k]+=10;pos=k;lenn=len;
//							t=c[j];strcpy(t,c[j]);}}int box1=0,box2=0;for(int k=0; k<len/2; k++)box1+=box[k];for(int k=len/2; k<len; k++)box2+=box[k];if(strcmp(c[j],"even")==0&&box1==box2) flagt++;if(strcmp(c[j],"up")==0&&box1>box2) flagt++;if(strcmp(c[j],"down")==0&&box1<box2) flagt++;}}if(flagt==3){if(pos<lenn/2){if(strcmp(t,"up")==0)printf("%c is the counterfeit coin and it is heavy.\n",x);elseprintf("%c is the counterfeit coin and it is light.\n",x);}else{if(strcmp(t,"up")==0)printf("%c is the counterfeit coin and it is light.\n",x);elseprintf("%c is the counterfeit coin and it is heavy.\n",x);}break;}}}}

D - Radar Installation

题目大意

雷达部署在x轴,给出半径,陆地在任意位置,现在已知所有陆地位置,要求使用最少雷达覆盖所有陆地。

思路

以每个陆地为圆心画圆,交x轴出现线段,线段长度即为这个陆地所需要的雷达区间,对每个陆地转化为一个线段,将线段按右端点排序,之后从左往右遍历线段,每次呢取端点的最右端作为雷达,下一个线段出现左端点在雷达左右两边的情况,在左边呢就不用管,在右边呢就更新右端点为新的雷达。
这个题,输入格式好奇怪,我觉得是个错题。思路对了,照着别的代码硬改出来。为什么n=0能过?不应该n0&&d0吗?

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;struct node
{double l,r;
} a[1005];
int cmp(node a,node b)
{return a.r<b.r;
}
int main()
{int cnt=0;int n;double d;while(scanf("%d%lf",&n,&d)){cnt++;if(n==0) break;int flag=0;for(int i=1; i<=n; i++){double x,y;scanf("%lf%lf",&x,&y);
//			if(d<y||d<=0)if(d<y||d<=0){flag=1;continue;}double c=sqrt(1.0*d*d-1.0*y*y);a[i].l=(double)x-c;a[i].r=(double)x+c;
//			printf("%lf %lf\n",a[i].l,a[i].r);}if(flag==1){printf("Case %d: -1\n",cnt);continue;}sort(a+1,a+1+n,cmp);int ans=0;double pos=-100000000;for(int i=1; i<=n; i++){if(pos<a[i].l){pos=a[i].r;ans++;}}printf("Case %d: %d\n",cnt,ans);}
}

E - Truck History

题目大意

给n个卡车,每个卡车的编号由一个七个小写字母的字符串组成,每个卡车的编号唯一,已知一开始只有一辆卡车的编号,一个卡车可以向另一个卡车转换,代价是对应七个位置的不同字母的个数,现在要求出出现所有卡车编号出现的最小代价,最后结果取倒数。

思路

对于每一个卡车都可以当作是一个结点,做一个完全图,卡车两两转换的代价就是边权,求所有卡车出现的最小代价就是最小生成树,因为是点稠密所以选prim。

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int a[2005][2005];
char truck[2005][10];
int n;
int v[2005];
int d[2005];
void prim()
{memset(d,0x3f,sizeof(d));memset(v,0,sizeof(v));d[1]=0;for(int i=1;i<n;i++){int x=0;for(int j=1;j<=n;j++){if(!v[j]&&(x==0||d[j]<d[x])) x=j;}v[x]=1;for(int y=1;y<=n;y++)if(!v[y]) d[y]=min(d[y],a[x][y]);}}
int main()
{while(scanf("%d",&n)&&n!=0){for(int i=1; i<=n; i++)scanf("%s",truck[i]);for(int i=1; i<=n; i++)for(int j=1; j<=n; j++){int cnt=0;for(int k=0; k<7; k++)if(truck[i][k]!=truck[j][k])cnt++;a[i][j]=cnt;}prim();int ans=0;for(int i=2;i<=n;i++)ans+=d[i];printf("The highest possible quality is 1/%d.\n",ans);}}

G - Balance

题目大意

一个天平,左右可以放一些砝码,不同的位置会有不同的力矩,给定c个位置,天平中间是0,给g个砝码,砝码的重量各个不同。求一共有多少种方案使得天平平衡。

思路

dp题,设dp[i][j]表示,使用了前i个砝码,目前天平右边减去左边重量的差值为j的方案数,枚举所有砝码,枚举所有重量差值,再枚举所有位置,差值存在负数,范围为 -15 * 20 * 25 到15 * 20 * 25 ,最远力臂15* 最大砝码20* 25最多数量,范围改为 0-15000,默认7500为平衡点。之后转移方案就行。

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int dp[21][15005]; 
//dp[i][j]: 放了前i个物品,砝码右边减去砝码左边重量的差值为j时候的方案数 
int pos[25];
int fama[25];
int main()
{int c,g;scanf("%d%d",&c,&g);for(int i=1;i<=c;i++)scanf("%d",&pos[i]);for(int i=1;i<=g;i++)scanf("%d",&fama[i]);dp[0][7500]=1;for(int i=1;i<=g;i++)	for(int j=0;j<=15000;j++){for(int k=1;k<=c;k++)if(j+fama[i]*pos[k]<=15000)dp[i][j+fama[i]*pos[k]]+=dp[i-1][j];}printf("%d",dp[g][7500]);	
}

H - Cow Bowling

题目大意

从顶点往下向左或向右,走到最下面,找到一条累加和最大的值。

思路

数字三角形经典题

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int dp[355][355];
int m[355][355];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)scanf("%d",&m[i][j]);}for(int i=1;i<=n;i++)dp[n][i]=m[n][i];for(int i=n-1;i>=1;i--)for(int j=1;j<=i;j++){dp[i][j]=m[i][j]+max(dp[i+1][j],dp[i+1][j+1]);}printf("%d",dp[1][1]);
}

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

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

相关文章

C++设计模式_04_Strategy 策略模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Strategy 策略模式&#xff0c;和上篇模板方法Template Method一样&#xff0c;仍属于“组件协作”模式&#xff0c;它与Template Method有着异曲同工之妙。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码演示Stra…

STP介绍

目录 STP概述 二层环路带来的问题 1.广播风暴 2.MAC地址漂移问题 3.多帧复制---这个好理解&#xff0c;同一个数据帧被重复收到多次&#xff0c;被称为多帧复制。 802.1D生成树 STP的BPDU BPDU主要分为两大类 配置BPDU RPC COST 配置BPDU的工作过程 TCN BPDU TCN…

2023年以就业为目的学习Java还有必要吗?(文末送书)

目录 一、活力四射的 Java二、从零开始学会 Java三、准备工作四、基础知识五、进阶知识六、高级知识七、结语参与方式 大家好&#xff0c;我是哪吒。 文末送5本《Java编程动手学》 今天来探讨一个问题&#xff0c;现在学 Java 找工作还有优势吗&#xff1f; 在某乎上可以看到…

RISC-V架构学习——C语言内嵌汇编总结

1、C语言内嵌汇编的作用 &#xff08;1&#xff09;优化&#xff1a;对于特别重要代码进行优化&#xff0c;出于性能的考虑&#xff1b; &#xff08;2&#xff09;C语言需要借助汇编指令来实现特殊功能。比如&#xff1a;C语言中访问系统寄存器就需要借助CSR指令&#xff1b; …

Python 使用raise引发异常

视频版教程 Python3零基础7天入门实战视频教程 当程序出现错误时&#xff0c;系统会自动引发异常。除此之外&#xff0c;Python也允许程序自行引发异常&#xff0c;自行引发异常使用raise语句来完成。 一般是业务逻辑上&#xff0c;业务异常问题&#xff0c;我们可以自行引发…

Soft-Serve小巧强大-轻量级Git服务

文章目录 前言一、Soft-Serve官方解释&#xff1a;我的要求 二、使用步骤我的环境公钥、私钥生成安装镜像参数解释&#xff1a; 配置config.yamlconfig 实操创建用户及绑定公钥创建代码仓库及添加合作者之后就是 git 基本操作了 总结 前言 用过 Gitlab, 也挺好用。 遇到几个问…

十一、MySql的事务(上)

文章目录 一、引入&#xff08;一&#xff09;CURD不加控制&#xff0c;会有什么问题&#xff1f;&#xff08;二&#xff09;CURD满足什么属性&#xff0c;能解决上述问题&#xff1f; 二、什么是事务&#xff1f;三、事务的特性&#xff08;一&#xff09;原子性&#xff1a;…

数据库计算机三级等级考试--数据库技术相关知识点和笔记

数据库计算机三级等级考试–数据库技术 计算机三级等级考试笔记,是博主通过计算机三级数据库技术考试的相关笔记&#xff0c;此篇博客&#xff0c;不仅适合需要考计算机三级考试的各位考生&#xff0c;也适合在职场处理关于数据库的部分操作&#xff0c;个人认为算是一篇使用性…

视频监控管理平台/视频汇聚/视频云存储EasyCVR安全检查的相关问题及解决方法3.0

智能视频监控系统/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力&#xff0c;作为安防视频监控综合管理平台&#xff0c;它支持多协议接入、多格式视频流分发&#xff0c;视频监控综合管理平台EasyCVR支持海量视频汇聚管理&#xff0c;可应用在多样化的场景上&…

Matlab数组操作教程

Matlab是一种强大的数值计算和科学编程语言&#xff0c;它提供了许多强大的数组操作功能。在本教程中&#xff0c;我们将介绍一些常用的Matlab数组操作&#xff0c;并提供一些示例代码来帮助您更好地理解。 1. 创建数组在Matlab中&#xff0c;可以使用以下方法创建数组&#x…

python 学习笔记(6)—— Flask 、MySql

目录 Flask 1、起步 2、渲染项目的首页 3、处理无参数的 GET 请求 4、处理有 query 参数的 GET 请求 6、处理 params 参数的 get 请求 6、处理 application/json 类型请求体的 POST 请求 7、根据参数渲染模板页面 8、上传文件 数据库操作&#xff08;mysql&#xff0…

「聊设计模式」之中介者模式(Mediator)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发过程中&#xff0c;我们通常会遇到一个问题&…

(二)随机变量的数字特征:探索概率分布的关键指标

文章目录 &#x1f34b;1. 随机变量的数学期望&#x1f34b;1.1 离散型随机变量的数学期望&#x1f34b;1.2 连续型随机变量的数学期望 &#x1f34b;2. 随机变量函数的数学期望&#x1f34b;2.1 一维随机变量函数的数学期望&#x1f34b;2.2 二维随机变量函数的数学期望 &…

Hive 数据仓库介绍

目录 ​编辑 一、Hive 概述 1.1 Hive产生的原因 1.2 Hive是什么&#xff1f; 1.3 Hive 特点 1.4 Hive生态链关系 二、Hive架构 2.1 架构图 2.2 架构组件说明 2.2.1 Interface 2.2.1.1 CLI 2.2.1.2 JDBC/ODBC 2.2.1.3 WebUI 2.2.2 MetaData 2.2.3 MetaStore 2.2…

巨人互动|Facebook海外户Facebook客户反馈分数

Facebook客户反馈分数是一项用于衡量用户对Facebook产品和服务满意度的指标。该指标被广泛应用于各种调研和评估活动&#xff0c;帮助Facebook了解用户对其平台和功能的意见和建议&#xff0c;并从中识别出改进的机会。 巨人互动|Facebook海外户&Facebook新闻提要的算法&am…

Python 文件写入操作

视频版教程 Python3零基础7天入门实战视频教程 w模式是写入&#xff0c;通过write方法写入内容。 # 打开文件 模式w写入&#xff0c;文件不存在&#xff0c;则自动创建 f open("D:/测试3.txt", "w", encoding"UTF-8")# write写入操作 内容写入…

浅谈C++|运算符重载

重载原因 C 中的运算符重载是一种特性&#xff0c;允许程序员定义自定义类类型的运算符操作。通过运算符重载&#xff0c;可以对类对象执行类似于内置类型的操作&#xff0c;例如加法、减法、乘法等。 运算符重载通过定义特定的成员函数或非成员函数来实现。成员函数的运算符重…

Spring 依赖注入和循环依赖

一.依赖注入的方式 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种软件设计模式和编程技术&#xff0c;用于实现类之间的解耦和依赖关系的管理。它的核心思想是&#xff1a;在对象创建时&#xff0c;由外部容器负责将该对象所依赖的其他对象&a…

【react】慎用useLayoutEffect转而使用useEffect

由于useLayoutEffect钩子是在dom获得后、渲染组件前。因此&#xff0c;如果在useLayoutEffect中设置一些长耗时的&#xff0c;或者死循环之类的任务&#xff0c;会导致内存堆栈溢出。这时候需要转用useEffect。 // 适配全局宽度拉动变化时&#xff0c;legend显示数量React.use…

OpenAI 模型列表模型

〖ChatGPT实践指南 - 零基础扫盲篇⑧〗- OpenAI 的 模型(Model) 介绍 最新模型描述最大 TOKENS训练日期 gpt-4比任何 GPT-3.5 模型都更强大&#xff0c;能够执行更复杂的任务&#xff0c; 并针对聊天进行了优化。将使用我们最新的模型迭代进行更新。 8,192 tokens Up to Sep 20…