AB:div 3 AB???

  C:div 1 C???场内自闭的直接去看D。事实上是个傻逼题,注意到物品相对顺序不变,二分边界即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,a[N],tot;
char s[N],b[N];
bool check(int k,int op)
{
for (int i=1;i<=m;i++)
if (b[i]==s[k])
{
if (a[i]==0) k--;
else k++;
if (k==0)
{
if (op==0) return 1;
else return 0;
}
if (k==n+1)
{
if (op==1) return 1;
else return 0;
}
}
return 0;
}
signed main()
{
tot=n=read(),m=read();
scanf("%s",s+1);
for (int i=1;i<=m;i++)
{
b[i]=getc();a[i]=getc()=='R';
}
int l=1,r=n,ans=0;
while (l<=r)
{
int mid=l+r>>1;
if (check(mid,0)) ans=mid,l=mid+1;
else r=mid-1;
}
tot-=ans;
l=1,r=n;ans=n+1;
while (l<=r)
{
int mid=l+r>>1;
if (check(mid,1)) ans=mid,r=mid-1;
else l=mid+1;
}
tot-=n+1-ans;
cout<<tot;
return 0;
//NOTICE LONG LONG!!!!!
}

  D:显然对小模数取模后,大模数不会再产生影响。于是将模数从大到小排序,设f[i][j]为考虑了前i大模数后当前值是j的概率,转移考虑第i个模数是否在前缀单调栈中,若在则转移对其取模,在栈中相当于其要在比它小的所有数的前面,概率显然为1/(n-i+1)。场上莫名其妙的认为这个概率是1/(n-i+1)!,然后就自闭了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 210
