7-28测试

假发通过了不懈的努力,得到了将军家门锁的密码(一串小写英文字母)。但是假发被十四和猩猩他们盯上了,所以假发需要把密码传递出去。因为假发不想十四他们发现几松门前贴的小纸条就是将军家的密码,所以他加密了密码(新八:听起来有点诡异)。加密方法如下:随机地,在密码中任意位置插入随机长度的小写字符串。

不过,假发相信银桑和他那么多年小学同学,一定能猜中密码是什么的(新八:银桑什么时候成攮夷志士了!!!)。可是,写完了小纸条之后,假发觉得有点长,就想截去头和尾各一段(可以为空),让剩下的中间那一段依然包含真~密码。想着想着,假发就想知道有多少种可行方案。结果在沉迷于稿纸之际,假发被投进了狱门岛(新八:……)。于是,就由你计算了。

输入

两行非空字符串,纯小写英文字母,第一行是加密后的密码,第二行是原密码。

第一行长度不超过300000,第二行不超过200。

输出

一行,有多少种方案。注意:不剪也是一种方案。

样例输入

abcabcabc
cba

样例输出

9

提示

【样例解释】

用(L,R)表示一种方案,其中L和R分别表示截去头和尾的长度。这9钟方案分别是(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)。

【数据说明】

30%的数据满足第一行长度不超过1000。

一拿到此题懵逼,开始以为是裸裸的KMP,后来发现暴力就是可以水过。f[i][j]表示第i个节点之后最近的j字符的位置。这样我们每次枚举起点在原字符串种的位置,一次次往下跳即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 300005
using namespace std;
char stra[N+10],strb[N+10];
int lena,lenb,last;
int next[N+10][26],dictionary[26];
long long ans;
int main()
{
    scanf("%s %s",stra+1,strb+1);
    int lena=strlen(stra+1);
    int lenb=strlen(strb+1);
    for(int i=lena;i>=1;i--)
    {
        memcpy(next[i],dictionary,sizeof(next[i]));
        dictionary[stra[i]-‘a‘]=i;
    }
    for(int i=1;i<=lena;i++)
    if(stra[i]==strb[1])
    {
        int p=i,t=1;
        bool flag=1;
        while(t<lenb)
        {
            p=next[p][strb[++t]-‘a‘];
            if(p==0)
            {
                flag=0;
                break;
            }
        }
        if(!flag) continue;
        ans+=(lena-p+1)*(i-last);
        last=i;
    }
    cout<<ans<<endl;
} 

题 B: 独立集

时间限制: 1 Sec  内存限制: 128 MB
提交: 155  解决:
32
[提交][状态][讨论版]

题目描述

有一天,一个名叫顺旺基的程序员从石头里诞生了。又有一天,他学会了冒泡排序和独立集。在一个图里,独立集就是一个点集,满足任意两个点之间没有边。于是他就想把这两个东西结合在一起。众所周知,独立集是需要一个图的。那么顺旺基同学创造了一个算法,从冒泡排序中产生一个无向图。

这个算法不标准的伪代码如下:

procedure
bubblesortgraph(n, a[]) :

/*输入:点数n,1到n的全排列a。

输出:一个点数为n的无向图G。*/

创建一个有n个点,0条边的无向图G。

repeat

swapped = false

for i 从
1
到 n-1 :

if a[i] > a[i + 1]

在G中连接点a[i]和点a[i + 1]

交换a[i]和a[i + 1]

swapped = true

until not
swapped

输出图G。

//结束。

那么我们要算出这个无向图G最大独立集的大小。但是事情不止于此。顺旺基同学有时候心情会不爽,这个时候他就会要求你再回答多一个问题:最大独立集可能不是唯一的,但有些点是一定要选的,问哪些点一定会在最大独立集里。今天恰好他不爽,被他问到的同学就求助于你了。

输入

两行。第一行为N,第二行为1到N的一个全排列。

输出

两行。第一行输出最大独立集的大小,第二行从小到大输出一定在最大独立集的点的编号(输入时的序号)。

样例输入

3
3 1 2

样例输出

2
2 3

提示

【数据范围】

30%的数据满足 N<=16

60%的数据满足 N<=1,000

100%的数据满足 N<=100,000

哈哈刚写过求LIS的nlogn方法,就考到了~  ~开心。

