大一萌新,第一次打比赛,虽然是线下赛,但送气球的环节还是很赞的!

这里主要是补一下自己的弱项和考试时没有做出来的题目。

1002(链接之后再放,官方还没公开题目...)

先说一下第二题,这个题一看就是个推式子的题目,容易发现,每一种方案的概率都是一样的且都是\(m^n\),即每一次选择技能都会有\(m\)种技能可选。接下来考虑最后对答案的贡献,容易发现,统计贡献时,哪种技能我们并不关心,我们关心的是它出现的次数,并且容易想到将每个技能分开考虑。考虑某个技能(例如技能1对答案的贡献),首先他出现的次数我们要枚举,比如出现了i次,那么在这种情况下,剩下(n-i)个位置,我们不确定,我们只知道了技能1不能再选了,那么技能1在这种情况下的方案数就是\((m-1)^{n-i}\),所以技能1对答案的总的贡献为\(\sum_{i=1}^{n}C^{i}_{n}*(m-1)^{n-i}*i^2\),当然一共有m个技能,我们再将这个值乘以m就是我们最终的答案。

PS:代码只是通过了样例,还没有跑过全部数据,官方还没有公开题目...

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10,P=1e9+7;
int n,m;
ll jc[N],inv_jc[N];
inline ll power(ll x,ll y)
{
ll ans=1;
while(y)
{
if(y&1) ans=ans*x%P;
x=x*x%P;
y>>=1;
}
return ans%P;
} inline void prework()
{
int s=1e5+5;
jc[0]=inv_jc[0]=1;
for(int i=1;i<=s;++i) jc[i]=jc[i-1]*i%P;
inv_jc[s]=power(jc[s],P-2);
for(int i=s-1;i>=1;--i) inv_jc[i]=inv_jc[i+1]*(i+1)%P;
} inline ll C(int n,int m)
{
return jc[n]*inv_jc[m]%P*inv_jc[n-m]%P;
} int main()
{
// freopen("1.in","r",stdin);
prework();
int T;scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
ll ans=0;
for(int i=1;i<=n;++i)
{
ans=(ans+C(n,i)*power(m-1,n-i)%P*i*i%P)%P;
}
ans=ans*m%P;
ans=ans*power(power(m,n),P-2)%P;
printf("%lld\n",ans);
}
return 0;
}

1006

这种题,....,头秃,这也就应验了我们教练的一句话,考试前期千万不要浪,到后期一定要任性起来...这种题其实看到题的时候就想过答案可能会很小,但没敢写,等下一次的区域赛一定要大胆起来!

1007

这个题感觉是有点亏的题了,考试的时候,队友已经知道了做法,可他当时正在推数学式子,他给我讲的时候我也没哟听进去...(我的锅。)于是到最后这个题都没有写...

初看这个题,我是被他的对角线都不同给吓倒的,人还是不能怂啊!

首先可以发现他要求的不同只是主对角线的元素不同,副对角线上的元素不同,并没有说要将主对角线和副对角线上的元素全部不同,所以我们就可以分开考虑主对角线和副对角线。假如说我们预处理出以每个元素为中心的主对角线的最长长度l[i][j]和以该元素为中心的副对角线的最长长度r[i][j],那么以该元素为中心的符合条件的矩阵为\(\lceil\frac{min(l[i][j],r[i][j])}{2}\rceil\).接下来考虑怎么预处理以每个元素为中心的最长的对角线的长度,我们可以单独的将每个对角线拉出来组成一个序列。这样好操作。初始值,每个值都是1,然后将半径r拓展,但有个比较显然的结论就是若i-1的r不为1,则i的半径至少为r-1,我们可以利用这个信息进行快速扩展。总的复杂度应该为O(n^2)的。代码太丑了,勿看!!!

