[考试总结]noip模拟20
第五场,再挂分就没了。。
然后就没了。。
考场上一直想方法。
似乎想到了 \(T1\) 正解。
然而几个 \(k\) 的调试信息都让我迷失了自我。
然后有几句啥都没用的语句加在了上面。。
挂分。。。
然后就没有什么时间检查爆搜。
之后打的垃圾爆搜一共只有 \(20pts\)
最后一题不开 \(long\;long\) 爆炸成一分也是我没有想到的。。。
部分分数明明很多,但是却拿不到。
没有什么形容词了。
粗心,鲁莽,菜
T1:
设计方程进行转移。
先转移概率。
再统计个数。
(懒得打$ \(LaTeX\) 了,粘个图片)

看算法 \(4\) 就行了。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e3+10,inf = 1e9+1;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
namespace xin
{
int n,mod;
int f1[maxn][maxn],f2[maxn][maxn],f3[maxn][maxn],f4[maxn][maxn];
int ksm(int x,int y = mod - 2)
{
register int ret = 1;
while(y)
{
if(y & 1) ret = ret * x % mod;
x = x * x % mod; y >>= 1;
}
return ret % mod;
}
int dfs(int i,int j)
{
if(f1[i][j]) return f1[i][j];
f1[i][j] = (dfs(i-1,j-1) * (j - 1) % mod + f1[i-1][j] * (i - j) % mod) % mod;
return f1[i][j];
}
int dfs2(int i,int j)
{
if(f2[i][j]) return f2[i][j];
// try(i,1,n) f[i][j] = f3[i - 1][j] % mod * f1[i][j] % mod;
return f2[i][j];
}
int ans = 0;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<int>(); mod = get<int>();
f1[1][1] = f2[1][0] = 1; try(i,0,n) f3[0][i] = 1;
// dfs(n);
try(i,2,n) try(j,1,i)
f1[i][j] = (f1[i-1][j-1] * (j-1) % mod + f1[i-1][j] * (i - j) % mod) * ksm(i) % mod;//,cout<<"i = "<<i<<" j = "<<j<<" dp[i][j] = "<<dp[i][j]<<endl;
// try(i,2,n) try(j,1,i)
// cout<<"i = "<<i<<" j = "<<j<<" f1[i][j] = "<<f1[i][j]<<endl;
try(i,1,n)
try(j,0,n)
{
if(j) f2[i][j] = f3[i-1][j-1] % mod;
// cout<<"i = "<<i<<" j = "<<j<<" f[i][j] = "<<f[i][j]<<endl;
try(k,1,i) f3[i][j] += f2[k][j] * f3[i - k][j] % mod * f1[i][k] % mod,f3[i][j] %= mod;//;cout<<"i = "<<i<<" k = "<<k<<" f1[i][k] = "<<f1[i][k]<<endl;
}
// try(i,1,n) try(j,0,n) cout<<"i = "<<i<<" j = "<<j<<" f3[i][j] = "<<f3[i][j]<<endl;
try(i,1,n)
ans = (ans + (f2[n][i] - f2[n][i-1] + mod) % mod * i % mod ) % mod;
// try(i,1,n) cout<<"f2[n][i] = "<<f2[n][i]<<" f2[n][i-1] = "<<f2[n][i-1]<<endl;
// cout<<ans * ksm(n) % mod<<endl;
cout<<ans % mod<<endl;
return 0;
}
}
signed main(){return xin::main();}
T2:
首先考虑搜索。
这个题目很良心,搜索给了好多分数。
但是我们并不能无脑爆搜。
我们可以开始枚举每一个状态。
然后开始检查这个状态的正确性。
如果正确 ans++
最后就是答案
然后还有一个很大很大的坑点。
就是我们在发现 \(c=0\) 的点的时候,他整整给了 \(12pts\)
如果直接输出 \(1\),那么这 \(12pts\) 不就直接拿到了吗?
然而并不是这样,题目当中说从 1 点开始出发,但是如果从 1 点出发没有路径该怎么办呢?
所以还要特判这种 毒瘤 的情况。
然后才能拿到这个 \(12pts\)
\(72pts\;code\)
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 0x3f3f3f3f;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
class xin_edge{public:int next,ver,w;}edge[maxn];
int head[maxn],zhi = 0;
inline void add(int x,int y,int z) {edge[++zhi].ver = y ; edge[zhi].w = z; edge[zhi].next = head[x]; head[x] = zhi;}
int n,m,d,ans = 0;
bool vis[(1 << 20)+1];
bool sp1 = 1;
bool ok = 0;
void dfs(int x,int ms,int st,int num)
{
if(ok) return ;
if(num == ms)
{
ok = 1;
return ;
}
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver,z = edge[i].w;
if((((st >> num ) & 1)) == z) dfs(y,ms,st,num+1);
}
}
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); m = get<signed>(); d = get<signed>();
try(i,1,m)
{
register int x = get<signed>(),y = get<signed>(),z = get<signed>();
add(x,y,z); add(y,x,z);
if(z) sp1 = 0;
}
if(sp1)
{
bool ok = 0;
try(i,1,zhi) if(edge[i].ver == 1) ok = 1;
cout<<ok<<endl;
return 0;
}
try(st,0,(1<<d)-1)
{
ok = 0;
dfs(1,d,st,0);
ans += ok;
}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
然后正解也是考虑状态压缩。
之后线性递推出解。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 110,inf = 0x3f3f3f3f,maxst = (1 << 13) + 1;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
std::bitset<maxn>a[maxn],b[maxn],f1[maxst],f2[maxst];
int n,m,d,ans = 0;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); m = get<signed>(); d = get<signed>();
try(i,1,m)
{
register int x = get<signed>(),y = get<signed>(),z = get<signed>();
z ? a[x][y] = a[y][x] = true : b[x][y] = b[y][x] = true;
}
int d1 = d - (d >> 1),d2 = d - d1;
throw(u,n,1)
{
try(i,0,maxst-1) f1[i] = 0;
f1[1][u] = 1;
try(x,1,(1 << d1)-1) try(y,1,n)
if(f1[x][y])
f1[x << 1] |= a[y],f1[x << 1 | 1] |= b[y];
try(x,0,(1 << d1) - 1)
f2[x][u] = f1[1 << d1 | x].any();
}
try(i,0,(1 << d1)-1)try(j,0,(1 << d2) - 1)
if((f1[1<<d2|j] & f2[i]).any())
++ans;
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
T3:
这真是一道毒瘤题目。
到现在没有一人改出。。。
正解是一堆 \(STL\)
然而并不会。。。
贡献一个 \(45pts\) 做法
我们在观察每一个 单调子区间 的时候,只有他的两个端点是有效的。
所以不是端点的删去就行了。
然后愉快\(45pts\)
\(%45\;code\)
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+1;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
int x[maxn],zhi = 0,q[maxn];
int n,qnum,minn = inf,maxx = -inf;
bool sp1 = 1;
inline ll work1(int len)
{
register ll l = 0,r = l + len;ll res = 0;
try(i,1,zhi)
{
// cout<<"x[i] = "<<x[i]<<" l = "<<l<<" r = "<<r<<endl;
if(x[i] > r)
{
res += x[i] - r;
r = x[i];
l = r - len;
}
if(x[i] < l)
{
res += l - x[i];
l = x[i];
r = l + len;
}
}
return res;
}
inline ll work2(int len)
{
register ll l = 0,r = l + len,res = 0;
try(i,1,n)
{
if(q[i] > r)
{
res += q[i] - r;
r = q[i];
l = r - len;
}
if(q[i] < l)
{
res += l - q[i];
l = q[i];
r = l + len;
}
}
return res;
}
bool sp2 = 1;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); qnum = get<signed>();
try(i,1,n) q[i] = get<ll>();
x[++zhi] = q[1];
try(i,2,n-1)
{
if(q[i] >= q[i-1] and q[i] <= q[i+1]) continue;
if(q[i] <= q[i-1] and q[i] >= q[i+1]) continue;
x[++zhi] = q[i];
}
x[++zhi] = q[n];
try(i,1,qnum)
{
register int len = get<signed>();
if(n > 1000)printf("%lld\n",work1(len));
else printf("%lld\n",work2(len));
}
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟20的更多相关文章
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- 2021.9.20考试总结[NOIP模拟57]
(换个编辑器代码就SB地不自动折叠了.. T1 2A 考察快读的写法. $code:$ T1 #include<bits/stdc++.h> #define scanf SCANF=sca ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- [考试反思]NOIP模拟测试19:洗礼
[]260 []230[]210 []200[8]170[9]160 这套题一般,数据很弱,T1T2暴力都能A,而且都是一些思维题,想不到就爆0. 原因不明,很多一直很强的人在这一次滑铁卢了,于是我个 ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
随机推荐
- 深入Netty逻辑架构,从Reactor线程模型开始
本文是Netty系列第6篇 上一篇文章我们从一个Netty的使用Demo,了解了用Netty构建一个Server服务端应用的基本方式.并且从这个Demo出发,简述了Netty的逻辑架构,并对Chann ...
- 【VBA】读取另一个excel工作簿中的内容
后台打开工作簿读取内容源码: Sub subOpenWorkbook() Dim datebase As String datebase = "... ....xlsx" Appl ...
- ThreadPoolExecutor参数详解
ThreadPoolExecutor全部参数的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ke ...
- 如何编写shell脚本
1.首先创建一个目录 vi hello.sh 2.编写shell第一行 #!/bin/bash (为了声明是shell脚本,第一行都要这么写) 3.可以添加注释 #the first p ...
- Qt实现基于多线程的文件传输(服务端,客户端)
1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...
- Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 目录 Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 1 Optimizing Storage Layout f ...
- C++中封装和继承的访问权限
众所周知,C++面向对象的三大特性为:封装,继承和多态.下面我们就先对封装做一些简单的了解.封装是通过C++中的类来完成的,类是一种将抽象转换为用户定义类型的工具.类的定义如下: class circ ...
- 『无为则无心』Python基础 — 12、Python运算符详细介绍
目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...
- 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片
目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...
- JS 使用try catch捕获异常
JS 使用try catch捕获异常 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 前端是攻克客户的先锋,需要特别注意到 ...