20170508测试

问题 A: lyklyk?lyklyk!

时间限制: 1 Sec  内存限制: 256 MB

题目描述

Lyk得到了一个1~n的全排列。Txm每次会交换第i个数和第j个数,对于每次交换,lyk需要回答该全排列的逆序对数为多少。
“1、2、3、4......248289469!”lyk如是回答道。
“最后答案取模2......”

输入

第一行一个数,n
第二行为1~n的某个全排列
第三行一个数m,表示交换操作的次数。
接下来m行,每行两个数i和j

输出

M行,表示m次交换后的答案。

样例输入

4
1 2 3 4
1
1 2

样例输出

1

提示

Constraints

对于30%,n,m<=1000

对于100%,n,m<=100000

这题考试时i==j没判,怒送出题人(张浩威狗头张)100分。

题解在最后,,

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int T[100005];
 6 void add(int x){
 7     for (int i=x;i<=100000;i+=(i&(-i))) T[i]+=1;
 8 }
 9 int sum(int x){
10     int Sum=0;
11     for (int i=x;i>0;i-=(i&(-i))) Sum+=T[i];
12     return Sum;
13 }
14 int main(){
15     //freopen("lyk.in","r",stdin);
16     //freopen("lyk.out","w",stdout);
17     int    n,Sum=0; scanf("%d",&n);
18     for (int i=1;i<=n;i++){
19         int a; scanf("%d",&a);
20         add(a); Sum=(i-sum(a)+Sum)%2;
21     }
22     int m; scanf("%d",&m);
23     for (int i=1;i<=m;i++){
24         int x,y; scanf("%d%d",&x,&y);
25         if (x!=y)
26         Sum++,Sum%=2;
27         printf("%d\n",Sum);
28     }
29     return 0;
30 }

问题 B: tower

时间限制: 1 Sec  内存限制: 256 MB

题目描述

Lyk去推塔。但是推第n座塔必须先推了第1~n-1座塔。
为了加快速度lyk召唤出了szh和txm。求lyk和他的召唤兽们为了推完所有塔所经过的最短距离。

输入

第一行一个数N,代表一共要去多少个城市。
下面N-1 行,对于第 i 行,有 n-i 个数,表示第 i 个城市分别和第i+1, i+2, i+3, ……, N 的距离(距离<=10000)

输出

一个数,表示最短距离

样例输入

5
1 1 1 2
33 33 33
33 33
33

样例输出

36

提示

Constraints

对于30%,n<=10

对于100%,n<=100

TM最短路又忘打了→→。

题解在最后,,

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 long long f[105][105][105],a[105][105];
 6 long long min_(long long a,long long b){
 7     return a>b?b:a;
 8 }
 9 int main(){
10     //freopen("tower.in","r",stdin);
11     //freopen("tower.out","w",stdout);
12     int n; scanf("%d",&n);
13     for (int i=1;i<=n;i++)
14         for (int j=1;j<=n;j++) a[i][j]=(long long)1e+10;
15     for (int i=1;i<=n;i++)
16         for (int j=i+1;j<=n;j++) scanf("%lld",&a[i][j]);
17     for (int k=1;k<=n;k++)
18         for (int i=1;i<=n;i++)
19             for (int j=1;j<=n;j++)
20                 if (a[i][k]+a[k][j]<a[i][j]) a[i][j]=a[i][k]+a[k][j];
21     for (int i=1;i<=n;i++)
22         for (int j=1;j<=n;j++)
23             for (int z=1;z<=n;z++) f[i][j][z]=(long long)1e+13;
24     f[1][1][1]=0;
25     for (int i=1;i<=n;i++)
26         for (int j=1;j<=n;j++)
27             for (int z=1;z<=n;z++){
28                 int t=max(i,j); t=max(t,z);
29                 f[t+1][j][z]=min(f[t+1][j][z],f[i][j][z]+a[i][t+1]);
30                 f[i][t+1][z]=min(f[i][t+1][z],f[i][j][z]+a[j][t+1]);
31                 f[i][j][t+1]=min(f[i][j][t+1],f[i][j][z]+a[z][t+1]);
32             }
33     long long Min=1e+15;
34     for (int i=1;i<=n;i++)
35         for (int j=1;j<=n;j++)
36         Min=min_(Min,f[n][i][j]),Min=min_(Min,f[i][n][j]),Min=min_(Min,f[i][j][n]);
37     printf("%lld",Min);
38     return 0;
39 }

