这位巨佬的博客还是比我好多了


T1 工业题

考场:

暴力挺香的,不想正解了。

题解:

$f(i,j)$ 只会得到 $f(i-1,j)$ 和 $f(i,j-1)$ 的贡献。每向右一步乘 $a$ ,向下一步乘 $b$ 。左侧竖点有$\binom{n+m-1-i}{m-1}$种走法,上侧横店有$\binom{n+m-1-i}{n-1}$种走法.

预处理阶乘和阶乘逆元以及 $a,b$ 的幂次方即可。

#include<bits/stdc++.h>
using namespace std;
const int N=11000000,mod=998244353;
long long a,b,n,m,inc[N],jc[N],am[N],bm[N],fheng[N],fshu[N],ans;
long long quick_pow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)
{
res=res*x%mod;
}
y>>=1;
x=x*x%mod;
}
return res;
}
long long C(int n,int m)
{
return jc[n]*inc[m]%mod*inc[n-m]%mod;
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&a,&b);
a%=mod;b%=mod;
am[0]=bm[0]=jc[0]=inc[0]=1;
for(int i=1;i<=n+m;i++)
{
jc[i]=jc[i-1]*i%mod;
am[i]=am[i-1]*a%mod;
bm[i]=bm[i-1]*b%mod;
}
inc[n+m]=quick_pow(jc[n+m],mod-2);
for(int i=n+m-1;i>=1;i--)
{
inc[i]=inc[i+1]*(i+1)%mod;
}
for(int i=1;i<=n;i++)
{
scanf("%lld",&fheng[i]);fheng[i]%=mod;
}
for(int i=1;i<=m;i++)
{
scanf("%lld",&fshu[i]);fshu[i]%=mod;
}
for(int i=1;i<=n;i++)
{
ans+=fheng[i]*C(n+m-1-i,m-1)%mod*am[m]%mod*bm[n-i]%mod;
ans%=mod;
}
for(int i=1;i<=m;i++)
{
ans+=fshu[i]*C(n+m-1-i,n-1)%mod*am[m-i]%mod*bm[n]%mod;
ans%=mod;
}
printf("%lld\n",ans);
return 0;
}

T2 卡常题

考场:

灵光乍现,发现如果把y部点删去,只剩下每个y点所连的边,题目所给的图就变成了一棵基环树。

原因:x,y部点都只有 $n$ 个如果把y点变成 $n$ 条边,那么由于题目保证联通且无重边,$n-1$ 的边构成一棵树,剩下的一条边随机连接,构成环。

问题就转化成了,在一棵基环树上,选择一个点的代价为该点所连边的权值和,选择的点可以“看守”所连的边,求所有边被看守的最小代价。

题解:

考场上我按照轮流断掉环中的每一条边,每次跑 $O(n)$ 树形DP来做的,即使看到能被卡成 $O(n^2)$ 的环形数据,依然执迷不悟。

事实上断哪一条边对答案完全没有影响,因为DP所求的和所需的完全没有变。 而且如果随机选一个点作为树根,难以保证断掉的边两侧的点一定选择了之一。

所以钦定其中一个点为根,跑两次DP。