#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=1e6+10;
int cnt[M],n,a[N][N],r1[N][N],r2[N][N];
//分别表示主对角线,副对角线的最长的长度。
inline bool check1(int x,int y,int d)
{
d--;
if(x-d>=1&&y-d>=1&&x+d<=n&&y+d<=n&&!cnt[a[x-d][y-d]]&&!cnt[a[x+d][y+d]]&&a[x-d][y-d]!=a[x+d][y+d]) return true;
return false;
} inline bool check2(int x,int y,int d)
{
d--;
if(x-d>=1&&y+d<=n&&x+d<=n&&y-d>=1&&!cnt[a[x-d][y+d]]&&!cnt[a[x+d][y-d]]&&a[x-d][y+d]!=a[x+d][y-d]) return true;
return false;
} inline solve1(int x,int y)
{
cnt[a[x][y]]++;
x++;y++;
while(x<=n&&y<=n)
{
if(r1[x-1][y-1]==1)
{
cnt[a[x-1][y-1]]--;
cnt[a[x][y]]++;
int d=2;
while(check1(x,y,d))
{
cnt[a[x-d+1][y-d+1]]++;
cnt[a[x+d-1][y+d-1]]++;
d++;
}
r1[x][y]=d-1;
}
else
{
int d=r1[x-1][y-1];
cnt[a[x-r1[x-1][y-1]][y-r1[x-1][y-1]]]--;
cnt[a[x-r1[x-1][y-1]+1][y-r1[x-1][y-1]+1]]--;
while(check1(x,y,d))
{
cnt[a[x-d+1][y-d+1]]++;
cnt[a[x+d-1][y+d-1]]++;
d++;
}
r1[x][y]=d-1;
}
x++;y++;
}
x--;y--;
cnt[a[x][y]]--;
} inline solve2(int x,int y)
{
cnt[a[x][y]]++;
x++;y--;
while(x<=n&&y>=1)
{
if(r2[x-1][y+1]==1)
{
cnt[a[x-1][y+1]]--;
cnt[a[x][y]]++;
int d=2;
while(check2(x,y,d))
{
cnt[a[x-d+1][y+d-1]]++;
cnt[a[x+d-1][y-d+1]]++;
d++;
}
r2[x][y]=d-1;
}
else
{
int d=r2[x-1][y+1];
cnt[a[x-r2[x-1][y+1]][y+r2[x-1][y+1]]]--;
cnt[a[x-r2[x-1][y+1]+1][y+r2[x-1][y+1]-1]]--;
while(check2(x,y,d))
{
cnt[a[x-d+1][y+d-1]]++;
cnt[a[x+d-1][y-d+1]]++;
d++;
}
r2[x][y]=d-1;
}
x++;y--;
}
x--;y++;
cnt[a[x][y]]--;
} int main()
{
// freopen("1.in","r",stdin);
int T;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
scanf("%d",&a[i][j]);
r1[i][j]=r2[i][j]=1;
}
for(int i=1;i<=n;++i)//处理主对角线
{
solve1(i,1);//分别以(i,1)开始的对角线。
solve1(1,i);//分别以(1,i)开始的对角线。
}
for(int i=1;i<=n;++i)//处理副对角线
{
solve2(1,i);//以(1,i)
solve2(i,n);//以(i,m)
}
int ans=0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
r1[i][j]=2*r1[i][j]-1;
r2[i][j]=2*r2[i][j]-1;
ans+=ceil(min(r1[i][j],r2[i][j])/2.0);
}
}
printf("%d\n",ans);
}
return 0;
}

