人的记忆本来就是暧昧的,不值得信任。

前言

又是令人头疼的数学部分。。还是太菜了。。

晚上还有一场,当场裂开。

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\) 步,它们无论如何排列的结果都是一样的。

由于向上走一步其实是相同的操作,但是我们按照他们不同来算了,因此需要除去一些的排列,就是:

\[\dfrac{A_{n+m-i-j}^{n+m-i-j}}{A_{n-i}^{n-i}\times A_{m-j}^{m-j}}
\]

算出来就是:

\[\dfrac{(n+m-i-j)!}{(n-i)!\times (m-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)[工业题·卡常题·玄学题]的更多相关文章

  1. HZOI20190906模拟39 工业,卡常,玄学

    题面:https://www.cnblogs.com/Juve/articles/11484209.html 工业: 推一个式子,AC 没有用组合数....推了2个多小时 我sbsbsbsbsbsbs ...

  2. [考试总结]noip模拟13

    因为最近考试频繁,所以咕掉了好长时间... 淦,刚说完又来一场... 先咕了,等以后有时间再写.... 回来了... 首先看到这个题目们,感觉就不存好意... 然后开始开 \(T1\). 只能蒻蒻地按 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  5. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  6. noip模拟12[简单的区间·简单的玄学·简单的填数]

    noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...

  7. Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭

    T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...

  8. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  9. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  10. NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

    工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

随机推荐

  1. 从 RxJS 到 Flink:如何处理数据流?

    简介: 前端开发的本质是什么?响应式编程相对于 MVVM 或者 Redux 有什么优点?响应式编程的思想是否可以应用到后端开发中?本文以一个新闻网站为例,阐述在前端开发中如何使用响应式编程思想:再以计 ...

  2. 阿里云CDN产品经理陈章炜:边缘创新技术和落地实践

    简介: CDN除了加速外,不断被赋予更多价值.在阿里云CDN推出的<极速奔跑吧 2021>首场直播中,阿里云架构师和产品经理不仅对近期阿里云发布的CDN产品最佳实践图进行了详细解读,还对C ...

  3. dotnet OpenXML 解析 PPT 里表格的样式

    在 PPT 里面的表格可以通过表格样式配置决定表格的样式,本文将和大家介绍如何获取和解析表格的样式 本文属于 OpenXML 系列博客,有一定的上下文,详细请参阅 Office 使用 OpenXML ...

  4. WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况

    本文记录将 WPF 控件放入到 UserControl 里,如果此 UserControl 没有被设置 Visibility 为可见过,那么放在此 UserControl 内的控件将获取不到 Hwnd ...

  5. dotnet CBB 为什么决定推送 Tag 才能打包

    通过推送 Tag 才打 NuGet 包的方法的作用不仅仅是让打包方便,让打包这个动作可以完全在本地执行,无需关注其他系统的使用步骤.更重要的是可以强制每个可能被安装的 NuGet 包版本都能有一个和他 ...

  6. 2018-6-30-dotnet-设计规范-·-抽象类

    title author date CreateTime categories dotnet 设计规范 · 抽象类 lindexi 2018-6-30 9:2:38 +0800 2018-06-30 ...

  7. SpringMVC学习五(resultful风格/异常处理/注解)

    resultful风格 异常处理 1.Restfule风格 Restfule风格是一种软件架构风格,而不是标准,只是提供了一种设计原则和约束条件.主要适用于客户端和服务器端交互的软件.是基于http协 ...

  8. idea在商店无法搜索到插件

    背景:我使用的版本是IDEA ultimate 2019.2 版本印象中,最初安装的时候,商店还是可以用的,突然有一天,就无法使用了.下边直入正题: 解决办法:1.首先浏览器登陆下:https://p ...

  9. Git基本操作命令大全

    一.全局配置命令 ## 配置级别: –local(默认,高级优先):只影响本地仓库 –global(中优先级):只影响所有当前用户的git仓库 –system(低优先级):影响到全系统的git仓库 # ...

  10. fastposter v2.18.0 一分钟完成开发海报-云服务来袭

    fastposter v2.18.0 一分钟完成开发海报-云服务来袭 fastposter 是一款快速开发海报的工具,已经服务众多电商.行业海报.分销系统.电商海报.电商主图等海报生成和制作场景. 什 ...