问题 C: pinball

时间限制: 1 Sec  内存限制: 256 MB

题目描述

小天才lyk喜欢玩一个叫pinball的游戏。游戏规则如下:
Pinball的游戏界面由m+2行、n列组成。第一行在顶端。一个球会从第一行出发,开始垂直下落,lyk会得到一个积分当他击中一个球的时候。
小天才lyk觉得这太困难了,于是在界面中放入了一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行且列数在Ai~Bi之间的球将其移到第Ci列。
但是使用每个漏斗都是需要付钱的,第i个漏斗需要支付Di的价钱,lyk需要保留一些漏斗,使得球无论从第一行的哪一列开始放,都只可能到达第m+2行的唯一一列。同时,lyk希望花费最小的价钱。

输入

第一行两个数,m和n
接下来m行,第i+1行描述第i个漏斗的属性,Ai,Bi,Ci,Di(1<=Ai<=Ci<=Bi<=n,1<=Di<=1000000000)。

输出

若不存在一种方案能满足条件则输出-1,否则输出最小话费。

样例输入

5 6
2 4 3 5
1 2 2 8
3 6 5 2
4 6 4 7
2 4 3 10

3 5
2 4 3 10
1 3 1 20
2 5 4 30

样例输出

25

-1

提示

【样例解释1】

如图,只需使用第2、4、5个漏斗即可。

【数据范围】

对于20%的数据,m<=10,n<=1000

对于 40%的数据,m<=200

对于60%的数据,m<=1000

对于100%的数据,m<=100000,2<=n<=1000000000

题解在最后,,

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<cstdlib>
 7 using namespace std;
 8 #define ll long long
 9 const ll INF=(ll)1<<60;
10 #define N 110000
11 int n,m,a[N],b[N],c[N],d[N],q[N];
12 ll ans=INF;
13 struct seg{
14     ll Min[N*4],a[N];
15     void build(int u,int l,int r){
16         if(l==r){
17             Min[u]=a[l];
18             return;
19         }
20         int mid=(l+r)>>1;
21         build(u*2,l,mid);
22         build(u*2+1,mid+1,r);
23         Min[u]=min(Min[u*2],Min[u*2+1]);
24     }
25     ll find(int u,int l,int r,int x,int y){
26         if(x<=l && y>=r)return Min[u];
27         if(x>r || y<l)return INF;
28         int mid=(l+r)>>1;
29         return min(find(u*2,l,mid,x,y),find(u*2+1,mid+1,r,x,y));
30     }
31     void change(int u,int l,int r,int x,ll w){
32         if(l==r){
33             Min[u]=min(w,Min[u]);
34             return;
35         }
36         int mid=(l+r)>>1;
37         if(x<=mid)change(u*2,l,mid,x,w);
38         else change(u*2+1,mid+1,r,x,w);
39         Min[u]=min(Min[u*2],Min[u*2+1]);
40     }
41 }t1,t2;
42 int bin1(int k){
43     int l=1,r=q[0];
44     while(l<r){
45         int mid=(l+r)/2;
46         if(q[mid]>=k)r=mid;
47         else l=mid+1;
48     }
49     return l;
50 }
51 int bin2(int k){
52     int l=1,r=q[0];
53     while(l<r){
54         int mid=(l+r)/2+1;
55         if(k>=q[mid])l=mid;
56         else r=mid-1;
57     }
58     return l;
59 }
60 int main(){
61     freopen("pinball.in","r",stdin);
62     freopen("pinball.out","w",stdout);
63     scanf("%d%d",&n,&m);
64     q[++q[0]]=1;
65     q[++q[0]]=m;
66     for(int i=1;i<=n;i++)scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]),q[++q[0]]=c[i];
67     sort(q+1,q+q[0]+1);
68     q[0]=1;
69     for(int i=2;i<=n+2;i++)
70         if(q[i]!=q[q[0]])q[++q[0]]=q[i];
71     m=q[0];
72     for(int i=1;i<=q[0];i++){
73         t1.a[i]=INF*(int)(i>1);
74         t2.a[i]=INF*(int)(i<q[0]);
75     }
76     t1.build(1,1,q[0]);
77     t2.build(1,1,q[0]);
78     for(int i=1;i<=n;i++){
79         a[i]=bin1(a[i]);
80         b[i]=bin2(b[i]);
81         c[i]=bin1(c[i]);
82         ll f1=t1.find(1,1,q[0],a[i],b[i]),f2=t2.find(1,1,q[0],a[i],b[i]);
83         ans=min(f1+f2+d[i],ans);
84         t1.change(1,1,q[0],c[i],f1+d[i]);
85         t2.change(1,1,q[0],c[i],f2+d[i]);
86     }
87     if(ans<INF)cout<<ans<<endl;
88     else cout<<-1<<endl;
89     return 0;
90 }

