Problem A: lcm

Time Limit: 1000 ms Memory Limit: 256 MB

Sample Input
3
1
2
5
Sample Output
1
4
55

HINT

对于 30% 的数据, n≤1000 .

对于 100% 的数据, t≤300000,n≤1000000 .

Solution

随便推推柿子就出来了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int miu[1000010];
int phi[1000010];
int p[1000010];
int b[1000010];
ll e[1000010];
ll f[1000010];
int cnt;
int maxn=1000000;
map<int,ll> d;
void init(){memset(b,0,sizeof b);int i,j;cnt=0;for(i=2;i<=maxn;i++){if(!b[i]){p[++cnt]=i;miu[i]=-1;phi[i]=i-1;}for(j=1;j<=cnt&&i*p[j]<=maxn;j++){b[i*p[j]]=1;if(i%p[j]==0){miu[i*p[j]]=0;phi[i*p[j]]=phi[i]*p[j];break;}miu[i*p[j]]=-miu[i];phi[i*p[j]]=phi[i]*phi[p[j]];}}e[1]=1;for(i=2;i<=maxn;i++)e[i]=(ll(i)*phi[i])/2;for(i=1;i<=maxn;i++)for(j=i;j<=maxn;j+=i)f[j]+=e[i];
}
void solve(){int n;scanf("%d",&n);printf("%lld\n",f[n]*n);
}
int main(){init();int t;scanf("%d",&t);while(t--)solve();
}

Problem B: lis

Time Limit: 1000 ms Memory Limit: 128 MB

Description

给定一个长度为 n 的序列 A={a1,a2,...,an} .

问是否存在一个长度为 L 的上升子序列. 即存在 {x1,x2,...,xL}(x1<x2<...<xL) , 使得 ax1<ax2<...<axL .

如果不存在, 输出 impossible . 否则, 输出 {ax1,ax2,...,axL} . 若存在多组解, 输出 {axi} 字典序最小的一组解.

Input

第一行两个数 n,L .

第二行 n 个数 a1,a2,...,an .

Output

输出只有一行. 如果无解, 输出 impossible , 否则输出字典序最小的一组解 .

Sample Input
4 2
2 3 1 5
Sample Output
1 5

HINT

对于 30% 的数据, 1≤L≤n≤10 .

对于 100% 的数据, 1≤ai≤100000,1≤L≤n≤100000 .

Solution

考虑倒着处理~

先按照权值排个序,从大到小,不断加入一个维护max的数据结构

这个数据结构维护的是倒着的数组中,以某节点结束的下降子序列的最长长度

那么每次加入一个数时,我们找一下在比自己位置后的数中,下降子序列的最长长度是多少

显然这个数的下降子序列的最长长度就是刚刚查找出来的那个值+1了

最后倒着来看,我们发现倒着的下降子序列就是原数组上升子序列了

输出时按顺序遍历,贪心即可

