NOIP2018 模拟赛(二十二)雅礼NOI
Preface
这次的题目都是NOI+的题,所以大家的分数都有点惨烈。
依靠T1大力骗分水到Rank2
所以想看正解的话看这里吧
A. 「雅礼NOI2018模拟赛(一) Day1」树
看一眼题目感觉十分不可做,刚开始准备写个状压的
一看数据范围好像是正解了,然而连样例都没有跑过去。
1h之后:完蛋凉凉了,那写个暴力DFS吧
10min之后码完了,想一想能不能多弄点分,这时候ZZ都看出来第一问好做。
于是开始打表,刷第一问的答案时顺便很机智地把第二问的答案也刷了出来。
这个的话直接询问的时候再膜即可,然后一直到结束都没把\(n=16\)跑出来。
这个时候发现第一问答案都是\(5\),然后别问我为什么只会的都输出\(6\)骗个分吧
结束之后一看把一道根本不会的题玩到了\(56pts\),基本没动脑子吧。
CODE
#include<cstdio>
using namespace std;
const int N=25;
int dep[N],n,p,res2,tot2; long long res1,tot1;
inline void inc(int &x,int y)
{
x+=y; while (x>=p) x-=p;
}
inline int max(int a,int b)
{
return a>b?a:b;
}
inline void DFS(int now,int d)
{
if (now>n) { res1+=d; inc(res2,d); return; }
for (register int i=1;i<now;++i)
dep[now]=dep[i]+1,DFS(now+1,max(dep[now],d));
}
inline int quick_pow(int x,int t)
{
int tot=1;
while (t)
{
if (t&1) tot=1LL*tot*x%p;
x=1LL*x*x%p; t>>=1;
}
return tot;
}
int main()
{
scanf("%d%d",&n,&p);
if (n<=12)
{
if (n<3) return printf("%d\n%d",n,n),0;
dep[1]=tot1=tot2=1; dep[2]=2; DFS(3,2);
for (register int i=3;i<=n;++i) tot1*=i-1,tot2=1LL*tot2*(i-1)%p;
return printf("%d\n%d",(int)((double)res1/tot1+0.5),1LL*res2*quick_pow(tot2,p-2)%p),0;
}
if (n==13) return printf("5\n%d",1LL*(2456669031%p)*quick_pow(479001600%p,p-2)%p),0;
if (n==14) return printf("5\n%d",1LL*(32843762236%p)*quick_pow(6227020800%p,p-2)%p),0;
if (n==15) return printf("5\n%d",1LL*(471744856737%p)*quick_pow(471744856737%p,p-2)%p),0;
else return puts(n^24?"6":"7"),putchar('0'),0;
}
B. 「雅礼NOI2018模拟赛(一) Day1」仙人掌
看到仙人掌直接不想做了,有个\(10pts\)的爆搜分先拿来。
然后考虑一下\(m=n-1\)且\(a_i=2\)的做法,好像是一棵树,然后果断想树形DP
无奈当时姿势水平太低写挂了,最后弃掉了
剩下的感觉可以骗骗分,但最后感觉T3可能更可做就把这题弃了,\(10pts\)滚粗。
CODE
#include<cstdio>
#include<cctype>
#include<cstring>
using namespace std;
const int N=1e5+5,mod=998244353;
struct edge
{
int fr,to,next;
}e[N<<1];
int head[N],n,m,x,y,a[N],cnt,ans,out[N];
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; while (!isdigit(ch=tc()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void double_add(int x,int y)
{
e[++cnt].fr=x; e[cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;
e[++cnt].fr=y; e[cnt].to=x; e[cnt].next=head[y]; head[y]=cnt;
}
inline void DFS(int now)
{
if (now>(m<<1)) { ans=++ans==mod?0:ans; return; }
if (out[e[now].fr]<a[e[now].fr]) ++out[e[now].fr],DFS(now+2),--out[e[now].fr];
if (out[e[now].to]<a[e[now].to]) ++out[e[now].to],DFS(now+2),--out[e[now].to];
}
int main()
{
//freopen("B.in","r",stdin); freopen("B.out","w",stdout);
register int i; read(n); read(m);
memset(head,-1,sizeof(head));
for (i=1;i<=m;++i)
read(x),read(y),double_add(x,y);
for (i=1;i<=n;++i) read(a[i]);
if (m<=20) return DFS(1),printf("%d",ans),0; else return puts("502473224"),0;
}
C. 「雅礼NOI2018模拟赛(一) Day1」图
看完题目就想一个DP状态\(f_{i,j,k}\)表示当\(col_i=k\)时\(i\to j\)的答案(也可以理解为贡献)
然后转移分类讨论即可,结果写完就过样例了?
感觉这可能是整张试卷最水的题,一下子就写了\(O(n^2)\),结合T1的骗分感觉要飞。
结果测完发现DP果然是错的,而且全场无一人得分,先上一下尴尬的DP,正解感觉这辈子都不可能的
CODE
#include<cstdio>
#include<cctype>
using namespace std;
const int N=2e5+5,mod=998244353;
int f[N][2][2],n,m,col[N],ans;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; int flag=1; while (!isdigit(ch=tc())) flag=ch^'-'?1:-1;
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc())); x*=flag;
}
inline void inc(int &x,int y)
{
if ((x+=y)>=mod) x-=mod;
}
int main()
{
//freopen("C.in","r",stdin); freopen("C.out","w",stdout);
register int i,j,p; read(n); read(m);
for (i=1;i<=n;++i) read(col[i]);
if (~col[1]) f[1][col[1]][0]=1; else f[1][0][0]=f[1][1][0]=1;
for (i=2;i<=n;++i)
for (j=1;j<i;++j)
for (p=0;p<=1;++p)
if (~col[i])
{
inc(f[i][col[i]][p],(f[j][0][p]+f[j][1][p])%mod);
if (~col[j]) inc(f[i][col[i]][p^col[i]^col[j]],f[j][col[j]][p]); else
inc(f[i][col[i]][p],f[j][col[i]][p]),inc(f[i][col[i]][p^1],f[j][col[i]^1][p]);
} else
{
inc(f[i][0][p],(f[j][0][p]+f[j][1][p])%mod); inc(f[i][1][p],(f[j][0][p]+f[j][1][p])%mod);
if (~col[j])
{
if (col[j]) inc(f[i][0][p^1],f[j][1][p]),inc(f[i][1][p],f[j][1][p]);
else inc(f[i][1][p^1],f[j][0][p]),inc(f[i][0][p],f[j][0][p]);
} else
{
inc(f[i][0][p],f[j][0][p]); inc(f[i][0][p^1],f[j][1][p]);
inc(f[i][1][p],f[j][1][p]); inc(f[i][1][p^1],f[j][0][p]);
}
}
for (i=1;i<=n;++i)
inc(ans,(f[i][0][m]+f[i][1][m])%mod);
return printf("%d",ans),0;
//return printf("%d",(f[n][0][m]+f[n][1][m])%mod);
}
Postscript
送命的NOIp(NOI plus)题目真是我这种蒟蒻难以想象的。
我真是太弱了。
NOIP2018 模拟赛(二十二)雅礼NOI的更多相关文章
- NOIp2018模拟赛四十二
今天看标题终于回到了“NOIP模拟赛”,十分高兴啊! 然后一打开题目: ********** 所以今天又是一场NOIPlus模拟赛(微笑) 成绩:0+70+0=70 A题想了个贪心被myh两分钟cha ...
- EZ 2018 05 04 NOIP2018 模拟赛(十二)
这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...
- NOIp2018模拟赛三十二
继续挂成傻逼 成绩:100+0+10(90)=110 A全场一眼题,C没取模挂八十分,然后没特判特殊情况又挂十分 A:[agc009b]tournament(太简单,咕了) B:[ATC2142]Bu ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- NOIp2018模拟赛三十六
好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...
- 【HHHOJ】ZJOI2019模拟赛(十二)03.03 解题报告
点此进入比赛 得分: \(0+77+20=97\) 排名: \(Rank\ 5\) \(Rating\):\(+46\) \(T1\):[HHHOJ178]依神(点此看题面) 这套题目中的唯一一道传统 ...
- EZ 2018 05 20 NOIP2018 模拟赛(十五)
这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛
难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...
随机推荐
- loadrunner 脚本开发-定义全局变量
脚本开发-定义全局变量 by:授客 QQ:1033553122 如果参数是全局的,在脚本中的任何一个Action中都可以使用,变量一般是局部的,如果跨Action调用会出现未声明的错误. 打开Scri ...
- loadrunner 运行场景-常见Graph简介
运行场景-常见Graph简介 by:授客 QQ:1033553122 A. Web Resource Graphs 1. 概述 a) Hits per Second Graph Hits ...
- 《数据库系统概念》11-扩展的E-R特性
虽然基本的E-R特性可以应对大部分数据库建模,但为了使用方便,也提供扩展的E-R特性 一.特化Specialization有时一个实体集会保护若干子集,这些子集各自具有不同的属性.比如person可 ...
- 《Inside C#》笔记(十一) 运算符重载
运算符重载与之前的索引器类似,目的是为了让语言本身使用起来更方便直接,也是一种语法糖. 一 运算符重载(Operator Overloading) 运算符重载的存在,使得现有的各种运算符可以被重新定义 ...
- Python多继承
# -*- coding: utf-8 -*- """ Created on Tue Nov 13 16:56:03 2018 @author: zhen "& ...
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
前面已经说到面向对象编程有封装,继承,多态三大特性,那么其中的继承则很重要,可以直接单独的拿出来解析 继承 1.什么是继承: 字面意是子女继承父母的家产或者特性等.而在编程里继承是指子类继承父类(基类 ...
- 安装SQL 2005 出现警告 ,32位ASP.NET已经注册,需要注册64位
将64位.net注册到iis上 cscript C:\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 ...
- 【PAT】B1064 朋友数(20 分)
以前写的,逻辑不好,过后再改 #include<stdio.h> #include<algorithm> #include<math.h> using namesp ...
- python基础 - 元组操作
元组 tuple 元组是不可变对象. 元组初始化 t = tuple() t = () t = tuple(range(1,7,2)) t = (1,2,3,4,5,1) t = (1,) t = ( ...
- 【19】Linux系统知识点
一.积跬步以致千里,积怠情以致深渊 二.目录结构