问题 D: tree

时间限制: 3 Sec  内存限制: 512 MB

题目描述

小天才lyk打游戏又被zyh抓啦!
学校的教室呈树状,即n个点由n-1条边连接。据可靠情报lyk正藏在编号为a~b的教室中,而zyh正在编号为c~d的教室中寻找,保证a~b和c~d没有交集(不然lyk就要被抓啦)。
作为lyk同盟的你当然希望lyk能逃脱啦,所以你希望知道lyk和zyh相距最远可能多少。
即你需要求出max{dis(i,j) |a<=i<=b,c<=j<=d}

输入

第一行一个数,n。
第二行到第n行每行三个数描述路的情况,x,y,z(1<=x,y<=n,1<=z<=10000)表示x和y之间有一条长度为z的路。
第n+1行一个数m,表示询问次数。
接下来m行,每行四个数a,b,c,d。

输出

输出lyk和zyh可能的最远距离。

样例输入

5
1 2 1
2 3 2
1 4 3
4 5 4
1
2 3 4 5

样例输出

10

提示

【数据范围】

对于10%的数据,n,m<=50

对于30%的数据,n,m<=500

对于60%的数据,n,m<=3000

对于100%的数据,n,m<=100000

题解在最后,,

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 typedef long long ll;
  4 typedef long double ld;
  5 typedef pair<int,int> pr;
  6 #define rep(i,a,n) for(int i=a;i<=n;i++)
  7 #define per(i,n,a) for(int i=n;i>=a;i--)
  8 #define Rep(i,u) for(int i=head[u];i;i=Next[i])
  9 #define clr(a) memset(a,0,sizeof a)
 10 #define pb push_back
 11 #define mp make_pair
 12 #define fi first
 13 #define sc second
 14 ll pp=1000000007;
 15 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
 16 ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
 17 ll read(){
 18     ll ans=0;
 19     char last=‘ ‘,ch=getchar();
 20     while(ch<‘0‘ || ch>‘9‘)last=ch,ch=getchar();
 21     while(ch>=‘0‘ && ch<=‘9‘)ans=ans*10+ch-‘0‘,ch=getchar();
 22     if(last==‘-‘)ans=-ans;
 23     return ans;
 24 }
 25 //head
 26 #define N 110000
 27 int v[N*2],Next[N*2],head[N],cost[N*2],Q[N*2],q[N*2],b[N*4][3],num=0,n,m;
 28 int pre[N*2][20],B[N*2],lab[N],fa[N],dep[N];
 29 void add(int x,int y,int z){
 30     v[++num]=y;Next[num]=head[x];head[x]=num;cost[num]=z;
 31 }
 32 void bfs(){
 33     int top=1;
 34     q[1]=1;
 35     while(top){
 36         int u=q[top];
 37         Q[++Q[0]]=u;
 38         lab[u]=Q[0];
 39         if(head[u] && v[head[u]]==fa[u])head[u]=Next[head[u]];
 40         if(head[u]){
 41             dep[v[head[u]]]=dep[u]+cost[head[u]];
 42             fa[v[head[u]]]=u;
 43             q[++top]=v[head[u]];
 44             head[u]=Next[head[u]];
 45             }
 46         else --top;
 47     }
 48     rep(i,1,Q[0]){
 49         pre[i][0]=Q[i];
 50         for(int j=1;(1<<j)<=i;++j)
 51             if(dep[pre[i][j-1]]<dep[pre[i-(1<<(j-1))][j-1]])pre[i][j]=pre[i][j-1];
 52             else pre[i][j]=pre[i-(1<<(j-1))][j-1];
 53     }
 54     for(int j=0;(1<<j)<=Q[0];j++)B[1<<j]=j;
 55     rep(j,2,Q[0])
 56         if(!B[j])B[j]=B[j-1];
 57 }
 58 int calc(int x,int y){
 59     int tt=dep[x]+dep[y];
 60     x=lab[x],y=lab[y];
 61     if(x>y)swap(x,y);
 62     int z=B[y-x+1];
 63     int t1=pre[y][z],t2=pre[x+(1<<z)-1][z];
 64     if(dep[t1]<dep[t2])return tt-dep[t1]-dep[t1];
 65     else return tt-dep[t2]-dep[t2];
 66 }
 67 void build(int u,int l,int r){
 68     if(l==r){
 69         b[u][0]=1;
 70         b[u][1]=l;
 71         return ;
 72     }
 73     int mid=(l+r)>>1;
 74     build(u<<1,l,mid);
 75     build(u<<1|1,mid+1,r);
 76     q[0]=0;
 77     rep(i,1,b[u<<1][0])q[++q[0]]=b[u<<1][i];
 78     rep(i,1,b[u<<1|1][0])q[++q[0]]=b[u<<1|1][i];
 79     b[u][0]=2;
 80     b[u][1]=q[1];
 81     b[u][2]=q[2];
 82     int Max=calc(q[1],q[2]);
 83     rep(i,3,q[0])
 84         rep(j,1,i-1){
 85             int t=calc(q[i],q[j]);
 86             if(t>Max){
 87                 Max=t;
 88                 b[u][1]=q[i];
 89                 b[u][2]=q[j];
 90             }
 91         }
 92 }
 93 void get(int u,int l,int r,int x,int y){
 94     if(x>r || y<l)return ;
 95     if(x<=l && y>=r){
 96         rep(i,1,b[u][0])q[++q[0]]=b[u][i];
 97         if(q[0]==1)return;
 98         int Max=0,ans1,ans2;
 99         rep(i,2,q[0])
100           rep(j,1,i-1){
101             int t=calc(q[i],q[j]);
102             if(t>Max){
103                 Max=t;
104                 ans1=q[i];
105                 ans2=q[j];
106             }
107         }
108         q[0]=2;
109         q[1]=ans1;
110         q[2]=ans2;
111         return;
112     }
113     int mid=(l+r)>>1;
114     get(u<<1,l,mid,x,y);
115     get(u<<1|1,mid+1,r,x,y);
116 }
117 int main(){
118     freopen("tree.in","r",stdin);
119     freopen("tree.out","w",stdout);
120     n=read();
121     rep(i,1,n-1){
122         int x=read(),y=read(),z=read();
123         add(x,y,z);
124         add(y,x,z);
125     }
126     bfs();
127     build(1,1,n);
128     m=read();
129     while(m--){
130         int l=read(),r=read();
131         q[0]=0;
132         get(1,1,n,l,r);
133         int t1=q[1],t2=q[2];
134         l=read(),r=read();
135         q[0]=0;
136         get(1,1,n,l,r);
137         int ans=calc(q[1],t1);
138         ans=max(ans,calc(q[1],t2));
139         ans=max(ans,calc(q[2],t1));
140         ans=max(ans,calc(q[2],t2));
141         printf("%d\n",ans);
142     }
143     return 0;
144 }