#include<bits/stdc++.h>
using namespace std;
int n;
int c[200001];
#define lowbit(x) x&-x
void upd(int x,int w){while(x<=n){c[x]=max(c[x],w);x+=lowbit(x);}
}
int query(int x){int ans=0;while(x){ans=max(ans,c[x]);x-=lowbit(x);}return ans;
}
struct data{int val;int id;
}p[200001];
bool operator <(data a,data b){return a.val==b.val?a.id<b.id:a.val<b.val;
}
int f[200001];
int main(){int l;scanf("%d%d",&n,&l);for(int i=1;i<=n;++i){scanf("%d",&p[i].val);p[i].id=i;}sort(p+1,p+1+n);for(int i=n;i>=1;--i){f[i]=query(n-p[i].id+1)+1;upd(n-p[i].id+1,f[i]);//printf("%d %d\n",p[i].id,f[i]);}int maxn=0;for(int i=1;i<=n;++i)maxn=max(maxn,f[i]);if(maxn<l){puts("impossible");return 0;}int last=0,lpos=0;for(int i=1;i<=n&&l>=1;++i){if(f[i]>=l&&p[i].id>lpos&&p[i].val>last){printf("%d ",p[i].val);l--;lpos=p[i].id,last=p[i].val;}}
}

Problem C: string

Time Limit: 1000 ms Memory Limit: 256 MB

Description

输入文件: string.in

输出文件: string.out

给定一个由且仅由字符 'H' , 'T' 构成的字符串 S .

给定一个最初为空的字符串 T , 每次随机地在 T 的末尾添加 'H' 或者 'T' .

问当 S 为 T 的后缀时, 在末尾添加字符的期望次数.

Input

输入只有一行, 一个字符串 S .

Output

输出只有一行, 一个数表示答案.

为了防止运算越界, 你只用将答案对 109+7 取模.

Sample Input
HTHT
Sample Output
20

HINT

对于 30% 的数据, |S|≤50 .

对于 100% 的数据, |S|≤1000000 .

Solution

对于当前已经匹配到的第i位:

有0.5的概率在下一位填对,然后继续往下匹配

同时也有0.5的概率在下一位填错,那我们就跳回下一位的失配指针重新开始匹配,但是这样的概率我们在之前是算过的,所以我们要减去

这个失配指针可以用kmp搞出来

然后到达某一步的期望就是之前的期望总和+自己所用的2步

于是转移方程:(g[i][wrong]即为失配指针)

\(sum_i=\sum\limits_{j=0}^{i-1}f_j\)

\(f_i=2+sum_{i}-sum_{g[i][wrong]}\)

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define int long long
const int mod=1e9+7;
int n,fail[1000001],nxt[1000001];
int sum[1000001];
char s[1000001];
signed main(){scanf("%s",s+1);n=strlen(s+1);fail[1]=0;for(int i=1,j=0;i<=n;){if(!j||s[i]==s[j])fail[++i]=++j;else j=fail[j];}for(int i=1;i<=n;i++){nxt[i]=s[fail[i]]==s[i]?nxt[fail[i]]:fail[i];sum[i]=((sum[i-1]*2+2)%mod-sum[nxt[i]])%mod;}printf("%lld\n",sum[n]);
}

转载于:https://www.cnblogs.com/youddjxd/p/11351482.html

noip2019集训测试赛(五)相关推荐

  1. [补档]noip2019集训测试赛(十五)

    Problem A: 传送带 Time Limit: 1000 ms Memory Limit: 256 MB Description 在一个二维平面上有两条传送带,每一条传送带可以看成是一条线段.两 ...

  2. [补档]noip2019集训测试赛(九)

    因为这次考试我一道题都不会,所以先不写了 转载于:https://www.cnblogs.com/youddjxd/p/11442143.html

  3. [补档]noip2019集训测试赛(八)

    Problem B: 2048 Special Judge Time Limit: 1000 ms Memory Limit: 256 MB Description 2048曾经是一款风靡全球的小游戏 ...

  4. [补档]noip2019集训测试赛(十)

    Problem A: fibonacci Time Limit: 2000 ms Memory Limit: 256 MB Description 小y最近迷上了fibonacci数列,他定义了一种数 ...

  5. [补档]noip2019集训测试赛(十二)

    Problem A: 记忆(memory) Time Limit: 1000 ms Memory Limit: 512 MB Description 你在跟朋友玩一个记忆游戏. 朋友首先给你看了n个长 ...

  6. [补档]noip2019集训测试赛(十三)

    Problem A: Fairy Time Limit: 1000 ms Memory Limit: 256 MB Description 给定n个点,m条边的无向图(无自环),可以从图中删除一条边, ...

  7. [补档]noip2019集训测试赛(十四)

    Problem A: Fibonacci(fib.pas/cpp) Time Limit: 1000 ms Memory Limit: 128 MB Description 豆豆最近迷上了Fibona ...

  8. noip2019集训测试赛(七)

    Problem A: Maze Time Limit: 1000 ms Memory Limit: 256 MB Description 考虑一个N×M的网格,每个网格要么是空的,要么是障碍物.整个网 ...

  9. 【2016北京集训测试赛】river

    HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...

最新文章

  1. 设计模式之八大设计原则
  2. php中间件怎么使用,laravel框架中间件简单使用方法示例
  3. openstack havana vlan安装成功
  4. Git如何处理代码冲突
  5. 织梦ajax加载文章列表,织梦dedecms首页列表页ajax点击下拉加载更多文章瀑布流效果...
  6. python面试题及答案 2019-这些2019年常考的Python面试题你都能答上来吗?
  7. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  8. bootstrap bootbox 属性及用法
  9. 小猫盘onespace x3p系统常见操作
  10. Claus Hansen加入Entrust Datacard,担任亚太地区和日本销售副总裁
  11. HttpRunner
  12. STM32滤波电容个数和大小的确定
  13. 那些裸辞青年,现在过得还好吗?
  14. trunc_normal = lambda stddev: tf.truncated_normal_initializer(0.0, stddev)解析
  15. ChatGPT真的像媒体宣传的那样“四平八稳”吗?
  16. HTML好看个人主页展示开源源码
  17. MySQL设置字段从指定数字自增,比如10000
  18. Basler GigE相机,关于丢帧问题的描述和解决【Basler】
  19. C# PHP 对汉字进行MD5计算,得到的结果不一样
  20. macOS: 查看隐藏文件

热门文章

  1. 【深度学习入门到精通系列】开始恢复更新通知~!
  2. 图像标记工具Labelme和LabelImg
  3. C++ STL (四)set使用
  4. python基础练习(八)
  5. 网络推广计划浅析外链发布要遵循的几点小技巧!
  6. 如何拓展外链引流,让网站成为“顶牛”?
  7. ruby网站部署到服务器,入门知识: 把代码部署到服务器, SSH
  8. java的mythread_java多线程 - myShadow - OSCHINA - 中文开源技术交流社区
  9. python黑客代码_[翻译]Python开发中的密码散列(Hashing)
  10. vim 双剑合璧,天下无敌(笔记)