7.13早考试总结(NOIP模拟13)[工业题·卡常题·玄学题]
人的记忆本来就是暧昧的,不值得信任。
前言
又是令人头疼的数学部分。。还是太菜了。。
晚上还有一场,当场裂开。
T1 工业题
解题思路
首先,这个题的暴力还是非常好像的,直接按照题目要求码就好了。
对于正解,主要思路是计算每一个 \(f(i,0)\) 和 \(f(0,i)\) 对于答案的贡献。
其实就像从某个点(假设是 \((i,j)\) )向 \((n,m)\) 走,并且仅能向右向上走。
显然,贡献就是 \(a^{m-j}\times b^{n-i}\times f(i,j)\times 方案数\)。
接下来的问题就是求方案数了,那么一共有 \(n+m-i-j\) 步,它们无论如何排列的结果都是一样的。
由于向上走一步其实是相同的操作,但是我们按照他们不同来算了,因此需要除去一些的排列,就是:
\]
算出来就是:
\]
阶乘以及 a,b 的幂次方都是可以预处理出来的,至于除法直接逆元就好了。
注意,这里有个魔鬼细节:
在 0 行 0 列之间是无法转移下去的,但是 1 行 1 列是可以的,并且差距仅仅是行列数之间的差距,因此只需要一些 +1 和 -1 就好了。
另外,注意一下取 \(\bmod\) 。
code
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=3e5+10,mod=998244353;
int n,m,a,b,ans,jc[N<<1],s1[N],s2[N],af[N],bf[N];
void Jc_Init()
{
jc[0]=af[0]=bf[0]=1;
for(int i=1;i<=m+n;i++)
jc[i]=jc[i-1]*i%mod;
for(int i=1;i<=m;i++)
af[i]=af[i-1]*a%mod;
for(int i=1;i<=n;i++)
bf[i]=bf[i-1]*b%mod;
}
int ksm(int x,int y)
{
int sum=1;
while(y)
{
if(y&1) sum=sum*x%mod;
y>>=1;
x=x*x%mod;
}
return sum;
}
signed main()
{
n=read();
m=read();
a=read()%mod;
b=read()%mod;
for(int i=1;i<=n;i++)
s1[i]=read()%mod;
for(int i=1;i<=m;i++)
s2[i]=read()%mod;
Jc_Init();
for(int i=1;i<=n;i++)
ans=(ans+jc[n+m-i-1]*ksm(jc[m-1],mod-2)%mod*ksm(jc[n-i],mod-2)%mod*bf[n-i]%mod*af[m]%mod*s1[i]%mod)%mod;
for(int i=1;i<=m;i++)
ans=(ans+jc[n+m-i-1]*ksm(jc[m-i],mod-2)%mod*ksm(jc[n-1],mod-2)%mod*af[m-i]%mod*bf[n]%mod*s2[i]%mod)%mod;
printf("%lld",ans);
return 0;
}
T2 卡常题
解题思路
不难发现因为每一个 Y 方点都只有两条边,因此可以将 Y 方点当作边, X 方点当作点。
我们就得到了一个有 n 条边, n 个点的环套树,显然,它比一般的树多了一条边,怎么办呢???
直接拆掉就好了,就是直接拆掉。
又因为每一个 X 方点是可以间隔存在的,剩下的就类似于 没有上司的舞会 这道题了。
在两个断点处进行两边树形 DP 取最小值就好了。
树形 DP 时分别记录一下选与不选这个点的值就好了。
code
#include<bits/stdc++.h>
#define int long long
#define f() cout<<"Fuck"<<endl;
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=1e6+10;
int tot,head[N],ver[N<<1],nxt[N<<1];
int n,vh,vb,bk1,bk2,ans,h[N],b[N],val[N],f[N][2];
bool vis[N];
void add_edge(int x,int y)
{
ver[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void dfs(int x,int fro)
{
if(vis[x])
{
bk1=x;
bk2=fro;
return ;
}
if(bk1||bk2) return ;
vis[x]=true;
for(int i=head[x];i;i=nxt[i])
if(ver[i]!=fro)
dfs(ver[i],x);
}
void solve(int x,int fro)
{
f[x][1]=val[x];
f[x][0]=0;
for(int i=head[x];i;i=nxt[i])
if(ver[i]!=fro&&!(ver[i]==bk1&&x==bk2)&&!(ver[i]==bk2&&x==bk1))
{
int to=ver[i];
solve(to,x);
f[x][1]+=min(f[to][0],f[to][1]);
f[x][0]+=f[to][1];
}
}
signed main()
{
n=read();
vh=read();
vb=read();
for(int i=1;i<=n;i++)
{
h[i]=read();
b[i]=read();
val[h[i]]+=vh;
val[b[i]]+=vb;
add_edge(h[i],b[i]);
add_edge(b[i],h[i]);
}
dfs(1,0);
solve(bk1,bk2);
ans=f[bk1][1];
solve(bk2,bk1);
ans=min(ans,f[bk2][1]);
printf("%lld",ans);
return 0;
}
T3 玄学题
解题思路
-1 的次幂是由 \(d(i\times j)\) 的个数决定的。
-1 的偶数次幂是 1 对于答案是没有影响的,因此我们只用考虑 \(d(i\times j)\) 为奇数的时候。
当且仅当 \(i\times j\) 是完全平方数的时候 \(d(i\times j)\) 的值才是奇数。
原因比较显然:约数就是二个数的积等于这个数;对于非平方数的数每一约数都有一个对应的约数。
接下来把 i 拆成 \(p\times q^2\)( p 没有平方因子)对于 j 一定有 \(p\times r^2\) 的形式。
因此,对于每一个符合条件的 j 就有 r 种取值也就是 \(\sqrt{\dfrac{m}{p}}\) 。
显然的,我们可以通过筛出所有的完全平方数进而求出 p 的值(求的过程类似于欧拉筛筛素数)。
code
#include<bits/stdc++.h>
#define int long long
#define f() cout<<"Fuck"<<endl;
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=1e7+10;
int n,m,ans,cnt,f[N],pri[N];
bool vis[N];
signed main()
{
n=read();
m=read();
vis[1]=true;
pri[++cnt]=1;
for(int i=2;i<=n;i++)
{
if(vis[i]) pri[++cnt]=i;
int temp=i*i;
for(int j=1;j<=cnt&&pri[j]*temp<=n;j++)
vis[pri[j]*temp]=true;
}
for(int i=1;i<=n;i++)
{
if(!vis[i]) continue;
for(int j=1;j*i<=n;j++)
if(!vis[j])
f[j*i]=j;
}
for(int i=1;i<=n;i++)
{
if(!f[i]) f[i]=1;
int temp=sqrt(m/f[i]);
if(temp&1) ans--;
else ans++;
}
printf("%lld",ans);
return 0;
}
7.13早考试总结(NOIP模拟13)[工业题·卡常题·玄学题]的更多相关文章
- HZOI20190906模拟39 工业,卡常,玄学
题面:https://www.cnblogs.com/Juve/articles/11484209.html 工业: 推一个式子,AC 没有用组合数....推了2个多小时 我sbsbsbsbsbsbs ...
- [考试总结]noip模拟13
因为最近考试频繁,所以咕掉了好长时间... 淦,刚说完又来一场... 先咕了,等以后有时间再写.... 回来了... 首先看到这个题目们,感觉就不存好意... 然后开始开 \(T1\). 只能蒻蒻地按 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- noip模拟12[简单的区间·简单的玄学·简单的填数]
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...
- Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭
T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...
- 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模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」
工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...
随机推荐
- 重新点亮linux 命令树————用户和用户组的配置文件[八]
前言 简单整理一下 正文 首先看下vim /etc/passwd 这个东西. 可以看到这些就是我们的用户表. 刚才我们创建的user1就在末尾了. 那么下面有这个x:1001:1001 这个是什么意思 ...
- 简单的UrlDns链分析
URLDNS链学习 首先我们先理解一下序列化与反序列化,我先贴出三段代码,大家可以尝试先体验一下. 首先我们先构造一个Person类,其实跟这条链没什么关系,主要涉及序列化 点击查看代码 // 引入 ...
- FasterViT:英伟达提出分层注意力,构造高吞吐CNN-ViT混合网络 | ICLR 2024
论文设计了新的CNN-ViT混合神经网络FasterViT,重点关注计算机视觉应用的图像吞吐能力.FasterViT结合CNN的局部特征学习的特性和ViT的全局建模特性,引入分层注意力(HAT)方法在 ...
- 力扣614(MySQL)-二级关注者(中等)
题目: 在 facebook 中,表 follow 会有 2 个字段: followee, follower ,分别表示被关注者和关注者. 请写一个 sql 查询语句,对每一个关注者,查询关注他的关注 ...
- 日志服务Dashboard加速
简介: 阿里云日志服务致力于为用户提供统一的可观测性平台,同时支持日志.时序以及Trace数据的查询存储.用户可以基于收集到的各类数据构建统一的监控以及业务大盘,从而及时发现系统异常,感知业务趋势.但 ...
- 所有前端都要看的2D游戏化互动入门基础知识
简介: 在非游戏环境中将游戏的思维和游戏的机制进行整合运用,以引导用户互动和使用 本文作者:淘系前端团队-Eva.js作者-明非 背景 现在越来越多的公司和 App 开始使用游戏化的方式去做产品了,所 ...
- [FAQ] edge debug栏的网络里 没有见到 All Fetch/XHR JS CSS 这些东西
一种方式是 打开调试器的设置,重置默认并刷新即可. 另一种方式是把这个 "筛选" 点掉. Tool:揭开网站所用的技术 Link:https://www.cnblogs.com ...
- 通过WebRTC简单实现媒体共享
通过WebRTC简单实现媒体共享 媒体协商 在设置本地描述符(offer/answer)前,我们总是需要将媒体添加到连接中,只有这样在描述符中才能包含需要共享的媒体信息,除非你不需要共享媒体. 在实际 ...
- dotnet 使用增量源代码生成技术的 Telescope 库导出程序集类型
本文将告诉大家在 dotnet 里面使用免费完全开源的基于增量源代码生成技术的 Telescope 库,进行收集导出项目程序集里面指定类型.可以实现性能极高的指定类型收集,方便多模块对接入自己的业务框 ...
- dotnet 使用 IndentedTextWriter 辅助生成代码时生成带缩进的内容
随着源代码生成的越来越多的应用,自然也遇到了越来越多开发上的坑,例如源代码的缩进是一个绕不过去的问题.如果源代码生成是人类可见的代码,我期望生成的代码最好是比较符合人类编写代码的规范.为了能让人类在阅 ...