2021.9.7考试总结[NOIP模拟49]
T1 Reverse
$BFS$暴力$O(n^2)$
过程中重复枚举了很多点,考虑用链表记录当前点后面可到达的第一个未更新点。
搜索时枚举翻转子串的左端点,之后便可以算出翻转后$1$的位置。
$code:$


1 #include<bits/stdc++.h>
2 using namespace std;
3
4 namespace IO{
5 inline int read(){
6 char ch=getchar(); int x=0,f=1;
7 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
8 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
9 return x*f;
10 }
11 inline void write(int x,char sp){
12 char ch[20]; int len=0;
13 if(x<0){ putchar('-'); x=~x+1; }
14 do{ ch[len++]=x%10+(1<<4)+(1<<5); x/=10; }while(x);
15 for(int i=len-1;~i;--i) putchar(ch[i]); putchar(sp);
16 }
17 inline int max(int x,int y){ return x<y?y:x; }
18 inline int min(int x,int y){ return x<y?x:y; }
19 inline void swap(int &x,int &y){ x^=y^=x^=y; }
20 inline void chmax(int &x,int y){ x=x<y?y:x; }
21 inline void chmin(int &x,int y){ x=x<y?x:y; }
22 } using namespace IO;
23
24 const int NN=1e5+5;
25 int n,m,s,k,dis[NN],nex[NN];
26 bool ban[NN];
27 vector<int>move;
28
29 void bfs(){
30 memset(dis,-1,sizeof(dis));
31 queue<int>q;
32 for(int i=1;i<=n;i++) nex[i]=i+2;
33 dis[s]=0; q.push(s);
34 while(!q.empty()){
35 int x=q.front(),l=max(1,x-k+1),r=min(x,n-k+1),tmp;
36 for(int i=2*l+k-x-1;i<=2*r+k-x-1;i=tmp){
37 tmp=nex[i]; nex[i]=nex[2*r+k-x-1];
38 if(i>n||ban[i]||dis[i]>=0) continue;
39 dis[i]=dis[x]+1; q.push(i);
40 }
41 q.pop();
42 }
43 }
44
45 signed main(){
46 n=read(); k=read(); m=read(); s=read();
47 for(int i=1;i<=m;i++) ban[read()]=1;
48 bfs();
49 for(int i=1;i<=n;i++) write(dis[i],' ');
50 return 0;
51 }
T1
T2 Silhouette
首先每一行与每一列都有交点,所以排序不影响方案数。于是先将$a,b$排序。如果$a_{max} \neq b_{max}$则无解。
考虑从大到小枚举$a,b$的值$s$,考虑$min(a_i,b_j)=s$的情况,那么每次考虑的位置会构成一个$L$形或矩形。而矩形又可以看作特殊的$L$。
对于$s_{max}$,考虑范围是右上角的矩形。考虑容斥,设$f_i$为矩形中至少$i$行不合法的方案数,令矩形$a$行$b$列,则有
$f[i]=C_a^i\times (S^i\times ((S+1)^{a-i}-S^{a-i}))^b$。
答案即为$\sum_{i=0}^a (-1)^i \times f_i$。
再考虑普遍情况。考虑如下图形
其中红色部分已满足行列要求。因此蓝色部分不能不满足行要求,绿色部分不能不满足列要求。
可以将蓝橙绿分为蓝橙和绿两部分分别计算。蓝橙部分类似特殊情况,但只有橙部分可能不合法。此后绿部分行列要求已被橙红两块满足,随便选即可。
令$f_i$为$a$中有至少$i$行不合法,有
$f[i]=C_a^i\times (S^i\times ((S+1)^{a+c-i}-S^{a+c-i}))^b\times (S^i\times (S+1)^{a-i})^d$
一样容斥,最后累乘即可。
$code:$


