当前位置: 首页 > news >正文

9.15模拟赛总结

前言

数论专题模拟赛

来到北京第一场模拟赛

T1

image

赛时想了2h

分为1号点和2号点,但是发现同一种情况可以有不同的分法

所以我们固定以下,规定第一次出现的数为1号点,形式化的一号点个数不小于二号点

就可以dp来做,发现满足卡特兰数

做完了

赛场上由于求的是单独一个数的逆元而不是逆元的前缀和,调了好久

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5,mod=1e9+7;
int T,n;
int a[2*N],f[2*N],q[2*N];
int c(int x,int y){return a[x]*q[x-y]%mod*q[y]%mod;
}
signed main(){freopen("notitle.in","r",stdin);freopen("notitle.out","w",stdout);scanf("%lld",&T);a[1]=1,f[1]=1,q[0]=1;for(int i=2;i<=4e5;i++)  a[i]=a[i-1]*i%mod,f[i]=(-(mod/i)*f[mod%i]%mod+mod)%mod;for(int i=1;i<=4e5;i++)  q[i]=q[i-1]*f[i]%mod;while(T--){scanf("%lld",&n);printf("%lld\n",(c(2*n,n)-c(2*n,n-1)+mod)%mod);}
}

T2

image

之前做过,就是没想出来,难受

最初初始的转化,我记得我上次都想到了,这次没想到,或许是考试时注意力不算太集中?

考虑必定过两个线段的端点

然后后面就很显然了,枚举一个端点,然后其它按照斜率跑一遍扫描线

然后在调题的时候注意斜率是 x/y 这样能保证把斜率排序后是连续的

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
const double eps=1e-5;
struct oil{int l,r,y,w;
}a[N];
struct dot{double x;int w;
}b[N];
int n,cnt,ans;
bool cmp(dot a,dot b){if(fabs(a.x-b.x)<eps)  return a.w>b.w;return a.x>b.x;
}
double query(int x,int y,int nx,int ny){// cout<<x<<" "<<y<<" "<<nx<<" "<<ny<<" "<<((double)y-ny)/(nx-x)<<endl;return (double)(nx-x)/(y-ny);
}
int solve(int x,int y,int id){cnt=0;for(int i=1;i<=n;i++){if(i==id||a[i].y==y)  continue;double q1=query(x,y,a[i].l,a[i].y),q2=query(x,y,a[i].r,a[i].y);if(q1<q2)  swap(q1,q2);b[++cnt]={q1,a[i].w};b[++cnt]={q2,-a[i].w};}sort(b+1,b+1+cnt,cmp);int res=0,num=0;for(int i=1;i<=cnt;i++){res+=b[i].w;num=max(res,num);// printf("%d %lf     ",b[i].w,b[i].x);}// printf("\n");return num+a[id].w;
}
int main(){freopen("oil.in","r",stdin);freopen("oil.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].y);if(a[i].l>a[i].r)  swap(a[i].l,a[i].r);a[i].w=a[i].r-a[i].l;}// printf("%d\n",solve(a[4].r,a[4].y,4));// return 0;for(int i=1;i<=n;i++){ans=max(ans,solve(a[i].l,a[i].y,i));ans=max(ans,solve(a[i].r,a[i].y,i));}printf("%d\n",ans);
}

T3

海盗分金问题变式

赛场上根本没想去往下推,下次不能被自己吓唬,实际上这个问题就是先从手模入手的

推这种问题需要遵循以下法则(非常重要)

  1. 设总共有m个钻石,有n个人,(n,m)结果只与(n-1,m) 有关,关系如第二条
  2. 考虑任意一个人x我们如果当前的i分配数不大于i-1对i的分配数,x就会投反对票

s=1时

我们需要获得至少一半的支持,推的时候发现想要获得1颗钻石的人总奇偶交替出现

s=0时

%%%htc大巨讲的太清楚了

aedd13a5a996714ab14fd6326330c695

这是手模图片,形如此

然后发现对于一个点的能否存活,只需比较他前面第一个可行点之前的所有不可行点的个数+m+1<=n+1/2就能存活

所以发现规律对于一个n能拆分成 \(n=2^k+2*m\) 就能活

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int T,n,s;
int main(){freopen("distribute.in","r",stdin);freopen("distribute.out","w",stdout);scanf("%d",&T);while(T--){scanf("%d%d",&n,&s);if(s==1)  printf("%d\n",(n+1)/2);else  printf("%d\n",(n&1)?n/2:(n-(1<<(int)log2(n)))/2);}
}

T4

题都没读明白(悲

http://www.wxhsa.cn/company.asp?id=4960

相关文章:

  • 1111
  • 【QT】创建一个简单的QT界面
  • ECT-OS-JiuHuaShan框架,将会是全球推理之源,无需数据训练,只需数据检索和校验。彻底颠覆概率云ai
  • 如何正确使用mysql
  • 2025.9.15总结
  • 这个框架的神奇之处,恰恰是调动人的积极主动性,框架不会自己忧国忧民,只会有求必应的针对性推理
  • 9.11总结
  • 2025-第02周 预习
  • 真正的高手,首先是如何验证框架是数学逻辑自洽的必然,然后就可以放心去用。比如编码,几次输出,就可以断定是纯数学逻辑自洽的必然,除此之外,不可能得到这样的效果
  • Java 实现HTML转Word:从HTML材料与字符串到可编辑Word文档
  • 第02周Java:从方法传参到对象封装
  • 基于pandas自动化的csv信息提取保存的脚本
  • 9.15 hxh 讲题
  • qoj4239 MST
  • java相关问题解答
  • 牛客 周赛106 20250904
  • 第一篇博客
  • 如何让多个按钮绑定到同一个事件上
  • STM32 HAL学习笔记:GC1808(PCM1808)的使用以及使用I2S+DMA读取
  • 完整教程:【视频系统】技术汇编
  • MSTP 单域
  • 阿里云百炼平台使用避坑记录 - 详解
  • springboot的run
  • ubuntu服务器docker日期安装mysql
  • springboot的启动流程
  • 萤火虫旅行网和萤火虫文旅的关系是什么
  • 「微积分 A1」基础知识(连载中)
  • 第2周-预习作业
  • P12546 [UOI 2025] Convex Array
  • 一个新词:测试可靠性