测试总结(没有rank1)
一个初三蒟蒻不可能rank1.jpg
T1:
给出两个单词 (开始单词和结束单词) 以及一个词典。 找出从开始单词转换到结束单词,
所需要的最短转换序列。转换的规则如下:
1、每次只能改变一个字母
2、转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中
例如:
开始单词为:hit
结束单词为:cog
词典为:[hot,dot,dog,lot,log,mot]
那么一种可能的最短变换是: hit -> hot -> dot -> dog -> cog,
所以返回的结果是序列的长度 5;
注意:
1、如果不能找到这种变换,则输出 0;
2、词典中所有单词长度一样;
3、所有的单词都由小写字母构成;
4、开始单词和结束单词可以不在词典中。
每个词长度不大于5,词数不超过30
看上去好难...要各种比较字符串,判断变化...
然而这是一道搜索题(看数据范围)
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<stdio.h>
using namespace std;
char tar[]; //目标字符串
char sta[]; //初始字符串
char index[][]; //字典
int l; //字符串长度
int minn=; //答案,最终要取最小,设一个怎么都算不到的极大值,
int t=; //处理读入的指针(并不是*指针)
bool used[]; //查看在搜索时是否用过,毕竟一个词不能用两遍,也用不了两遍...
inline void search(int step,char a[]){ //用这两个变量step传递步数状态,a数组传递目前字符状态
int sum=;
for(int i=;i<l;i++)
if(a[i]!=tar[i])
sum++; //比较a数组与tar是否只有一步之遥
if(sum==)
minn=min(minn,step);
for(int i=;i<=t;i++){
if(used[i])continue;
sum=;
int p; //保存与a不同的字符下标方便深搜回溯
char c; //保存原先的a的被替换字符以便回溯
for(int j=;j<l;j++){
if(a[j]!=index[i][j])
sum++,p=j;
}
if(sum==){
c=a[p];
a[p]=index[i][p];
used[i]=;
search(step+,a);
a[p]=c; //反悔操作
used[i]=;
}
}
}
int main(){
//freopen("word.in","r",stdin);
scanf("%s",sta);
scanf("%s",tar);
l=strlen(sta);
while(scanf("%s",index[t])!=EOF) //输入处理,之前对这种无限制输入很头疼
t++;
search(,sta);
if(minn!=)
printf("%d\n",minn);
else
printf("0\n"); //无解的特判
return ;
}
总而言之,一个1h10min的搜索题
T2
对于 n=4 时,对应的集合 s={4,3,2,1},他的非空子集有 15 个
当 n=4 时,集合{4,3,2,1}的 15 个子集分别对应于 4 位二进制数:
{1}:0001;{2}:0010;{1,2}:0011;{3}:0100,…,{1,2,3,4}:1111。
把二进制数相对应的十进制数的 1,2,3,…,15 分别作为相应集合的编号。
如子集{1,2,4}对应的二进制数是 1011,相应的十进制数是 11,所以子集{1,2,4}的编号
为 11。
任务:
对于给定的 n 和 m,输出集合{1,2,…,n}的编号为 m 的子集。
思路是状态压缩dp的核心
本题的n没有任何用处,仅是对m的数位分析,
主要算法思路就是把m的二进制展开,某一位为1则输出该数,为0则表示没有该数,不输出
一道大水题
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int main(){
scanf("%d%d",&n,&m);
n=;
while(m){
if(m&)printf("%d ",n);
n++;
m>>=;
}return ;
}
快速幂处理方法不解释
T3(毒瘤,不给大样例,没有小数据,1分都没骗到...):
有 n 个城市,编号 1~n。其中 i 号城市的繁华度为 pi。省内有 m条可以双向同行的高速
公路,编号 1~m。编号为 j 的高速公路连接编号为 aj 和 bj 两个城市,经过高速公路的费用
是 wj。若从城市 x 出发到某城市 y,除了需要缴纳高速公路费用,还要缴纳“城市建设费”
(为从 x 城市到 y 城市所经过的所有城市中繁华度的最大值,包括 x 和 y 在内)。
现提出 q 个询问,每个询问给出一组 x 和 y,你需要回答从 x 出发到 y 城市,所需要的
最低交通费(高速公路费+城市建设费)是多少。
刚刚测试时代码蜜汁不见了先把代码粘上来:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int dis[][];
int pm[][];
int p[];
int n,m,q;
int main(){
//freopen("road.in","r",stdin);
//freopen("road.out","w",stdout);
memset(dis,0x3f,sizeof dis);
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++)
scanf("%d",&p[i]);
for(int i=;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
dis[a][b]=min(dis[a][b],c);
dis[b][a]=min(dis[a][b],c);
pm[a][b]=max(p[a],p[b]);
pm[b][a]=max(p[a],p[b]);
}
for(int k=;k<=n;k++){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(dis[i][j]+pm[i][j]>dis[i][k]+dis[k][j]+max(pm[i][k],pm[k][j])){
dis[i][j]=dis[i][k]+dis[k][j];
pm[i][j]=max(pm[i][k],pm[k][j]);
}
}
}
}
while(q){
q--;
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",dis[x][y]+pm[x][y]);
}return ;
}
这是10分代码...然而当时我并没有10分(当时没有判重边)
标程:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,q,p[],aj,bj,wj,x,y,f[][],a[][],top,t[];
int cmp(int x,int y)
{
return p[x]<p[y];
}
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
memset(a,,sizeof(a));
top=;
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++)
scanf("%d",&p[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&aj,&bj,&wj);
a[aj][bj]=min(a[aj][bj],wj);
a[bj][aj]=min(a[bj][aj],wj);
}
for(int i=;i<=n;i++) //初始化
{
a[i][i]=;
t[i]=i; //t数组为城市编号,将其初始为城市编号
}
sort(t+,t++n,cmp); //按照城市繁华度排序对接下来的Floyd有正确性保证
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j]=a[i][j]+max(p[i],p[j]); //初始化f数组(答案)
for(int k=;k<=n;k++) //保证p[t[k]]递增的Floyd
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
a[i][j]=min(a[i][j],a[i][t[k]]+a[t[k]][j]); //对边的松弛
f[i][j]=min(f[i][j],a[i][j]+max(p[i],max(p[j],p[t[k]]))); //取最大的p为价值,对答案进行优化
}
for(int i=;i<=q;i++)
{
scanf("%d%d",&x,&y);
printf("%d\n",f[x][y]);
}
fclose(stdin);
fclose(stdout);
return ;
}
/*
先理一下排序后k(t数组的角标),t与p的对应关系
仔细思考,嗯,证毕
排序后自然k为1-n递增序列,角标自然递增
t是p对应城市编号,是某种意义上的“有序排列”,然而其值无序,用其值作对应角标的p数组有序递增
p显然是城市繁华度,也是值无序,通过某种特定的访问是有序的,
也就是以t[k]为角标的p是第k大的繁华度,t[k]为繁华度为第k大的城市编号
(晕了)
所以现在我们有两种访问p数组的途径,一是根据城市标号直接查询,如将f数组初始化时的操作
二是按照大小顺序访问p,比如进行Floyd时的访问顺序
排序后的目的呢?
排序使p数组递增,使得Floyd时枚举到的p[t[k]]一定是1-k中最大的,以保证正确性
原理是啥?
排序
通过排序来保证数据的有序出现,以免在优化过程中将路上的最大p值"优化"掉
比如,我在枚举k点时已经将dis[a][b]优化,此时路中央有个p最大的城市mfb(无恶意)
然而继续枚举,发现枚举到了同一条路上的gc(同上),发现p[gc]<p[mfb],于是按照公式取min,把mfb"优化"掉了
那么就不再能保证正确性,
总结下,使p有序能够保证全面地枚举以求正确结果
*/
测试总结(没有rank1)的更多相关文章
- [转]h5页面测试总结
转自http://www.blogjava.net/qileilove/archive/2014/07/24/416154.html?utm_source=tuicool H5页面测试总结 其实经过几 ...
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- MySQL数据库数据类型之集合类型SET测试总结
MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...
- Android CTS 测试总结【转】
Android CTS 测试总结[转] 最近一直在做Android兼容性测试,根据Android官网给出的android-cts-manual 配置好了device后,开始测试. 首先配置软件环境: ...
- 互联网App应用程序测试流程及测试总结
互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...
- 20175305张天钰 《java程序设计》第四周课下测试总结
第四周课下测试总结 错题 某方法在父类的访问权限是public,则子类重写时级别可以是protected. A .true B .false 正确答案:B 解析:书P122:子类不允许降低方法的访问权 ...
- WEB测试总结
WEB测试总结:1.js文件session是否有缓存,如果没有缓存对服务器压力会很大:2.更改页面大小后,图表是否会再次向服务器请求数据:3.表单填写是否对html标识,script脚本做处理:(&l ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第2周课上测试总结
20175316 2018-2019-2 <Java程序设计>第2周课上测试总结 上周考试题目总结 题目1 题目要求: 在Ubuntu中用自己的有位学号建一个文件,教材p29 Exampl ...
- Java 第二次测试总结
Java 第二次测试总结 1. 相关知识点总结 Java测试题循环与递归知识点 补充知识点: for循环语句:for(表达式1:表达式2:表达式3)表达式一负责完成变量的初始化!表达式2是值为bool ...
随机推荐
- SuperSocket 2.0 发布第一个预览版, 另寻找Yang Fan哥哥
昨天,SuperSocket的作者发布了2.0版本的第一个预览版.SuperSocket 2.0 是一个经过全新设计的,第一个完全基于.NET Core的版本.作者正在积极尝试提供更简单易用的API的 ...
- Unity Shader 屏幕后效果——全局雾
Unity内置的雾效需要在每个shader中分别编写,造成了极大的不便.这里利用屏幕后处理产生可单独控制且自由度更高的雾效. 屏幕后雾效的本质在于,通过深度纹理重构出每个像素在世界空间中的位置,根据得 ...
- 解决MybatisPlus修改时空字段不修改问题
今天遇到了一个问题,在更新数据时,MybatisPlus不会进行修改属性为空的数据表字段. 解决办法: 只需要在实体类的属性上加一行注释即可 /** * 姓名 */ @TableField(fill ...
- 解决前后端调用,跨域二次请求Access-Control-Max-Age
发现前后端分离的项目中,前端发起一个请求到后端,在Chrome浏览器下面debug的时候,Network下面看到同一个url有两条请求,url有两条请求,第一条请求的Method为OPTIONS,第二 ...
- JavaScript定时器越走越快的问题
目录 JavaScript定时器越走越快的问题 (setinterval)多次初始化 清除(clearInterval)的失效 解决方法 JavaScript定时器越走越快的问题 之前在项目中写了定时 ...
- SQL Server中INSERT EXEC语句不能嵌套使用(转载)
问: I have three stored procedures Sp1, Sp2 and Sp3.The first one (Sp1) will execute the second one ( ...
- 【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?
对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_210 ...
- 2019 北森java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.北森等公司offer,岗位是Java后端开发,因为发展原因最终选择去了北森,入职一年时间了,也成为了面试官,之 ...
- jenkins 比较好的学习的文章
来自 : https://www.cnblogs.com/horizonli/tag/jenkins/
- apache-tomcat-7.0.94在Windows上启动时,控制台黑窗口出现乱码解决
一.问题 二.解决 原因是tomcat日志编码的配置问题. 打开tomcat/conf/logging.properties配置文件. 把编码注释掉或者改为gbk就可以了. 参考:https://bl ...