1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4
5 namespace IO{
6 inline int read(){
7 char ch=getchar(); int x=0,f=1;
8 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
9 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
10 return x*f;
11 }
12 inline void write(int x,char sp){
13 char ch[20]; int len=0;
14 if(x<0){ putchar('-'); x=~x+1; }
15 do{ ch[len++]=x%10+(1<<4)+(1<<5); x/=10; }while(x);
16 for(int i=len-1;~i;--i) putchar(ch[i]); putchar(sp);
17 }
18 inline int max(int x,int y){ return x<y?y:x; }
19 inline int min(int x,int y){ return x<y?x:y; }
20 inline void swap(int &x,int &y){ x^=y^=x^=y; }
21 inline void chmax(int &x,int y){ x=x<y?y:x; }
22 inline void chmin(int &x,int y){ x=x<y?x:y; }
23 } using namespace IO;
24
25 const int NN=1e5+5,p=1e9+7;
26 int n,ans,ext,tma,tmb,pra,prb,a[NN],b[NN],s[NN<<1];
27
28 namespace math{
29 int fac[NN],inv[NN];
30 inline int C(int x,int y){
31 if(x<y) return 0;
32 return fac[x]*inv[y]%p*inv[x-y]%p;
33 }
34 inline int qpow(int x,int y){
35 int res=1;
36 while(y){
37 if(y&1) res=res*x%p;
38 x=x*x%p;
39 y>>=1;
40 }
41 return res;
42 }
43 void init(){
44 fac[0]=inv[0]=1;
45 for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%p;
46 inv[n]=qpow(fac[n],p-2);
47 for(int i=n-1;i;i--) inv[i]=inv[i+1]*(i+1)%p;
48 }
49 } using namespace math;
50
51 inline int calc(int mia,int mib,int upa,int upb,int num){
52 int res=0;
53 for(int i=0;i<=mia;i++){
54 int now=C(mia,i)*qpow(qpow(num,i)*(qpow(num+1,mia+upa-i)-qpow(num,mia+upa-i)+p)%p,mib)%p;
55 now=now*qpow(qpow(num,i)*qpow(num+1,mia-i)%p,upb)%p;
56 if(i&1) now=p-now;
57 (res+=now)%=p;
58 }
59 return res;
60 }
61
62 signed main(){
63 n=read(); init(); ans=1;
64 for(int i=1;i<=n;i++) s[i] =a[i]=read();
65 for(int i=1;i<=n;i++) s[i+n]=b[i]=read();
66 sort(a+1,a+n+1); sort(b+1,b+n+1); sort(s+1,s+2*n+1);
67 ext=unique(s+1,s+2*n+1)-s-1;
68 if(a[n]!=b[n]){ puts("0"); return 0; }
69 pra=prb=n+1; tma=tmb=n;
70 for(int i=ext;i;i--){
71 while(a[tma-1]==s[i]&&tma-1) --tma;
72 while(b[tmb-1]==s[i]&&tmb-1) --tmb;
73 (ans*=calc(pra-tma,prb-tmb,n-pra+1,n-prb+1,s[i]))%=p;
74 pra=tma; prb=tmb;
75 }
76 write(ans,'\n');
77 return 0;
78 }
T2
T3 Seat
发现每次选座位区间长度的可重集是固定的,可以按照最大距离分层,然后进行$DP$。分奇偶讨论,
多理解几节课就差不多了..
不放代码了(几乎一样还放个锤子
2021.9.7考试总结[NOIP模拟49]的更多相关文章
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- 2021.9.13考试总结[NOIP模拟52]
T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...
- 2021.8.11考试总结[NOIP模拟36]
T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...
- 2021.7.29考试总结[NOIP模拟27]
T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...
- 2021.7.15考试总结[NOIP模拟16]
ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...
- 2021.9.21考试总结[NOIP模拟58]
T1 lesson5! 开始以为是个无向图,直接不懂,跳去T2了. 之后有看了一眼发现可暴力,于是有了\(80pts\). 发现这个图是有拓扑序的,于是可以用拓扑排序找最长路径.先找原图内在最长路径上 ...
- 2021.9.20考试总结[NOIP模拟57]
(换个编辑器代码就SB地不自动折叠了.. T1 2A 考察快读的写法. $code:$ T1 #include<bits/stdc++.h> #define scanf SCANF=sca ...
- 2021.9.14考试总结[NOIP模拟53]
T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...
- 2021.9.12考试总结[NOIP模拟51]
T1 茅山道术 仔细观察发现对于每个点只考虑它前面第一个与它颜色相同的点即可. 又仔细观察发现对一段区间染色后以这个区间内点为端点的区间不能染色. 于是对区间右端点而言,区间染色的贡献为遍历到区间左端 ...
随机推荐
- LayoutControl控件使用
因默认外边距过大需要将外边距缩小用以下代码实现layoutControlGroup1.Padding = DevExpress.XtraLayout.Utils.Padding.Empty;是否允许只 ...
- 创建 Spring容器的三种方式
一.src路径下打包完在war包的classes层级下 1.Spring容器创建的三种方式 创建Bean容器之后创建对象: 其中第三种使用的是BeanFactory对象 2.spring通过配置文件用 ...
- Linux残留的EFI启动项删除后又恢复的问题
电脑Windows + Fedora双系统,UEFI启动,共用同一个EFI分区.现在删除了Fedora系统,那么应该将EFI分区中的Fedora启动项也删除之. 按照网上的办法,在Windows上,尝 ...
- 【第十篇】- Git 远程仓库(Github)之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 远程仓库(Github) Git 并不像 SVN 那样有个中心服务器. 目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作. 你就需要将数据 ...
- 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ...
- Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录
用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原因:这主要是因为bash后面多了\r这个字符的原因.在lin ...
- Linux之crontab命令
简介 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell 脚本.时间间隔的单位可以 是分钟.小时.日.月.周及以上的任意组合.这个命令非常适合周期性的日志分析或数据备份 ...
- 【PHP数据结构】图的应用:最短路径
上篇文章的最小生成树有没有意犹未尽的感觉呀?不知道大家掌握得怎么样,是不是搞清楚了普里姆和克鲁斯卡尔这两种算法的原理了呢?面试的时候如果你写不出,至少得说出个大概来吧,当然,如果你是要考研的学生,那就 ...
- 简单学习PHP中的层次性能分析器
在 PHP 中,我们需要进行调试的时候,一般都会使用 memory_get_usage() 看下内存的使用情况.但如果想看当前的脚本 CPU 的占用情况就没有什么现成的函数了.不过,PHP 也为我们提 ...
- PHP中命名空间是怎样的存在(一)?
命名空间其实早在PHP5.3就已经出现了.不过大部分同学可能在各种框架的使用中才会接触到命名空间的内容,当然,现代化的开发也都离不开这些能够快速产出的框架.这次我们不从框架的角度,仅从简单的代码角度来 ...