#define M 100010
#define P 1000000007
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,a[N],f[N][M],fac[N],inv[N];
signed main()
{
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
n=read(),m=read();
for (int i=1;i<=n;i++) a[i]=read();
sort(a+1,a+n+1);reverse(a+1,a+n+1);
fac[0]=1;for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%P;
inv[0]=inv[1]=1;for (int i=2;i<=n;i++) inv[i]=P-1ll*(P/i)*inv[P%i]%P;
f[0][m]=1;
for (int i=1;i<=n;i++)
{
for (int j=0;j<=m;j++)
{
f[i][j]=(f[i][j]+1ll*f[i-1][j]*(P+1-inv[n-i+1]))%P;
f[i][j%a[i]]=(f[i][j%a[i]]+1ll*f[i-1][j]*inv[n-i+1])%P;
}
}
int ans=0;
for (int j=0;j<=m;j++) ans=(ans+1ll*f[n][j]*fac[n]%P*(j%a[n]))%P;
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  E:最后5分钟才看这个题,然后发现是个一眼题。考虑黑白球哪个先被拿完,不妨设是白球,然后见注释。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define P 1000000007
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,f[N],fac[N],inv[N];
int ksm(int a,int k)
{
int s=1;
for (;k;k>>=1,a=1ll*a*a%P) if (k&1) s=1ll*s*a%P;
return s;
}
int Inv(int a){return ksm(a,P-2);}
int C(int n,int m){if (m>n) return 0;return 1ll*fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{
freopen("e.in","r",stdin);
freopen("e.out","w",stdout);
n=read(),m=read();
fac[0]=fac[1]=1;for (int i=1;i<=n+m;i++) fac[i]=1ll*fac[i-1]*i%P;
inv[0]=inv[1]=1;for (int i=2;i<=n+m;i++) inv[i]=P-1ll*(P/i)*inv[P%i]%P;
for (int i=2;i<=n+m;i++) inv[i]=1ll*inv[i-1]*inv[i]%P;
for (int i=m;i<n+m;i++)
{
int p=1ll*C(i-1,m-1)*Inv(ksm(2,i))%P;
f[1]=(f[1]+1ll*(i-m)*Inv(i-1)%P*p)%P;
f[i]=(f[i]+P-1ll*(i-m)*Inv(i-1)%P*p%P)%P;
f[i+1]=(f[i+1]+p)%P;
}
for (int i=n;i<n+m;i++)
{
int p=1ll*C(i-1,n-1)*Inv(ksm(2,i))%P;
f[1]=(f[1]+1ll*(n-1)*Inv(i-1)%P*p)%P;
f[i]=(f[i]+P-1ll*(n-1)*Inv(i-1)%P*p%P)%P;
f[i]=(f[i]+p)%P;
f[i+1]=(f[i+1]+P-p)%P;
}
//白球是在第i次被拿完的 之前黑白球都存在 则每次拿黑白球概率均等 其概率为C(i-1,m-1)/2^i
//考虑该情况下第j次拿黑球的概率 显然第i次不可能
//对j<i和j>i分别考虑
//j<i时,概率为(i-m)/(i-1)
//j>i时,概率为1
//若白球是最后一次被拿完的 再考虑黑球是什么时候被拿完的
//类似
for (int i=1;i<=n+m;i++) f[i]=(f[i]+f[i-1])%P;
for (int i=1;i<=n+m;i++) printf("%d\n",f[i]);
return 0;
//NOTICE LONG LONG!!!!!
}

  F:咕

ExaWizards 2019的更多相关文章

  1. 【AtCoder】ExaWizards 2019

    ExaWizards 2019 C - Snuke the Wizard 发现符文的相对位置不变,直接二分某个位置是否到达最左或最右来计算 #include <bits/stdc++.h> ...

  2. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

  3. ExaWizards 2019 English D - Modulo Operations(DP)

    Time Limit: 2 sec / Memory Limit: 1024 MB Score : 600600 points Problem Statement Snuke has a blackb ...

  4. AtCoder ExaWizards 2019 D Modulo Operations

    题意 给出一个长度为\(n\)的数列和数字\(X\),对于数列的每一种排列,其权值\(X\)依次对排列中的数取模,求出\(n!\)种情况最后剩下的数的权值和 分析 如果大的数字排在小的数字后面,那么大 ...

  5. Solution -「ExaWizards 2019 C」Snuke and Wizards

    \(\mathcal{Description}\)   Link.   给定一个长度为 \(n\) 的字符串 \(s\),每个字符上初始有一张卡片.\(q\) 次操作,每次指定 \(s\) 中字符为 ...

  6. yyb省选前的一些计划

    突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...

  7. AtCoder 神题汇总

    记录平时打 AtCoder 比赛时遇到的一些神题. Tenka1 Programmer Contest 2019 D Three Colors 题目大意 有 $n$ 个正整数 $a_1, a_2,\d ...

  8. AtCoder整理(持续更新中……)

    做了那么久的atcoder觉得自己的题解发的很乱 给有想和我一起交流atcoder题目(或者指出我做法的很菜)(或者指责我为什么整场比赛只会抄题解)的同学一个索引的机会??? 于是写了个爬虫爬了下 A ...

  9. 2019年台积电进军AR芯片,将用于下一代iPhone

    近日,有报道表示台积电10nm 芯片可怜的收益率可能会对 2017 年多款高端移动设备的推出产生较大的影响,其中自然包括下一代 iPhone 和 iPad 机型.不过,台积电正式驳斥了这一说法,表明1 ...

随机推荐

  1. Arduino通过MAX9814实现录音

    如果通过Arduino进行录音不是单纯地接一个驻极电容MIC就可以的,因为自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码.即PCM编码.PCM通过抽样.量化.编码三个步骤将连续 ...

  2. python实战案例--银行系统

    stay hungry, stay foolish.求知若饥,虚心若愚. 今天和大家分享一个python的实战案例,很多人在学习过程中都希望通过一些案例来试一下,也给自己一点动力.那么下面介绍一下这次 ...

  3. MSSQL清理日志\删除数据\收缩数据库

    首先解释一下数据库的版本是SQL Server 2012.清除的数据库800多G,磁盘空间就剩10多G,数据量最多的表有2亿.目的就是清楚去年的数据(2017年之前),遇到了一些问题,总结起来就是三方 ...

  4. 在java中怎样获得当前日期时间

    Calendar cal = Calendar.getInstance();    java.text.SimpleDateFormat sdf = new SimpleDateFormat(&quo ...

  5. Python之切片操作

    1.列表list中使用 1.range()生成器 就是list取值的一种方式. 生成器range(),用于写列表的范围,如果只写一个数,就表示从0开始,到写入的值-1: l=list(range(10 ...

  6. PHP的优化建议(仅借鉴)

    转载: https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则 ...

  7. laravel belongsTo使用

    前提:订单表(order)和用户表(user) 表结构: order CREATE TABLE `order` ( `id` char(16) COLLATE utf8mb4_unicode_ci N ...

  8. 遍历List过程中删除操作报java.util.ConcurrentModificationException错误

    1:遍历List 同时 remove 元素,出现java.util.ConcurrentModificationException错误 @Test public void test3(){ List& ...

  9. java lang(ClassLoader)

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  10. [服务器]Gartner:2018年第四季度全球服务器收入增长17.8% 出货量增长8.5%

    Gartner:2018年第四季度全球服务器收入增长17.8% 出货量增长8.5% Gartner 是不是也是花钱买榜的主啊.. 简单看了一下 浪潮2018Q4的营收18亿刀 (季度营收110亿人民币 ...