2025多校冲刺省选模拟赛7

2025多校冲刺省选模拟赛7

\(T1\) A. 三色卡(card) \(0pts\)

  • 如果存在一个小矩形和大矩形的大小相同,此时另外两个矩形可以任意放,贡献是容易计算的。

  • 否则至少需要一个小矩形覆盖大矩形的两个角,通过交换长、宽钦定完全覆盖行的矩形比完全覆盖列的矩形的数量多。

  • 完全覆盖行的矩形数量为 \(1,2\) 时判掉无解后是容易统计贡献的。

  • 完全覆盖行的矩形数量为 \(3\) 时,直接在两边固定矩形后算另一个矩形可放置的极长区间会算重,不妨直接钦定不能顶到两边的边界,而顶到两边的边界单独提出来计算即可。

    点击查看代码
    const ll p=1000000007;
    ll h[5],w[5],a[5];
    ll solve(ll a,ll b,ll c,ll m)
    {ll flag=(max(w[a],w[b])+w[c]>=m);//顶到两边的边界if(w[a]+w[b]>=m)  return flag+m-w[c]-1;return flag+min(m-w[c],w[a]+1)-max(2ll,m-w[b]-w[c]+1)+1;
    }
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("card.in","r",stdin);freopen("card.out","w",stdout);
    #endifll t,n,m,cnt,s1,s2,sum,minn,ans,i,j;cin>>t;for(j=1;j<=t;j++){cin>>n>>m;cnt=s1=s2=sum=ans=0;  minn=0x7f7f7f7f;for(i=1;i<=3;i++){cin>>h[i]>>w[i];  a[i]=i;cnt+=(h[i]==n&&w[i]==m);s1+=(h[i]==n);  s2+=(w[i]==m);}if(s2>s1){swap(s1,s2);  swap(n,m);for(i=1;i<=3;i++)  swap(h[i],w[i]);}if(cnt==0){if(s1==1){for(i=1;i<=3;i++){if(h[i]==n)  s2=w[i];else{sum+=h[i];minn=min(minn,w[i]);}}ans=(minn+s2>=m&&sum>=n)*4;}if(s1==2){ans=1;for(i=1;i<=3;i++){if(h[i]==n)  sum+=w[i];else  ans=ans*(n-h[i]+1)%p*(m-w[i]+1)%p;}ans=(sum>=m)?2*ans:0;}if(s1==3){for(i=1;i<=3;i++)  sum+=w[i];if(sum>=m){do{ans=(ans+solve(a[1],a[2],a[3],m))%p;}while(next_permutation(a+1,a+1+3));}}}else{ans=1;for(i=1;i<=3;i++)  ans=ans*(n-h[i]+1)%p*(m-w[i]+1)%p;}cout<<ans<<endl;}return 0;
    }
    

\(T2\) B. 三项式(sequence) \(20pts\)

  • 部分分

    • \(20pts\) :爆搜。

      点击查看代码
      const ll p=1000000007;
      int ans=0;
      bool check(ll sum,int m)
      {int s1=0,s2=0;while(sum){s1=(s1+sum%10)%m;s2=(s2+(sum%10)*(sum%10))%m;sum/=10;}return (s1==s2);
      }
      void dfs(int pos,int n,int m,ll sum,int l,int r)
      {if(pos==n+1){if(check(sum,m)==true)  ans=(ans+1)%p;return;}for(int i=l;i<=r;i++)  dfs(pos+1,n,m,sum+i,l,r);
      }
      int main()
      {
      #define Isaac
      #ifdef Isaacfreopen("sequencel.in","r",stdin);freopen("sequencel.out","w",stdout);
      #endifint n,m,l,r,lens,lene,i;cin>>n>>m>>l>>r;dfs(1,n,m,0,l,r);cout<<ans<<endl;return 0;
      }
      
  • 正解

\(T3\) C. 三分图(graph) \(0pts\)

  • 单看限制条件 \(3\) 太误导人了,等价于在限制 \(1\) 成立的条件下不存在两端属于同个部分的边。

  • 考虑扔到 \(DFS\) 树上考虑,从而天然满足第二条限制。

  • 将所有点按照深度的奇偶性划分成两个部分 \(V_{1},V_{2}\) ,然后进行分讨。

    • 若各部分点数均 \(\le 2n\) ,选择符合第一条限制。由树上完美匹配经典结论贪心选择即可。
    • 否则,选择符合第三条限制。具体地,观察到叶子节点构成了独立集且足够多(根据 \( ||V_{1}|-|V_{2}|| \ge n\) 可知),将所有叶子节点扔到 \(V_{3}\) 里即可。
    点击查看代码
    struct node
    {int nxt,to;
    }e[1000010];
    int head[1000010],dep[1000010],vis[1000010],son[1000010],ins[1000010],ans[1000010],num[2],cnt=0,n;
    void add(int u,int v)
    {cnt++;e[cnt].nxt=head[u];e[cnt].to=v;head[u]=cnt;
    }
    void dfs1(int x,int fa)
    {vis[x]=1;dep[x]=dep[fa]+1;num[dep[x]%2]++;ans[x]=dep[x]%2+1;for(int i=head[x];i!=0;i=e[i].nxt){if(vis[e[i].to]==0)  {son[x]++;dfs1(e[i].to,x);}}
    }
    void dfs2(int x)
    {	int flag=0;vis[x]=1;for(int i=head[x];i!=0;i=e[i].nxt){if(vis[e[i].to]==0){dfs2(e[i].to);flag|=ins[e[i].to];}}if(flag==0&&num[dep[x]%2]-1>=n){num[dep[x]%2]--;ans[x]=3;  ins[x]=1;}
    }
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("graph.in","r",stdin);freopen("graph.out","w",stdout);
    #endifint t,m,u,v,i,j;scanf("%d",&t);for(j=1;j<=t;j++){scanf("%d%d",&n,&m);fill(e+1,e+1+cnt,(node){0,0});fill(head+1,head+1+3*n,0);fill(vis+1,vis+1+3*n,0);fill(son+1,son+1+3*n,0);fill(ins+1,ins+1+3*n,0);cnt=num[0]=num[1]=0;for(i=1;i<=m;i++){scanf("%d%d",&u,&v);add(u,v);  add(v,u);}dfs1(1,0);if(max(num[0],num[1])<=2*n){fill(vis+1,vis+1+3*n,0);dfs2(1);}else{for(i=1;i<=3*n;i++)  ans[i]=((son[i]==0)?3:ans[i]);}printf("YES\n");for(i=1;i<=3*n;i++)  printf("%d ",ans[i]);printf("\n");}return 0;
    }
    

