这场题好弱啊qwq

先发代码再填坑

坑已填qwq

T1 bzoj4415

题目大意就是,有一个环,编号1-N,一开始指针在1,有一个长度为n的序列p,每次指针向后移pi个,然后把那个点删掉。

问所有点被删掉的顺序

然后用树状数组维护每个点有没有被删掉,然后就可以通过树状数组上二分求出每次删除的位置。然后就做完了

(以前不会树状数组上二分啊...一直写的log^2的二分...不过稍微YY一下就会了)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define N 700005 using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} int n;
struct BIT{
int c[N];
int lowbit(int x){return x&-x;}
void load(){
memset(c,0,sizeof(c));
for (int i=1;i<=n;++i){
++c[i];
if (i+lowbit(i)<=n) c[i+lowbit(i)]+=c[i];
}
}
int solve(int sum){
int x=0,now=0;
for (int i=(1<<20);i;i=i>>1)
if (x+i<=n&&now+c[x+i]<sum){
x+=i;now+=c[x];
}
for (int i=(++x);i<=n;i+=lowbit(i)) --c[i];
return x;
}
} bit; int main(){
n=read();
bit.load();
int now=n,sum=n;
for (int i=n;i;--i){
int x=read()%i+1;
if (i-sum>=x) sum=sum+x-1;
else sum=x+sum-i-1;
printf("%d\n",bit.solve(sum+1));
}
return 0;
}

T2 bzoj4416

题目大意是,给你一个字符串,长度l<=450,由n<=26个字母组成,要你判断  所有n个字母的排列是否都是这个给定串的子串(可以不连续)

Claris好神啊!

首先预处理出next[i][x]表示第i位之后最近的字母x的位置(不存在就l+1),然后dp[mask]表示集合为mask最早被全员匹配的位置,然后枚举最后出现的字母进行转移。

然后就做完了,dp[全1状态]<=l就是yes

啊..对..还有一个特判,就是我们可以发现满足要求的串最短是n^2级别的,所以如果n>21直接输出NO

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define N 30
#define L 505 using namespace std;
int n,l;char s[L];
int nxt[L][N],dp[1<<21^233]; inline int lowbit(int x){return x&-x;} bool work(){
scanf("%d%s",&n,s+1);l=strlen(s+1);
if (n>21) return 0;
for (int i=0;i<n;++i) nxt[l+1][i]=l+1;
for (int i=l;i>=0;--i){
for (int j=0;j<n;++j) nxt[i][j]=nxt[i+1][j];
if (i) nxt[i][s[i]-'a']=i;
}
for (int i=dp[0]=0;i<(1<<n);dp[++i]=0)
for (int j=0;j<n;++j)if ((i&(1<<j))>0)
dp[i]=max(dp[i],nxt[dp[i^(1<<j)]][j]);
return dp[(1<<n)-1]<=l;
} int main(){
int testnumber;scanf("%d",&testnumber);
while (testnumber--) puts(work()?"YES":"NO");
return 0;
}

T3 bzoj4417

傻逼矩阵乘法,n*2个状态表示跳奇数&偶数次每行的方案数,然后有2个转移矩阵一个是奇to偶另一个是偶to奇,随便YY一下快速幂就行了。

然而发现我的代码长度运行时间还有内存都是其他人的3倍左右QAQ一定是我傻逼了TAT

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define P 30011 using namespace std; struct matrix{
int x,y;
int a[105][105];
matrix(){}
matrix(int _x,int _y):x(_x),y(_y){}
matrix(int _x){
x=y=_x;
memset(a,0,sizeof(a));
for (int i=1;i<=_x;++i) a[i][i]=1;
}
} A,B,C,D; inline matrix operator *(matrix a,matrix b){
if (a.y!=b.x) swap(a,b);
matrix ret=matrix(a.x,b.y);
int z=a.y;
for (int i=1;i<=ret.x;++i)
for (int j=1;j<=ret.y;++j){
ret.a[i][j]=0;
for (int k=1;k<=z;++k)
(ret.a[i][j]+=(ll)a.a[i][k]*b.a[k][j]%P)%=P;
}
return ret;
} matrix pow(matrix x,int y){
matrix ret=matrix(x.x);
while (y){
if (y&1) ret=ret*x;
y/=2;
x=x*x;
}
return ret;
} int main(){
int n,m;scanf("%d%d",&n,&m);
if ((--m)==1){printf("%d\n",n<=2);return 0;}
A=matrix(2*n);B=matrix(2*n);
for (int i=1;i<=n;++i)
for (int j=max(i-1,1);j<=i+1&&j<=n;++j)
++A.a[j][i+n],++B.a[j+n][i];
int ans=0;
if (m&1){
C=A*B;
D=B*pow(C,m/2-1);
ans=D.a[2*n][1];
D=D*C;
ans=(D.a[2*n][1]-ans+P)%P;
}
else{
C=A*B;
D=pow(C,m/2-1);
ans=D.a[n][1];
D=D*C;
ans=(D.a[n][1]-ans+P)%P;
}
printf("%d\n",ans);
return 0;
}

  

bzoj4415&&bzoj4416&&bzoj4417:SHOI2013Day1题解的更多相关文章

  1. BZOJ4416 [Shoi2013]阶乘字符串 【序列自动机 + 状压dp】

    题目链接 BZOJ4416 题解 建立序列自动机,即预处理数组\(nxt[i][j]\)表示\(i\)位置之后下一个\(j\)出现的位置 设\(f[i]\)表示合法字符集合为\(i\)的最短前缀,枚举 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. HTML 学习笔记 CSS样式(边框)

    元素的边框(border)是围绕元素内容和内边距的一条或多条线 CSS border 属性允许你规定边框的样式 宽度和颜色 CSS 边框 在 HTML 中,我们使用表格来创建文本周围的边框,但是通过使 ...

  2. 后缀自动机&序列自动机综合

    好像序列自动机还没有写过- 串长为n的串共有n+1个节点,除了串中的n个节点,还有一个空的根节点放在串首.每个节点至多有26条出边,每条边连向它之后的第一个字符. 串中的任意一个子序列对应了一条根到某 ...

  3. PAT 1028. 人口普查(20)

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...

  4. 前端面试——css篇

    css盒子模型 在W3C模型中: 总宽度 = margin-left + border-left + padding-left + width + padding-right + border-rig ...

  5. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  6. java调用.net asmx / wcf

    一.先用asmx与wcf写二个.net web service: 1.1 asmx web服务:asmx-service.asmx.cs using System; using System.Coll ...

  7. JavaScript:关于事件处理程序何时可以直接访问元素的属性

    指定在元素的的事件处理程序中指定 <input type="button" value="click me" onclick="alert(th ...

  8. ASP.NET MVC 关闭 客户端 xss 检查

    为防止 XSS 攻击,asp.net 机制 会默认检测 请求报文 内是否有包含html标签,以提醒开发人员处理,报错如下:"从客户端中检测到有潜在危险的Request...值"当我 ...

  9. .net程序员转行做手游开发经历(五)

    大家好,真的是好长时间都没有更新博客了.上来博客园发现很多朋友还在关注我们,那给大家汇报下最近的一些进展. 收费版上线了,但是下载量不是很多,刚发布的时候下载每天的下载还是挺多,我们几个小伙伴在论坛. ...

  10. 理解JavaScript的作用域链

    上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现. 本文就看看Exec ...