http://files.cnblogs.com/files/SXia/solution.pdf

时间: 2024-10-05 22:42:24

20170508测试的相关文章

iOS app打包 -- 生成ipa测试包 步骤详解

最近有小伙伴问我如何打成ipa包分发给测试人员 , 虽然现在网上的教程很多,但是也很杂, 没有一个比较完整的讲解. 利用工作之余, 就说一下如何生成ipa包?共分为两种方法. 第一种方法: 1) 至于配置发布证书和AdHoc描述文件, 就不再累述, 下载下来双击安装即可.(ps: 生成AdHoc描述文件的时候要注意勾选所有的设备, 只有被描述文件包含的设备才能进行相应的测试. 如果是企业账号的话则不需要添加设备的udid). 2) 接下来开始配置xCode里的工作(包括发布证书和描述文件), 注

Monkey测试

1             概述 Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 当Monkey程序在模拟器或真实设备运行的时候,程序会产生一定数量或一定时间内的随机模拟用户操作的事件, 如点击,按键,手势等, 以及一些系统级别的事件.通常也称随机测试或者稳定性测试. 2             测试步骤 2.1   测试前提条件 1.将手机恢复出厂设置 2.恢复出厂设置后,进入设置--

软件测试中的数据库测试

数据库中数据的基本结构 定义一:数据元素集合(也可称数据对象)中各元素的关系. 定义二:相互之间存在特定关系的数据元素集合. 一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多 字段(数据项)组成数据库测试分类系统测试.集成测试.单元测试.功能测试.性能测试.安全测试系统测试.数据库在初期设计中需要进行分析测试. 对于各种数据元素进行完美融合,并理清相互之间的关系便是数据库结构的基本定义. 在数据库中,不同数据之间会存在既定的特殊关系,其属于各种数据元素

一些基本LINUX命令以及测试环境的搭建

LINUX操作系统平时用的不多,资深测试与开发同学们用的比较多,像我这样的一个人,只喜欢WINDOWS操作系统.但LINUX操作系统也用过一段时间, 知道一些基本命令,如果不记得的话,就百度一下,拿来就用,也不会太难.下面记录一下自己知道的一些常用命令,方便自己查询,以供大家参考. 首先 LINUX系统的特点是:稳定,安全,开源,可裁剪性.(可裁剪性还真没有理解透) 其次:LINUX 有四个版本,分别是:DEBIAN,UBUNTU,RED HAT,CENTOS. 我只用过CENTOS版本,不过公

微信+WeTest:小程序云端测试系统上线

日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测试平台,由WeTest提供基础支持,下载"微信开发者工具"即可使用. 小程序测试报告示例:  一. 云真机测试 Beta 为了方便广大开发者检测小程序程序缺陷.评估小程序产品质量,微信提供了免费的云真机测试环境以及一整套测试方案.在小程序交付到真实用户手中使用之前,你可以将小程序分发到云真

微信公众号API测试——接口调用频率限制

接口频率限制[1] 公众号调用接口并不是无限制的.为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码: {"errcode":45009,"errmsg":"api freq out of limit"} 各接口调用频率限制如下: 接口 每日限额 获取access_token 2000 自定义菜单创建 1000 自定义菜单查询 10000 自定义菜

手把手教你如何搭建自己的渗透测试环境

介绍 白帽子是指个体发起的黑客攻击,找到系统潜在的可能被恶意黑客利用的的漏洞或脆弱点.在目标不知情或者没得到授权的情况下发起黑客攻击是非法的.所以通常是建立一个自己的实验室,练习黑客技术. 在这个实验室里,你能看到如何创建一个自己的黑客环境,练习各种各样的黑客攻击技术.我们将会探讨不同类型的虚拟系统,构建一个虚拟网络,在虚拟环境中运行试用版的操作系统,搭建一个有漏洞的web应用程序,安装Kali LInux,执行渗透测试. 所需条件: VMware Workstation Windows XP系

游戏测试经历的流程及发版本注意的问题(或许有遗漏)

一.测试流程: 1.测试人员需要参与需求会议,了解需求,如有必要,提出疑问点,产品修改正 2.需求确定后,编辑测试用例或者测试功能点 3.开发提交完毕后,执行测试用例(要求开发出电脑版,节约前期打包,安装包的时间) 4.发现bug,提交bug到禅道,并通知相关人员 5.开发组修正bug,禅道指派给测试人员,表明已修复 6.对已修正的bug,进行回归测试 7.修正完毕的bug在禅道上置为关闭 8.待电脑版功能验证完毕后,进行手机包测试 9.整体测试完毕,可以发布包 补充: 1.中途有修改需求,也需

1.2软件生命周期&amp;测试流程

软件的生命周期 可行性分析-需求分析-软件设计-软件编码-软件测试-软件维护 1.可行性分析 主要确定软件开发的目的和可行性(PM) 2.需求分析 对软件的功能进行详细的分析(PM),输出需求规格说明书(原型图) 3.软件设计(DEV) 把需求分析得到的结果转换为软件结构和数据结构,形成系统架构 概要设计:搭建架构.模块功能.接口连接和数据传输 详细设计:模块深入分析,对各模块组合进行分析,伪代码   包含数据库设计说明 4.软件编码(DEV) 可运行的程序代码 5.软件测试 5.1.单元测试(