[考试总结]noip模拟42
开始给了一个简单的题目,但我还是没有珍惜。
一个简简单单的树形 \(dp\),然而因为取模却不知道该如何比较大小。。
其实可以取 \(log\),然后我就梦中惊坐起,然后想到了魔法少女lbw
淦
然后拿到了 \(15pts\)。
然而太虚真人因为拍掉了魔法少女lbw,然后码了一个高精。
然后。。。
过了?!
好吧,还是 \(nb\)
卷
就是一个非常非常基础的树形 \(dp\)
用 \(f_{i,1/0} 来表示选择这个还是不选择这个\)
其实刚开始的时候会有一个非常 \(naive\) 的想法就是按照深度奇偶进行分开,然后分别进行统计。
但是这个显然是个假的。
就好比这个图:

后面是点权,然后发现那个想法就是假的。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#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)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
#define int long long
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7,mod = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
int f[maxn][2];
class xin_edge{public:int next,ver;}edge[maxn];
int head[maxn],ced = 0;
inline void add(int x,int y) {edge[++ced].ver = y; edge[ced].next = head[x]; head[x] = ced;}
int w[maxn],n;
int ind[maxn];
int d[maxn];
long double sum[maxn][2];
void dfs(int x,int fa)
{
d[x] = d[fa] + 1;
asm(i,x)
{
register int y = edge[i].ver;
if(y == fa) continue;
dfs(y,x);
f[x][1] = f[x][1] % mod * f[y][0] % mod;
sum[x][1] += sum[y][0];
f[x][0] = (f[x][0] * (sum[y][1] > sum[y][0] ? f[y][1] : f[y][0])) % mod;
sum[x][0] += sum[y][1] > sum[y][0] ? sum[y][1] : sum[y][0];
}
}
bool sp1 = 1;
inline short main()
{
io >> n;
try(i,1,n) io >> w[i],f[i][0] = 1,sum[i][0] = log(1);
try(i,1,n - 1)
{
register int x,y; io >> x >> y;
add(x,y); add(y,x);
ind[x] ++; ind[y] ++;
if(!(x == 1) and !(y == 1)) sp1 = 0;
}
if(sp1)
{
int ans = 1;
try(i,2,n) ans = ans * w[i] % mod;
cout<<ans<<endl;
return 0;
}
try(i,1,n) if(ind[i] == 1) f[i][1] = w[i],sum[i][1] = log(w[i]); else f[i][1] = w[i],sum[i][1] = log(w[i]);
dfs(1,0);
// try(i,1,n) sb(i),sb(f[i][0]),jb(f[i][1]);
cout<<(sum[1][0] > sum[1][1] ? f[1][0] : f[1][1])<<endl;
return 0;
}
}
signed main() {return xin::main();}
简单题
似乎并不是很简单。
是个组合数学的题目,然后使用 \(Lucas\)
然而我居然忘了调用 \(Lucas\) 只用 \(C\) 就过了???
细节很多,看代码吧
#include<bits/stdc++.h>
using std::cout; using std::endl;
#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)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
#define int long long
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7,mod = 1e7+19; const ll llinf = 1e18+7;
namespace xin
{
inline int ksm(int x,int y)
{
register int ret = 1;
while(y)
{
if(y & 1) ret = ret * x % mod;
x = x * x % mod; y >>= 1;
}
return ret;
}
int jc[mod+10];
inline void pre_work(int ms)
{
if(ms > mod) ms = mod;
jc[0] = 1;
try(i,1,ms) jc[i] = jc[i-1] * 1ll * i % mod;
}
inline int C(int n,int m)
{
if(n < m) return 0;
return jc[n] * ksm(jc[m] * jc[n-m] % mod,mod - 2) % mod;
}
int lucas(int n,int m)
{
if(!m) return 1;
return lucas(n/mod,m/mod) * C(n%mod,m%mod) % mod;
}
int n,qnum,base = 1,fang = 1,xu = 0,num,last;
inline short main()
{
io >> n >> qnum;
if(n > mod) {try(i,1,qnum) puts("0"); return 0;}
pre_work(n); last = n;
for(register int i=0;last;++i)
{
register int temp = last - (n / base);register int zhuan = (temp + (last & 1)) / 2;
xu += zhuan * (i / 2);
if(i & 1) (num += zhuan) %= mod; else (fang *= ksm(2,zhuan)) %= mod;
last = n / base; base *= 2;
}
try(que,1,qnum)
{
register int m; io >> m;
if(m - xu < 0 or m - xu > num) puts("0");
else printf("%lld\n",lucas(num,m-xu) * fang % mod);
// sb(num);sb(xu); jb(fang);
}
return 0;
}
}
signed main() {return xin::main();}
粉丝
这个题目要求一个范围的。
我们可以转化为两个大的范围相减。
然后开始数位 \(dp\)
#include<bits/stdc++.h>
using std::cout; using std::endl;
#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)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<' '
#define jb(x) cout<<#x" = "<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
#define int long long
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
int mod,x,y,n;
int f[maxn],g[maxn],s[maxn];
inline int solve(int x)
{
if(x > n) return 0; memset(f,0,sizeof(f)); memset(s,0,sizeof(s)); memset(g,0,sizeof(g));
register int blo = std::max(x,300ll);
f[0] = g[0] = s[0] = 1;
try(i,x,blo-1) try(j,i,n) (f[j] += f[j-i]) %= mod;
try(i,1,n/blo)
{
register int t = i * blo;
try(j,i,n-t) (g[j] += g[j-i]) %= mod;
try(j,0,n-t) (s[j+t] += g[j]) %= mod;
}
int ret = 0;
try(i,0,n) (ret += f[i] * s[n-i] % mod) %= mod;
return ret;
}
inline short main()
{
io >> x >> y >> n >> mod;
printf("%lld\n",(solve(x) - solve(y+1) + mod) % mod);
return 0;
}
}
signed main() {return xin::main();}
字符串
还没过,先鸽了。
[考试总结]noip模拟42的更多相关文章
- 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 ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- [考试反思]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\)选择暴力模拟是有 ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 6.10考试总结(NOIP模拟6)
前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...
随机推荐
- Vue 动态绑定CSS样式
今天在做项目上遇见了一个需求,通过不能的进度类型展示不同的进度形态,进度形态通过背景色和背景色上的文字显示. 效果图: 由于Element UI版本我用的是2.5.4 使用进度条的话 就没有2.9. ...
- 进入mysql的学习>从零开始学JAVA系列
目录 MySQL的学习 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) MYSQL基本指令 DDL ...
- 抄书抄博客毒害社区的Writer几时休?
曾几何时,博客园用户也渐渐分成了两类人:Writer和Coder. 何为Coder?就是认认真真写代码,平时分享工作中的一些问题.好的解决方案,或者写一些实用的原理技术文.答疑解惑的教程技术文. 何为 ...
- Tensorflow2对GPU内存的分配策略
一.问题源起 从以下的异常堆栈可以看到是BLAS程序集初始化失败,可以看到是执行MatMul的时候发生的异常,基本可以断定可能数据集太大导致memory不够用了. 2021-08-10 16:38:0 ...
- JAVA 调用第三方短信平台接口发送短信
做了几个调用三方短信平台发送短信的例子,大部分需要 携带参数,向指定URL发送请求 回顾对接第一个平台时痛苦的乱码经历,这里放一份代码,算是个模版,再用到的时候过来copy一下就OK. 在进入主题之前 ...
- Golang语言系列-18-Gin框架博客项目
代码托管在码云: https://gitee.com/lichengguo/my-blog-golang
- 【死磕 Java 基础】 — 自己动手实现一个 LRU
大家好,我是大明哥,一个专注于[死磕 Java]系列创作的男人 个人网站:https://www.cmsblogs.com/.专注于 Java 优质系列文章分享,提供一站式 Java 学习资料 LRU ...
- cobaltstrike 框架简述
关于cobalt strike,火起来也有好几年了,首先感谢大佬们慷慨相助愿意在网上分享和翻译相关资料,让这么好的渗透测试框架工具被更多人知道 那就来整理一下在使用这个框架的过程中我认为需要了解的小知 ...
- Java Slf4j日志配置输出到文件中
1.概述 新项目需要增加日志需求,所以网上找了下日志配置,需求是将日志保存到指定文件中.网上找了下文章,发现没有特别完整的文章,下面自己整理下. 1.Java日志概述 对于一个应用程序来说日志记录是必 ...
- ApacheDubbo
一.什么是ApacheDubbo Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源 Java RPC 分布式服务框架,它提供了三大核心能力:面向接口的远 ...