upc 9325 序列本质
9325: 序列本质
时间限制: 1 Sec 内存限制: 128 MB
提交: 29 解决: 18
[提交] [状态] [讨论版] [命题人:admin]
题目描述
一个序列B是A的子序列需要满足A删掉某些元素后能够得到B.
两个子序列中对应位置的数都相同我们就认为这两个子序列本质相同.
输入
输出
样例输入
5 2 3 1 3 2
样例输出
27
提示
对于20%的数据,N≤10.
对于40%的数据,N≤20
对于70%的数据,N≤100000,1≤Ai≤100
对于100%的数据,N≤1000000,1≤Ai≤N
来源/分类
题意:
中文题意不多解释了。
分析
2 3 1 3 2
以a[i]结尾的序列 1 1+1 3+1 7+1 13+1 (用p[i]记录)
1~i构成的子序列 1 1+2 3+4 8+7-2 13+14-1=26 (用q[i]记录)
对于p[i] :相当于在p[i-1]的所有序列的末尾加上a[i]。
对于q[i] :p[i]加上1 ~ i-1的子序列个数。
/// author:Kissheart /// #include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<vector> #include<stdlib.h> #include<math.h> #include<queue> #include<deque> #include<ctype.h> #include<map> #include<set> #include<stack> #include<string> #define INF 0x3f3f3f3f #define FAST_IO ios::sync_with_stdio(false) const double PI = acos(-1.0); const double eps = 1e-6; const int MAX=1e6+10; const int mod=1e9+7; typedef long long ll; using namespace std; #define gcd(a,b) __gcd(a,b) inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;} inline ll qpow(ll a,ll b){ll r=1,t=a; while(b){if(b&1)r=(r*t)%mod;b>>=1;t=(t*t)%mod;}return r;} inline ll inv1(ll b){return qpow(b,mod-2);} inline ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll r=exgcd(b,a%b,y,x);y-=(a/b)*x;return r;} inline ll read(){ll x=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0';return x*f;} //freopen( "in.txt" , "r" , stdin ); //freopen( "data.txt" , "w" , stdout ); int n; int vis[MAX],a[MAX]; ll p[MAX],q[MAX]; int main() {ll ans=0;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);p[1]=1;q[1]=1;vis[a[1]]=1;for(int i=2;i<=n;i++){yaif(!vis[a[i]]){vis[a[i]]=i;p[i]=(q[i-1]+1)%mod;q[i]=(q[i-1]+p[i])%mod;}else{p[i]=(q[i-1]+1)%mod;q[i]=(q[i-1]+p[i])%mod;q[i]=((q[i]-p[vis[a[i]]])%mod+mod)%mod;//printf("%d %lld\n",vis[a[i]],p[vis[a[i]]]);vis[a[i]]=i;}//printf("%lld %lld\n",p[i],q[i]); }printf("%lld\n",q[n]+1);return 0; }
View Code
转载于:https://www.cnblogs.com/Kissheart/p/9939719.html
upc 9325 序列本质相关推荐
- Python_序列对象内置方法详解_String
目录 目录 前言 软件环境 序列类型 序列的操作方法 索引调用 切片运算符 扩展切片运算符 序列元素的反转 连接操作符 重复运算符 成员关系符 序列内置方法 len 获取序列对象的长度 zip 混合两 ...
- Matlab Tricks(十九)—— 序列左右移的实现
比如实现如下的移位操作: y(n)=x(n−k) y(n)=x(n-k) function [y, n] = sigshift(x, m, k) n = m + k; y = x; 本身任意一个 ma ...
- 自注意力中的不同的掩码介绍以及他们是如何工作的?
在研究自注意力时,有很多的名词需要我们着重的关注,比如填充掩码,前瞻掩码等等,但网上没有太多注意力掩码的教程和它是如何工作的信息,另外还有以下的细节需要详细的解释: 为什么要对多个层应用注意力掩码?. ...
- Programming In Scala笔记-第十五章、Case Classes和模式匹配
本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现 ...
- 《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(1)自然语言处理基础
自然语言处理基础 Natural Language Processing,NLP. 主要任务包括自然语言理解Natural Language Understanding,NLU和自然语言生成Natur ...
- 「CSA49」Bunny on Number Line
「CSA49」Bunny on Number Line 题目大意:有一个人从0开始走,每次可以向前走一步或者回到1,那么会产生一个位置序列,其中给出 \(k\) 个位置是好的.定义一个位置序列是好的, ...
- 恶意代码对抗技术入门
Author:ZERO-A-ONE Date:2021-01-20 来自视频<漏洞银行|浅谈恶意代码对抗技术>,主要从两个方面进行入手: 对抗反汇编 反调试 一.对抗反汇编(静态) 1.1 ...
- oracle基础回顾(超详细)
变量应用表字段类型 引用型变量: eg: pname emp.ename%type(pname的类型应用emp表的ename字段类型) **记录行变量:**可以同时保存多个变量值,sql查询的一行数据 ...
- java乘法逆元与除法取模,逆元
题目描述 题目描述 求关于x的同余方程ax≡1(mod b)的最小正整数解. 输入格式 每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开. 数据规模: 对于40%的数据,2≤b≤1,000 ...
最新文章
- Android之Providing Resources(提供资源)
- 终于写了自己第一个有些用处的代码,留念留念,是模糊搜索并复制到指定文件夹...
- springboot 定时器_springBoot的定时器应该这样写
- ias日志察看器(.net)
- 路透:在美投资遇阻 中国科技资金转向以色列
- paip.转账功能设计流程
- Java正则表达式之Matcher类的find和matches方法的区别
- 程序员英文简历范例(前端)
- 教你制作纯净的,原生的WinPE环境【无桌面无任何添加剂】
- mariadb 卸载 Kali_Adobe官方卸载工具软件安装教程
- 如何搭建百度离线地图服务
- Excel数据分析(八)图表
- xxx(telnet, netstat): command not found
- bmob项目php后端,bmob开发文档-Bmob移动后端云服务平台
- 戏剧专业毕业论文题目
- matlab n维插值,简单调研多维插值方法
- 数据仓库分层存储技术揭秘
- QPlainText-----普通文本编辑器
- 用python写五彩糖咕噜和五彩环环
- 用python哆啦a梦的代码_【Python】绘制哆啦A梦