NOIP模拟「random·string·queen」
T1:random
我又来白剽博客了:
详细证明请看土哥
土哥写的不是很详细,我在这里详细写一下:
首先,对于f[n]的式子:
加一是那一个对的贡献,大C是选其余的几个数,\(2^{N}\)是总的子集个数。
逆序对的期望个数是:
首先,所有数字两两匹配,共有\(n*(n-1)\)对,,然后,某个对成为逆序对的的概率是50%,所以变成了四分之。
上代码:
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
#define inf INT_MAX
typedef long long ll;
const ll mod=998244353;
ll n;
ll read()
{
rr ll x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
ll qpow(ll base,ll exp)
{
ll ret=1ll;
while(exp)
{
if(exp&1) ret=ret*base%mod;
base=1ll*base*base%mod;
exp>>=1;
}
return ret;
}
};
using namespace STD;
int main()
{
n=read();
ll inv=qpow(9,mod-2);
for(rr int i=1;i<=n;i++)
{
ll x=read()%mod;
cout<<(x*x%mod-1+mod)*inv%mod<<'\n';
}
}
T2:string
气死,这题我改了一整天,结果发现是二分与Hash表的指针打错了,气死。
这题的思路是Hash+Trie。
手写Hash,快的一批。
注意后缀要倒着插,前缀要正着插。
代码:
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
#define inf INT_MAX
#define scanf ybbb=scanf
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+4;
const int LEN=2e5+4;
const ull base=131;
int m,ybbb;
int pre[N],suc[N];
char s[N]="";
ull mi[N],has[N],rehas[N];
struct node
{
node * nxt;
ull key;
int sum;
node()
{
key=sum=0;
nxt=NULL;
}
node(ull key_,int sum_)
{
key=key_,sum=sum_;
nxt=NULL;
}
};
class Hash
{
private:
node * head[LEN];
public:
void insert(ull,int);
node * find(ull);
}h[2];
void Hash::insert(ull key,int sum)
{
ull x=key%(LEN-4);
if(head[x]==NULL)
{
head[x]=new node(key,sum);
return ;
}
node * temp=head[x];
node * pre=NULL;
while(temp!=NULL&&(temp->key!=key))
{
pre=temp;
temp=temp->nxt;
}
if(temp==NULL)
{
temp=new node(key,sum);
if(pre!=NULL)
pre->nxt=temp;
return;
}
temp->sum=sum;
}
node * Hash::find(ull key)
{
ull x=key%(LEN-4);
node * temp=head[x];
while(temp!=NULL&&temp->key!=key)
temp=temp->nxt;
return temp;
}
class Trie
{
private:
int tot;
int ch[LEN][28];
int cnt[LEN];
public:
int sp;
Trie(){tot=1;}
void insert(char*,char*);
void get(int,ull);
}t[2];
void Trie::insert(char * st,char * en)
{
int p=1;
if(st>=en)
{
for(rr char * i=st;i>=en;i--)
{
int x=(*i)-'a'+1;
if(ch[p][x]==0) ch[p][x]=++tot;
p=ch[p][x];
cnt[p]++;
}
}
else
{
for(rr char * i=st;i<=en;i++)
{
int x=(*i)-'a'+1;
if(ch[p][x]==0) ch[p][x]=++tot;
p=ch[p][x];
cnt[p]++;
}
}
}
void Trie::get(int id,ull has)
{
for(rr int i=1;i<=26;i++)
{
if(ch[id][i])
{
cnt[ch[id][i]]+=cnt[id];
h[sp].insert(has*base+i,cnt[ch[id][i]]);
get(ch[id][i],has*base+i);
}
}
}
int read()
{
rr int x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
void Pre()
{
mi[0]=1;
for(rr int i=1;i<=N-2;i++)
mi[i]=mi[i-1]*base;
}
inline ull substr(int l,int r){return has[r]-has[l-1]*mi[r-l+1];}
inline ull resubstr(int l,int r){return rehas[l]-rehas[r+1]*mi[r-l+1];}
};
using namespace STD;
int main()
{
Pre();
scanf("%s",s+1);
m=read();
for(rr int i=1;i<=m;i++)
{
char a[N]="";
scanf("%s",a+1);
int len=strlen(a+1);
t[0].insert(a+1,a+len);
t[1].insert(a+len,a+1);
}
t[0].sp=0,t[1].sp=1;
t[0].get(1,0),t[1].get(1,0);
int len=strlen(s+1);
for(rr int i=1;i<=len;i++)
has[i]=has[i-1]*base+s[i]-'a'+1;
for(rr int i=len;i>=1;i--)
rehas[i]=rehas[i+1]*base+s[i]-'a'+1;
//suc
for(rr int i=1;i<=len;i++)
{
int l=1,r=i;
while(l<r)
{
int mid=(l+r)>>1;
ull x=resubstr(mid,i);
node * temp=h[1].find(x);
if(temp==NULL) l=mid+1;
else r=mid;
}
ull x=resubstr(l,i);
node * temp=h[1].find(x);
if(temp!=NULL)
suc[i]=temp->sum;
}
//pre
for(rr int i=len;i>=1;i--)
{
int l=i,r=len;
while(l<r)
{
int mid=(l+r+1)>>1;
ull x=substr(i,mid);
node * temp=h[0].find(x);
if(temp==NULL) r=mid-1;
else l=mid;
}
ull x=substr(i,l);
node * temp=h[0].find(x);
if(temp!=NULL)
pre[i]=temp->sum;
}
ll ans=0;
for(rr int i=1;i<len;i++)
ans+=1ll*suc[i]*pre[i+1];
printf("%lld\n",ans);
}
T3:queen
emmmm。。。。官方题解已经很详细了,就不写了,但是土哥给了两个优化,还是很香的。
一个是对于\(\sum_{i=0}^{n}\)\(C^{m}_{i}\)=\(C^{m+1}_{n+1}\)的优化(证明是杨辉三角裂项)。
另一个是\(\sum_{i=1}^{n}\)\(i^{2}\)=\(n*(n+1)*(2*n+1)/6\)。
真的棒极了。
NOIP模拟「random·string·queen」的更多相关文章
- 7.27考试总结(NOIP模拟25)[random·string·queue]
死亡的尽头,没有神 T1 random 解题思路 这波是找规律完胜了.. lby dalao根据样例找出了正确的式子:\(\dfrac{n^2-1}{9}\) 然而,我这个菜鸡却推出了这样一个错误的式 ...
- NOIP 模拟 $25\; \rm string$
题解 \(by\;zj\varphi\) 考虑对于母串的每个字符,它在匹配串中有多少前缀,多少后缀. 设 \(f_i\) 表示 \(i\) 位置匹配上的前缀,\(g_i\) 为后缀,那么答案为 \(\ ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- Solution Set - 神奇 NOIP 模拟赛
\[\mathfrak{\text{Defining }\LaTeX\text{ macros...}}\newcommand{\vct}[1]{\boldsymbol{#1}}\newcommand ...
- 企业运营对 DevOps 的「傲慢与偏见」
摘要:出于各种原因,并非所有人都信任 DevOps .有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps ...
随机推荐
- 字符串对象 API
length--获取字符串的长度 charAt(n)--查找下标对应的字符串 indexOf(str)--查找某个字符首次出现的下标,找不到返回-1 lastIndexOf(str)--查找某个字符最 ...
- anyRTC SDK 5月迭代:优化自定义加密功能,让通信更安全
anyRTC SDK 5月上新,新增多种加密类型,让实时音视频通信更安全:新增移动端推流支持1080P分辨率的支持:此外还对事件上报.日志详情.数据统计.网络传输等多项功能进行了优化改进. 以下为更新 ...
- Podman 快速入门
今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备. 我的应用主要以单机版容器为主 ...
- 获取windows 操作系统下的硬件或操作系统信息等
奇怪的工作,制作的是一款办公应用软件,领导却要求我统计用户计算机的物理信息,什么CPU的型号.核心数,什么内存信息等各种乱七八糟的用户信息.我想问,现在用户的信息就这么没有隐私性了么?想获取就获取传递 ...
- MySQL基本类型、操作
MySQL 前言(一些废话,可以不看) 为什么学习数据库呢,大家都知道,为了学习删库跑路,因为数据库在工作中起着至关重要的作用,只会写代码的是码农:学好数据库,基本能混口饭吃:在此基础上再学好操作系统 ...
- 在游戏中播放cg视频遇到的问题
遇到问题 我们线上手游要给港澳台用户增加cg视频,在我之前文章中已经讲到了我们是怎么在unity中播放cg的--><使用AVPro Video在Unity中播放开场视频(CG)笔记> ...
- 21JavaScript笔记(1)
JavaScript 基于对象和事件驱动 简单描述性语言 函数优先 解释型(即时编译型) 具有安全性的脚本语言 1.js组成 核心语法(ECMAScript):开放的.标准的脚本语言规范,主要包含了语 ...
- Internet的接入与IP地址 概述
文章目录 一.计算机接入Internet 1.公用交换电话网(PSTN)接入 2.有线电视(CATV)接入 3.局域网接入 4.无线接入 二.IP地址 1.IP地址的格式 2.IP地址分类 3.子网掩 ...
- NOIP 模拟 $34\; \rm Equation$
题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x ...
- redisson 分布式加锁
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...