2021CCPC河南省省赛的更多相关文章

  1. 2021CCPC河南省赛(部分代码待更)

    最终A了8道题, 喜提一金, 也是在意料之中. 第一次三个队友集中在一起打比赛, 也体验了一下线下的氛围, 还是比较赞的, 自己也不是说毫无作用, 帮助团队做了几道题, 还是挺满意的. 1002 em ...

  2. 第八届河南省省赛 A.挑战密室

    挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...

  3. 第四届河南省省赛 走迷宫 二分+DFS

    题目思路:使用二分查找路径中最大值和最小值之间的差值,从而确定出一组minn和maxn,对此组的minn和maxn经行DFS,如果可以找到一条路径,其中的最大值,最小值在minn~maxn的范围内,则 ...

  4. ACM 第十一届 河南省省赛A题 计划日

    一.题目描述如下: 二.思路分析 其实这个如果是一个填空题,可以直接用Excel快速计算出来,反而用代码比较麻烦 说一下我的代码的思路: 1.如果N大于本月剩下的天数,就先从N天里减去本月剩下的天数, ...

  5. NYOJ 542 试制品(第五届河南省省赛)

    解法不唯一,但是还是set好理解而且用着爽,代码注释应该够详细了 #include<stdio.h> #include<string.h> #include<math.h ...

  6. NYOJ 1277Decimal integer conversion (第九届河南省省赛)

    XiaoMing likes mathematics, and heis just learning how to convert numbers between different bases , ...

  7. Checkpoints(第十一届河南省省赛真题)

    题目描述 As a landlocked country in central and southern Africa , the political situation has been relat ...

  8. 求XF+闭包(第十一届河南省省赛真题)

    题目描述 如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1 ...

  9. ACM生活总结

    两年ACM生活总结 转眼已经踏入ACM这条不归路已经两年了, 深深的感觉到ACM的不易 和 艰辛,但同时ACM给我所带来的快乐,让我认为值一切都是值得的. 我刚上大学那会,我们学校的ACM刚刚起步不到 ...

随机推荐

  1. 【redis前传】集思广益之quicklist,取其精华去其糟粕

    前言 在之前我们已经学习了redis五大数据结构中的list结构.其内部是linkedList和zipList两种结构.这是我们已经学习的内容.之前我没有结合操作具体查看.事实上在两者中还存在一种结合 ...

  2. Java面向对象系列(9)- 方法重写

    为什么需要重写? 父类的功能,子类不一定需要,或者不一定满足 场景一 重写都是方法的重写,和属性无关 父类的引用指向了子类 用B类新建了A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转 ...

  3. GUI自动化测试遇到的问题

    学习接口自动化测试框架或工具,UI自动化测试框架或工具,有时会觉得知识似乎比较零散,死记硬背不是一个好方法.一个学习的思路是思考使用这些框架或工具的时候,可能会遇到什么问题,遇到这些问题可以通过什么方 ...

  4. centos虚拟机中挂新硬盘

    配置一台centos7,主硬盘20G装系统:副硬盘20G作为数据盘(格式:XFS)挂载到根目录:/vdir/ ,XFS是高性能文件系统. 外层vm硬盘添加好后,执行下面 1.fdisk -l //查看 ...

  5. P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】

    正题 题目链接:https://www.luogu.com.cn/problem/P4451 题目大意 给出\(n\),对于所有满足\(\sum_{i=1}^ma_i=n\)且\(\forall a_ ...

  6. 如何借助 JuiceFS 为 AI 模型训练提速 7 倍

    背景 海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储.管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情.不论是单机训练还是分布式训练 ...

  7. Node.js Koa框架学习笔记

    Koa 基本介绍 Koa是Node.js中非常出名的一款WEB框架,其特点是短小精悍性能强. 它由Express原版人马打造,同时也是Egg框架的设计蓝图,可以说Koa框架的学习性价比是非常高的. 官 ...

  8. HTML基本标记

    头部标记 <head></head> 说明:元素的作用范围是整篇文档.元素中可以有元信息定义.文档样式表定义和脚本等信息,定义在HTML语言头部的内容往往不会在网页上直接显示. ...

  9. Go语言之Goroutine与信道、异常处理

    一.Goroutine Go 协程可以看做成一个轻量级的线程,Go 协程相比于线程的优势: Goroutine 的成本更低大小只有 2 kb 左右,线程有几个兆. Goroutine 会复用线程,比如 ...

  10. 每个男孩的机械梦「GitHub 热点速览 v.21.41」

    作者:HelloGitHub-小鱼干 机械臂可能在医疗剧中看过,可以用来执行一些精细化的操作,例如:缝合之类的.但这次 Dummy-Robot 让你不仅看看而已,还具备一定的实操性(有一定的动手.经济 ...