总结

  • \(T1\) 分讨完后觉得太难写就直接摆烂去写左偏树了。而且当时对于三个同时覆盖行的情况算重了贡献,如果在场上估计也想不到解决方案。
  • \(T2\) 一开始读假题了,口胡了个 \(O(\dbinom{n+m-1}{m-1})\) 的做法。

后记

  • \(T2\) accoders NOI 和学校 \(OJ\) 的文件 IO 不一样。
  • \(T3\)checker.cpp 的并查集没有初始化导致循环输出 \(1,2,3\) 即可通过本题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重试机制与 CompletableFuture 拓展

重试机制与 CompletableFuture 拓展 禁止转载。 本文旨在讨论重试机制的特点和策略,分析常用重试类库的实现,讨论为 CompletableFuture 添加重试机制的方法。文章首发同名公众号,欢迎关注。 重试示例 以下是一个常见的使用异步重试的例子,当我们需要重试功能时,只需调用 r…

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分,近年来得到了广泛应用。然而,随着光伏电站规模的扩大,光伏组件在运行过程中可能会出现各种故障,如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率,还可能导致更严重的安全隐患。因此,准确、及时地检测并分类这些故…

VMware安装RHEL7.9

VMware安装 可以选择官网下载或者使用其他网盘资源下载。 需要注意的是,现在官网下载需要注册其账号。 下面是安装的详细步骤: 1.找到文件所在路径。双击打开之后,可能会出现环境初始化重启。重启即可。然后再次双击打开此软件。2.勾选《我接受许可协议中的条款》。3.选择安…

【二叉树】用数组给出二叉树层序遍历序列,建树以及遍历问题

传递悄悄话层序遍历数组形式的下标如下#include <algorithm> #include <cstring> #include <iostream>using namespace std;const int N = 1010, M = N * 2;int n; int h[N], e[M], ne[M], idx; int v[N], dist[N]; bool st[N];void add(int a, int b) {e[id…

关闭 Visual Studio 2022 的 Browser Link 功能

http://blog.tool90.com/330.html什么是 Browser Link 功能? Browser Link 是 Visual Studio 的一个功能,它允许 Visual Studio 与正在运行的 ASP.NET 应用程序建立一个实时通信通道。这意味着您可以在不刷新浏览器的情况下立即查看代码更改的效果。这个功能在进行前端开发时…

2025dsfz集训Day11:数位DP、状态压缩DP、单调队列优化DP

Day11:数位DP、状压DP、单调队列优化DP 经典题目:AccodersP2195 |【一本通提高数位动态规划】Amount of Degrees 题意: 求出区间 \([x,y]\) 中满足下面条件的所有的数:这个数 \(x\) 可以用 \(k\) 个不相等的 \(b\) 的整数幂之和。 首先这个区间是满足区间减法的。因此我们可…

PO报错

这个报错是报文结构不匹配导致,找了好久的问题--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------…

2025dsfz集训Day11: 单调队列优化DP

单调队列优化DP 单调队列队列是单调的,递增或递减 只能在队首或者队尾进行操作 队列中维护所有在窗口中的元素,有一些元素是没用的,以区间最大值为例:所以从左到右尝试加入队列,弹出队尾比当前数更小的元素,弹出队首已经出窗口的元素,再队尾压入当前数 这样,队首就是窗口…

必应搜索中,当地区设置为美国时出现的异常(未解决)

描述 在设置中,设置地区。加载时,会警告如下: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.这个大致的意思是,allow-scripts允许运行脚本,allow-same-origin视为和宿主网页同源。 具体的影响不清…

做抖音矩阵是否需要很多台手机?

做抖音矩阵是否需要很多台手机?做抖音矩阵不一定要很多台手机,可依据不同情况选择合适方式: 使用多台手机 优势:物理隔离确保账号间完全独立,极大降低因设备关联导致的风险。比如,若一台手机上的账号因违规操作被封,不会影响其他手机上的账号。同时,多台手机能同时进行…

【Neo4j知识图谱数据库】入门

在当今大数据和人工智能的时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文将带大家从入门到精通,了解知识图谱及其存储工具Neo4j的方方面面,包括知识图谱的介绍、Neo4j的特点、安装步骤、具体的使用方法(创建、查询),以及Cypher查询语言的详细讲…

jumpserve Linux 单机部署

参考文档:https://docs.jumpserver.org/zh/v3/installation/setup_linux_standalone/offline_upgrade/1、环境要求 1.1、操作系统1.2、数据库2、离线安装从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录https://community.fit2cloud.com/#/produ…