#include<bits/stdc++.h>
using namespace std;
const int N=1100000,M=N<<1;
int n,aa,bb,cnt=1,head[N],circle[N<<1],num,c1,c2,du[N],e,f[2][N][2],ans=0x7fffffff,sam[N];
bool vis[N],used[N];
inline int read()
{
int s=0,w=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
inline int _min(int a,int b)
{
return a<b?a:b;
}
struct bian
{
int nxt,to,w[2];
}b[M];
void add(int from,int to,bool g)
{
du[from]++;du[to]++;
b[++cnt].w[g]=aa;
b[cnt].w[g^1]=bb;
b[cnt].nxt=head[from];
b[cnt].to=to;
head[from]=cnt;
}
void findcir1(int u,int fa)
{
vis[u]=1;
for(int i=head[u],v;i;i=b[i].nxt)
{
v=b[i].to;
if(v==fa) continue;
else if(vis[v])
{
c1=u,c2=v;e=i;
return;
}
else
{
findcir1(v,u);
}
}
}
bool findcir2(int u)
{
bool ok=0;
for(int i=head[u],v;i;i=b[i].nxt)
{
if(used[i])
continue;
v=b[i].to;
circle[++num]=i;
circle[++num]=i^1;
used[i]=used[i^1]=1;
if(du[v]==2)
{
circle[num--]=0;
circle[num--]=0;
continue;
}
if(v==c1)
{
ok=1;return ok;
}
ok=findcir2(v);
if(!ok)
{
circle[num--]=0;
circle[num--]=0;
continue;
}
else
return ok;
}
return ok;
}
void DP(int x,int fa,int o)
{
int sum=0;
f[o][x][0]=0;
f[o][x][1]=sam[x];
for(int i=head[x];i;i=b[i].nxt)
{
if(i==e||(i^1)==e||b[i].to==fa)continue;
DP(b[i].to,x,o);
sum+=min(f[o][b[i].to][0],f[o][b[i].to][1]);
f[o][x][0]+=f[o][b[i].to][1];
}
f[o][x][1]+=sum;
}
int main()
{
n=read();aa=read();bb=read();
for(int i=1,u,v;i<=n;i++)
{
u=read();v=read();
add(u,v,0);
add(v,u,1);
sam[u]+=aa;
sam[v]+=bb;
}
findcir1(1,0);
findcir2(c1);
memset(used,0,sizeof(used));
DP(c1,0,0);
DP(c2,0,1);
printf("%d\n",_min(f[0][c1][1],f[1][c2][1]));
return 0;
}

T3 玄学题

$\begin{align}ans=\sum_{i=1}^{n}(-1)^{\sum_{j=1}^{m}d(i*j)}\\ans=\sum_{i=1}^{n}(-1)^{\sum_{j=1}^{m}d(i*j) \bmod 2}\end{align}$

因为奇+奇=偶,奇+偶=偶,偶+偶=偶,

所以,只有 $d(i*j)$ 为奇数,才对和式整体有贡献。

这时 $i*j$ 为完全平方数,假设i=p*q*q,那么 $j$ 是 $p*r*r$。

对于每一个 $i$,有$\sqrt{\lfloor \frac{m}{p} \rfloor}$ 个j对和式产生了贡献。

(只有能使 $-1$ 的幂增减 $1$ 的才算对和式产生了贡献)

#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
long long s=0,w=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
const int N=11000000;
long long n,m,ans,p[N];
bool flag[N];
int main()
{
n=read();m=read();
scanf("%lld%lld",&n,&m);
for(int i=1;i*i<=n;i++)
{
for(int j=1;j*i*i<=n;j++)
{
p[i*i*j]=j;
}
flag[i*i]=1;
}
int s=sqrt(m);
for(int i=1;i<=n;i++)
{
if(flag[i])
{
if(s&1)
ans--;
else
ans++;
}
else
{
int x=sqrt(m/p[i]);
if(x&1)
ans--;
else ans++;
}
}
printf("%lld\n",ans)
;
return 0;
}

这两场都好拉跨啊QWQ每一次就离正解一步之遥。

20210713考试-2021noip13的更多相关文章

  1. 20210713考试-2021noip14

    T1 队长快跑 #include<bits/stdc++.h> using namespace std; const int N=1e6+5,INF=0x7fffffff; int n,a ...

  2. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  3. 记lrd的高二上学期第五次调研考试

    河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...

  4. 1009: [HNOI2008]GT考试

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...

  5. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风

    (-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...

  6. js封装用户选项传递给Servlet之考试系统二

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  7. js动态生成选项之考试系统(一)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  8. 分享一个LiteDB做的简单考试系统辅助工具

    凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...

  9. CCF考试

    第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...

随机推荐

  1. JAVA,IDEA下的包机制

    IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...

  2. C++ 结构体案例2 升序打印数组中的元素

    1 //结构体案例 2 2 #include<iostream> 3 #include<string> 4 #include<ctime> 5 using name ...

  3. 【LeetCode】155. 最小栈

    155. 最小栈 知识点:栈:单调 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删 ...

  4. Java容器学习——List

    Java容器学习--List 基础知识 数组: ​ 优点:随机存取,可以快速访问元素 ​ 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: ​ 优点: ...

  5. [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)

    [论文阅读] LCC-NLM(局部颜色校正, 非线性mask) 文章: Local color correction using non-linear masking 1. 算法原理 如下图所示为, ...

  6. pikachu 目录遍历 敏感信息泄露

    目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执 ...

  7. python3.9 manage.py runserver 报错问题解决

    报错信息如下 You have 13 unapplied migration(s). Your project may not work properly until you apply the mi ...

  8. SQL 练习32

    查询不及格的课程 SELECT * from Course WHERE CId IN (SELECT cid from sc WHERE score < 60 GROUP BY cid)

  9. linux 系统文件记录

    proc系列 /proc/diskstats # 记录磁盘相关信息 http://ykrocku.github.io/blog/2014/04/11/diskstats/

  10. 踩坑记录之 -- String.IndexOf 在 .Net5 和 .Netcore3 中返回值不一样

    .Net Core3.1 下 运行此段代码 class Program { static void Main(string[] args) { // .NET Core 3.1 string s = ...