这道题就是求一个LIS,问哪些点一定在LIS的序列里。我们把每个点向左和向右的LIS算出来,如果相加=最长上升子序列数+1则代表这个点可以是最长上升子序列中的一点。如果这个二元组没有重复出现过,就代表它不能被替换。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pr;
const double pi=acos(-1);
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define Rep(i,u) for(int i=head[u];i;i=Next[i])
#define clr(a) memset(a,0,sizeof(a))
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
#define pq priority_queue
#define pqb priority_queue <int, vector<int>, less<int> >
#define pqs priority_queue <int, vector<int>, greater<int> >
#define vec vector
ld eps=1e-9;
ll pp=1000000007;
ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
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;}
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
//void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; }
int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
ll read(){ ll ans=0; char last=‘ ‘,ch=getchar();
while(ch<‘0‘ || ch>‘9‘)last=ch,ch=getchar();
while(ch>=‘0‘ && ch<=‘9‘)ans=ans*10+ch-‘0‘,ch=getchar();
if(last==‘-‘)ans=-ans; return ans;
}
#define N 100005
map<pr,int> Map;
int B[N],a[N],Left[N],n,b[N],Right[N],Len;
void init()
{
    n=read();
    rep(i,1,n)
    a[i]=read();
}
void LIS()
{
    B[1]=a[1];int len=1;Left[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]>B[len]) B[++len]=a[i];
        int pos=lower_bound(B+1,B+1+len,a[i])-B;
        B[pos]=a[i];
        Left[i]=pos;
    }
    Len=len;
}
void  RE_LIS()
{
    memset(B,0,sizeof(B));
    for(int i=1;i<=n;i++) b[i]=a[i];
    for(int i=1;i<=n;i++) a[i]=-b[n-i+1];
    B[1]=a[1];int len=1;Right[n]=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]>B[len]) B[++len]=a[i];
        int pos=lower_bound(B+1,B+1+len,a[i])-B;
        B[pos]=a[i];
        Right[n-i+1]=pos;
    } 

}
void Debug()
{
    for(int i=1;i<=n;i++)
        cout<<Left[i]<<‘ ‘<<Right[i]<<endl;
}
int main()
{
    init();
    LIS();
    RE_LIS();
    //Debug();
    cout<<Len<<endl;
    for(int i=1;i<=n;i++)
    if(Left[i]+Right[i]-1==Len)
    {
        Map[mp(Left[i],Right[i])]++;
    }
    for(int i=1;i<=n;i++)
    if(Map[mp(Left[i],Right[i])]==1) printf("%d ",i);
}
  
时间: 2024-10-06 16:39:21

7-28测试的相关文章

sysbench 对 mysql-5.6.28 测试

1.下载sysbench-0.5.tar.gz sysbench源代码可以在https://launchpad.net/sysbench找到 该目录将在后续sysbench安装中,多次使用.如果MySQL不是安装在该默认目录,请在后续步骤中替换. 首先RPM方式安装mysql-5.6.28 sysbench需要autoconf.automake及libtool包,如果这些包不存在,需要先安装. yum -y install libtool  automake autoconf 执行如下命令,安装

MySQL空间类型测试

Mysql空间类型介绍: MySQL支持空间扩展,允许生成.保存和分析地理特征.这些特征可用于MyISAM.InnoDB.NDB.BDB和ARCHIVE表(但是,ARCHIVE引擎不支持索引功能,因此,不能为ARCHIVE列中的空间列编制索引). 测试目的: 想用mysql的专用空间类型来代替整数类型存储坐标信息,从而在地图搜索的时候提高效率. 参考文档: http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.htm

javaweb学习总结(二十九)——EL表达式

一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 中的对象,访问javabean的属性.访问list集合.访问map集合.访问数组) 2.执行运算 利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算.${user==null} 3.获取web开发常用对象 EL 表达

软件项目管理(CMMI成熟度)实践——之集成测试

本文描述集成测试的测试计划.测试活动过程.测试用例及执行等三部分内容实践,每部分仅举例部分实际内容供参考,以及相关测试规范. 测试计划 测试范围 根据项目整体情况,确定测试对象.测试重点.本项目范围包括:基础服务平台.流程能力平台.系统接口.业务展示(阳光大厅).业务实施等五部分,如下图所述为基础服务平台部分. 说明: 源功能:可以理解为待集成模块的入口,即从哪个模块获取数据: 目标功能:可理解为待集成模块的出口,即向哪个模块输出数据,也就通过具体功能来涵盖并测试基础服务. 测试准则 入口准则:

Java学习之:JDK动态代理与CGLIB动态代理

代理的概念:简单的理解就是通过为某一个对象创建一个代理对象,我们不直接引用原本的对象,而是由创建的代理对象来控制对原对象的引用. 动态代理:是指在程序运行时由Java反射机制动态生成,无需手动编写代码.动态代理不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java反射机制可以生成任意类型的动态代理类. 代理原理:代理对象内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象.同时,代理对象可以在执行真实对象操作时,附加其他的操作

模板系列(一) 模板的模板参数

前面我们写过类似的Stack: template <typename T, typename Alloc = std::vector<T> > class Stack { public: void push(const T &); void pop(); T top() const; bool empty() const; private: Alloc _cont; }; 那么我们使用的时候需要这样: Stack<string, list<string>

Main.storyboard

Main.storyboard <?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVers

linux 统计 程序 运行时间

测试 代码运行时间 linux 中的 <sys/time.h> 中 有个函数可以获取当前时间,精确到 微秒 ---->  gettimeofday() 1 #include <sys/time.h>       // int gettimeofday(struct timeval *tv, struct timezone *tz); 2 /********************************************* 3 * struct timeval 4 *

DBCP连接池的使用

通过连接池(数据源)优化我们的操作. 需求: 使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作. 技术分析: 连接池 连接池概述: 管理数据库的连接, 作用: 提高项目的性能. 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可. 所有的连接池必须实现一个接口 javax.sql.DataSource接口 获取连接方法: Connection getConnection() 归还连接的方法就是以

python函数、装饰器、迭代器、生成器

5月21日,请假结婚,然后性格惰性来了,不怎么想看视频和笔记,性格中的弱点开始出现,开始做的不错,渐渐开始松懈,直至放弃--- 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo