测试总结(没有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 ...
随机推荐
- redis之线程IO模型
非阻塞 IO 当我们调用套接字的读写方法,默认它们是阻塞的,比如 read 方法要传递进去一个参数n,表示读取这么多字节后再返回,如果没有读够线程就会卡在那里,直到新的数据到来或者连接关闭了,read ...
- poj-3230 Travel
One traveler travels among cities. He has to pay for this while he can get some incomes. Now there a ...
- python asyncio call_soon, call_at, call_later
1. call_soon, 协程一运行就马上运行 def callback(sleep_times): print("success time {}".format(sleep_t ...
- 【04】Nginx:rewrite / if / return / set 和变量
写在前面的话 我们前面已经谈了编译安装,基本语法,日志处理,location 匹配,root / alias 的不同效果.这里我们主要谈谈 rewrite(重写)功能,顺便说说 nginx 中自带的变 ...
- Locust 接口性能测试 - 转载一 (后期熟悉实践自己出一套完整的)
转载大佬 ,.. 另外一篇:https://www.cnblogs.com/imyalost/p/9758189.html记录一下接口性能测试的学习 先熟悉一下概念: Locust是使用Pytho ...
- Java生鲜电商平台-商品无限极目录的设计与架构
Java生鲜电商平台-商品无限极目录的设计与架构 说明:任何一个商品都应该是先属于某一个目录,然后在目录中添加商品,目录理论上最多支持三级,因为级别太多,不容易管理.但是设计中需要设计无限制的级别. ...
- Laravel向表里插入字段
执行: php artisan make:migration add_字段_to_表名_table --table=表名 此时在database/migrations文件夹下会生成一个相应文件,更改如 ...
- QT4.8.7和VS2010环境搭建及使用
(一)环境搭建 首先下载QT4.8.7的安装包.QT Addin 1.11插件和VS2010安装包.第一步:安装好VS2010第二步:安装QT4.8.7(qt-opensource-windows-x ...
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...
- 在使用 Fortify进行源码扫描时需要做对项目需要做什么?
1.一般我们的项目都是svn 或git 进行管理的,为了扫出异常的问题 做好把 “” .svn “” 文件删除 2.把我们的项目需要的jar 文件放到一个文件夹内同项目一起进行扫描.这样为 ...