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分 ...
随机推荐
- Java强引用、软引用、弱引用及虚引用深入探讨
强引用.软引用.弱引用和虚引用深入探讨 为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器 ...
- exception is feign.RetryableException: Connection refused (Connection refused) executing GET http://......
2018-03-23 10:00:58.430 ERROR 31889 --- [nio-4321-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...
- 【js基础】创建对象的几种常见模式(工厂模式,构造函数模式,原型模式,构造原型组合模式)
一.工厂模式 缺点:没有解决对象识别的问题 优点:解决了创建多个相似对象的问题 function createPerson(name,age,job){ var o = new Object(); o ...
- log4Net辅助类
public class Log { private ILog logger; public Log(ILog log) { this.logger = log; } public void Debu ...
- Windows:Oracle 11g 备份脚本
@echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...
- Ubuntu + python pip遇到的问题
今天在做Flask跨源资源共享(CORS)的时候在安装flask-cors时遇到了两个问题. 首先我是在Ubuntu环境下安装的,整了好一会才弄得出来,现在整理一下. 安装flask-cors pip ...
- SQL取最大值编码(自动编码)
SQL取最大值编码(自动编码) 用途 : 使用SQL语法做出自动编码效果,例如将单号自动+1后,产生该笔单号 Table说明 SQL语法 SELECT 'A'+REPLICATE('0',7-len( ...
- iOS时间显示今天昨天
一.前言 今天无意间想起写这个功能,仔细考虑了一下,其实很简单,整体思路如下: 先获取你所要转换的时间的年月日,然后再获取今天和昨天的年月日,然后对比,进而返回不同的字符串. 二.实现步骤 首先,我们 ...
- HTML5原生拖拽事件的值传递(三dataTransfer对象)
引用一篇博客,讲解的比较详细:http://www.tuicool.com/articles/j6Zbam
- 【BZOJ4259】残缺的字符串
[BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时, ...