因为漏写了函数签名在Dev5.11Dev5.11Dev5.11下开Wall并不会出错而爆零

T1:

发现只需要考虑是否有奇方案黑白点和当前方案为奇偶即可

#include<bits/stdc++.h>
using namespace std;
#define cs const
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define y1 shiki
#define fi first
#define se second
#define bg begin
namespace IO{cs int RLEN=1<<20|1;char ibuf[RLEN],*ib,*ob;inline char gc(){(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;}inline int read(){char ch=gc();int res=0;bool f=0;while(!isdigit(ch))f=(ch=='-'),ch=gc();while(isdigit(ch))res=(res*10)+(ch^48),ch=gc();return f?-res:res;}inline int readstring(char *s){int top=0;char ch=gc();while(isspace(ch))ch=gc();while(!isspace(ch)&&ch!=EOF)s[++top]=ch,ch=gc();return top;}
}
using IO::read;
using IO::readstring;template<typename tp>inline void chemx(tp &a,tp b){(a<b)?(a=b):0;}
template<typename tp>inline void chemn(tp &a,tp b){(a>b)?(a=b):0;}
cs int mod=998244353;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(int a,int b){return a<b?a-b+mod:a-b;}
inline int mul(int a,int b){static ll r;r=(ll)a*b;return (r>=mod)?(r%mod):r;}
inline void Add(int &a,int b){a=(a+b>=mod?a+b-mod:a+b);}
inline void Dec(int &a,int b){a=(a<b?a-b+mod:a-b);}
inline void Mul(int &a,int b){static ll r;r=(ll)a*b;a=(r>=mod)?(r%mod):r;}
inline int ksm(int a,int b,int res=1){for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline int Inv(int x){return ksm(x,mod-2);}
cs int N=200005;
int n,f[N][2][2][2],col[N],pw[N];
int main(){n=read();for(int i=1;i<=n;i++)col[i]=read();pw[0]=1;for(int i=1;i<N;i++)pw[i]=mul(pw[i-1],2);f[0][0][0][0]=1;for(int i=0;i<=n;i++)for(int a=0;a<2;a++)for(int b=0;b<2;b++)if(f[i][a][b][0]||f[i][a][b][1]){int t=i+1;int v0=f[i][a][b][0],v1=f[i][a][b][1],t0,t1;if(col[t]!=0){if(b){t0=mul(v0,pw[i-1]),t1=mul(v1,pw[i-1]);Add(f[i+1][a][b][0],t0),Add(f[i+1][a|1][b][1],t0);Add(f[i+1][a][b][1],t1),Add(f[i+1][a|1][b][0],t1);              }else{t0=mul(v0,pw[i]),t1=mul(v1,pw[i]);Add(f[i+1][a|1][b][1],mul(v0,pw[i]));Add(f[i+1][a|1][b][0],mul(v1,pw[i]));}}if(col[t]!=1){if(a){t0=mul(v0,pw[i-1]),t1=mul(v1,pw[i-1]);Add(f[i+1][a][b][0],t0),Add(f[i+1][a][b|1][1],t0);Add(f[i+1][a][b][1],t1),Add(f[i+1][a][b|1][0],t1);}else{t0=mul(v0,pw[i]),t1=mul(v1,pw[i]);Add(f[i+1][a][b|1][1],mul(v0,pw[i]));Add(f[i+1][a][b|1][0],mul(v1,pw[i]));}}}int res=0;for(int a=0;a<2;a++)for(int b=0;b<2;b++)Add(res,f[n][a][b][1]);cout<<res<<'\n';return 0;
}

T2:

考虑容斥,求1,21,21,2可达集合不交的方案并减去,枚举子集即可
接下来求可达集合方案数,也容斥,只需要枚举真正可达子集减去即可

#include<bits/stdc++.h>
using namespace std;
#define cs const
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define y1 shiki
#define fi first
#define se second
#define bg begin
namespace IO{cs int RLEN=1<<20|1;char ibuf[RLEN],*ib,*ob;inline char gc(){(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;}inline int read(){char ch=gc();int res=0;bool f=0;while(!isdigit(ch))f=(ch=='-'),ch=gc();while(isdigit(ch))res=(res*10)+(ch^48),ch=gc();return f?-res:res;}inline int readstring(char *s){int top=0;char ch=gc();while(isspace(ch))ch=gc();while(!isspace(ch)&&ch!=EOF)s[++top]=ch,ch=gc();return top;}
}
using IO::read;
using IO::readstring;template<typename tp>inline void chemx(tp &a,tp b){(a<b)?(a=b):0;}
template<typename tp>inline void chemn(tp &a,tp b){(a>b)?(a=b):0;}
cs int mod=1e9+7;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(int a,int b){return a<b?a-b+mod:a-b;}
inline int mul(int a,int b){static ll r;r=(ll)a*b;return (r>=mod)?(r%mod):r;}
inline void Add(int &a,int b){a=(a+b>=mod?a+b-mod:a+b);}
inline void Dec(int &a,int b){a=(a<b?a-b+mod:a-b);}
inline void Mul(int &a,int b){static ll r;r=(ll)a*b;a=(r>=mod)?(r%mod):r;}
inline int ksm(int a,int b,int res=1){for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline int Inv(int x){return ksm(x,mod-2);}
cs int N=18,M=(1<<N)|5;
int f[M],g[M],lk[N],ein[M],cnt[M],id[M],pw[M];
int n,m,lim;
int main(){#ifdef Stargazerfreopen("lx.in","r",stdin);#endifn=read(),m=read(),read(),lim=1<<n;pw[0]=1;for(int i=1;i<M;i++)pw[i]=mul(pw[i-1],2);for(int i=0;i<n;i++)id[1<<i]=i;for(int i=1;i<lim;i++)cnt[i]=cnt[i>>1]+(i&1);for(int i=1;i<=m;i++){int u=read()-1,v=read()-1;lk[u]|=1<<v,lk[v]|=1<<u;}for(int s=1;s<lim;s++){int u=id[s&(-s)],t=s-(1<<u);ein[s]=ein[t]+cnt[lk[u]&t];}for(int s=1;s<lim;s++)if(s&1){int res=pw[ein[s]];for(int t=(s-1)&s;t;t=(t-1)&s)if(t&1){Dec(res,mul(f[t],pw[ein[s^t]]));}f[s]=res;// cout<<s<<" "<<res<<'\n';}for(int s=1;s<lim;s++)if((s>>1)&1){int res=pw[ein[s]];for(int t=(s-1)&s;t;t=(t-1)&s)if((t>>1)&1){Dec(res,mul(g[t],pw[ein[s^t]]));}g[s]=res;//    cout<<s<<" "<<res<<'\n';}int res=pw[m];for(int s=1;s<lim;s++)for(int t=(s-1)&s;t;t=(t-1)&s)if((t&1)&&(((s-t)>>1)&1)&&(ein[t]+ein[s-t]==ein[s])){Dec(res,mul(f[t],mul(g[s-t],pw[ein[(lim-1)-s]])));//  cout<<s<<" "<<t<<" "<<res<<'\n';}cout<<res<<'\n';return 0;
}

T3:

显然可以恰好iii个长度可以恰好为iii
f[i]f[i]f[i]表示iii开头之后的最多个数

那么会发现f[i]≤f[i+1]+1f[i]\le f[i+1]+1f[i]≤f[i+1]+1
然后只需要checkcheckcheck是否合法
即i+f[i]i+f[i]i+f[i]之后的是否存在一个与[i,i+fi−1],[i+1,i+fi][i,i+f_i-1],[i+1,i+f_i][i,i+fi​−1],[i+1,i+fi​]的lcplcplcp≥fi−1\geq f_i-1≥fi​−1即可

#include<bits/stdc++.h>
using namespace std;
#define cs const
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define y1 shiki
#define fi first
#define se second
#define bg begin
namespace IO{cs int RLEN=1<<20|1;char ibuf[RLEN],*ib,*ob;inline char gc(){(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;}inline int read(){char ch=gc();int res=0;bool f=0;while(!isdigit(ch))f=(ch=='-'),ch=gc();while(isdigit(ch))res=(res*10)+(ch^48),ch=gc();return f?-res:res;}inline int readstring(char *s){int top=0;char ch=gc();while(isspace(ch))ch=gc();while(!isspace(ch)&&ch!=EOF)s[++top]=ch,ch=gc();return top;}
}
using IO::read;
using IO::readstring;template<typename tp>inline void chemx(tp &a,tp b){(a<b)?(a=b):0;}
template<typename tp>inline void chemn(tp &a,tp b){(a>b)?(a=b):0;}cs int N=500005;
int n,ans;
namespace Sa{int m,a[N],ht[N],rk[N],sa[N],sa2[N],buc[N],st[20][N],lg[N];inline void Sort(){for(int i=1;i<=n;i++)buc[rk[sa2[i]]]++;for(int i=1;i<=m;i++)buc[i]+=buc[i-1];for(int i=n;i>=1;i--)sa[buc[rk[sa2[i]]]--]=sa2[i];for(int i=1;i<=m;i++)buc[i]=0;}inline void build(char *s){m=26;for(int i=1;i<=n;i++)a[i]=s[i]-'a'+1;for(int i=1;i<=n;i++)rk[i]=a[i],sa2[i]=i;Sort();for(int i=1,pos=0;i<=n&&pos<n;i<<=1){pos=0;for(int j=n-i+1;j<=n;j++)sa2[++pos]=j;for(int j=1;j<=n;j++)if(sa[j]>i)sa2[++pos]=sa[j]-i;Sort();swap(sa2,rk);pos=1;rk[sa[1]]=1;for(int j=2;j<=n;j++)rk[sa[j]]=(sa2[sa[j]]==sa2[sa[j-1]]&&sa2[sa[j]+i]==sa2[sa[j-1]+i])?pos:(++pos);m=pos;}for(int i=1,j,k=0;i<=n;ht[rk[i++]]=k)for(k?k--:0,j=sa[rk[i]-1];a[i+k]==a[j+k];k++);for(int i=1;i<=n;i++)st[0][i]=ht[i];for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;for(int i=1;(1<<i)<=n;i++)for(int j=1;j+(1<<i)-1<=n;j++)st[i][j]=min(st[i-1][j],st[i-1][j+(1<<(i-1))]);}inline int lcp(int x,int y){if(x>y)swap(x,y);if(x==y)return n-sa[x]+1;x++;int t=lg[y-x+1];return min(st[t][x],st[t][y-(1<<t)+1]);}inline int ql(int p,int k){int l=1,r=p,res=p;while(l<=r){int mid=(l+r)>>1;if(lcp(mid,p)>=k)r=mid-1,res=mid;else l=mid+1;}return res;}inline int qr(int p,int k){int l=p,res=p,r=n;while(l<=r){int mid=(l+r)>>1;if(lcp(mid,p)>=k)l=mid+1,res=mid;else r=mid-1;}return res;}
}
namespace Seg{#define lc (p<<1)#define rc ((p<<1)|1)int mx[N<<2],M;void init(int n){for(M=1;M<=n+1;M<<=1);}void insert(int p,int k){p+=M,mx[p]=k,p>>=1;for(;p;p>>=1)mx[p]=max(mx[lc],mx[rc]);}int query(int l,int r){int res=0;l+=M-1,r+=M+1;for(;l^r^1;l>>=1,r>>=1){if(!(l&1))chemx(res,mx[l^1]);if(r&1)chemx(res,mx[r^1]);}return res;}#undef lc#undef rc
}inline bool check(int i,int len){using namespace Sa;return Seg::query(ql(rk[i],len-1),qr(rk[i],len-1))>=len-1||Seg::query(ql(rk[i+1],len-1),qr(rk[i+1],len-1))>=len-1;
}
int f[N];
char str[N];
int main(){#ifdef Stargazerfreopen("lx.in","r",stdin);#endifn=readstring(str);Sa::build(str);Seg::init(n);f[n]=1;int res=1;for(int i=n-1;i;i--){f[i]=f[i+1]+1;while(!check(i,f[i]))f[i]--,Seg::insert(Sa::rk[i+f[i]],f[i+f[i]]);chemx(res,f[i]);}cout<<res<<'\n';return 0;
}

【2020省选模拟】题解相关推荐

  1. 2017 04 04 省选模拟

    该场考试(或者说竞赛)题目来自北京省选模拟赛. 题目简单,但我们太菜. 第一题, 题意:一个N个点的环,每个点一个权值,求问最小的将这个环划分成K个区域的最小方差. 评价:出题人二合一,差评. 题解: ...

  2. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  3. C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学C组 第一场(2020.7.5) 题目+题解

    C/C++描述 第十一届蓝桥杯省赛 第一场(2020.7.5) 题目+题解   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓 ...

  4. 2020低压电工模拟考试题库及低压电工复审模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020低压电工模拟考试题库及低压电工复审模拟考试,包含低压电工模拟考试题库答案解析及低压电工复审模拟考试练习.由安全生产模拟考试一点通公众号结合国家低压 ...

  5. [2021.4.5多校省选模拟30]最小表示——map建边+广义SAM

    前言:虽然这题前面加了个括号是"省选模拟30",但是在accoders上是比赛"省选模拟31"里面的. 题目描述 题解 先贴出官方正解,是用的和后缀数组: 根据 ...

  6. 电力职称计算机多选,【2017年整理】职称计算机考试Office多选模拟题及答案.doc...

    [2017年整理]职称计算机考试Office多选模拟题及答案 时代学习社区(/)是一个专门提供计算机类.外语类.资格类.学历类,会计类.建筑类.医学类等教育信息服务的教育学习交流社区.希望大家本着人人 ...

  7. [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)

    [2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率,但是枚举斜率之后就会产生多条直线,并且这些直线的长度不一,难以快速求解,所以我们考虑换一种方法枚举. 枚举最远点对的横纵坐标之 ...

  8. [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)

    [2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要 ...

  9. [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)

    [2021.1.31多校省选模拟12]随机变换的子串 对于这三种操作,我们惊奇地发现有这样的性质,所有长度大于4的字符串都可以通过变换变为长度小于等于4的字符串,那么查询本质不同的字符串我们只需要处理 ...

最新文章

  1. APUE(第九章)进程关系
  2. 《深入PHP:面向对象、模式与实践》(二)
  3. SpringMVC系列一
  4. Windows Terminal 0.9 发布
  5. 软件需求和结构_软件工程复习 3640组考题
  6. 软件从“出生”到“消亡”的过程称为_软件测试面试最常问到的101个面试问题,你中枪了吗?(一)...
  7. 二阶系统响应指标图_自动控制理论_3.3 二阶系统的瞬态响应
  8. ROBOGUIDE软件:FANUC机器人弧焊焊接系统配置与虚拟仿真
  9. Windows 7 多国语言包(MUI)
  10. 手机电脑普通浏览器或UC浏览器缓存或下载的Y2hlbmppbmdjb25n0 Y2hlbmppbmdjb25n1 m3u8视频.ts格式视频合并工具成一个mp4
  11. 虚拟机网络连接失败解决方案
  12. 山西千年古堡张壁古堡:品“地道”中国年
  13. java导出csv文件,使用Excel打开中文乱码
  14. 方面级情感分析论文阅读《A Survey on Aspect-Based Sentiment Analysis: Tasks, Methods, and Challenges》
  15. 利用Retrofit, RxJava获取网络内容
  16. CTime::GetCurrentTime();获取当前时间
  17. Spring Boot的shiro整合(下)
  18. 18春计算机辅助设计作业答案,18春福师《计算机辅助设计—MAYA》在线作业二答案...
  19. 对比文本 python学习 工具类代码
  20. mysql优化手段——潭州学院

热门文章

  1. 深度分析红米note9和华为nova8哪个好-红米note9和华为nova8区别
  2. 巫师编程语言“咒语” 设想
  3. Java爬虫 --- 爬取王者荣耀英雄图片
  4. centos网络显示已连接但无法打开网页
  5. Python新手的数据批量处理教程(TXT文件)
  6. 南通大学java期末_南通大学生学Java,掌握这20%知识点至关重要!
  7. 同花顺抓起涨做波段指标公式 副图 源码
  8. Android获取手机序列号
  9. NYOJ——239月老的难题(二分图最大匹配)
  10. 【基础】HBuilderX 找不到手机或模拟器设备(安卓端)