首页 > 其他分享 >2025多校冲刺省选模拟赛7

2025多校冲刺省选模拟赛7

时间:2025-01-23 20:54:18浏览次数:1  
标签:省选 s2 ll 多校 2025 int ans 矩形 s1

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 Isaac
        freopen("card.in","r",stdin);
        freopen("card.out","w",stdout);
    #endif
        ll 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 Isaac
          freopen("sequencel.in","r",stdin);
          freopen("sequencel.out","w",stdout);
      #endif
          int 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 Isaac
        freopen("graph.in","r",stdin);
        freopen("graph.out","w",stdout);
    #endif
        int 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\) 即可通过本题。

标签:省选,s2,ll,多校,2025,int,ans,矩形,s1
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18688605

相关文章

  • 2025牛客寒假算法基础集训营2 ptlks的题解
    A.一起奏响历史之音!题意:判断给定的音节序列是否仅由五声音调组成。思路签到题。代码点击查看代码voidsolve(){ intn,f=1; for(inti=1;i<=7;i++){ cin>>a[i]; if(a[i]==1||a[i]==2||a[i]==3||a[i]==5||a[i]==6){ }else{......
  • 2025dsfz集训Day11:数位DP、状态压缩DP、单调队列优化DP
    Day11:数位DP、状压DP、单调队列优化DP经典题目:AccodersP2195|【一本通提高数位动态规划】AmountofDegrees题意:求出区间\([x,y]\)中满足下面条件的所有的数:这个数\(x\)可以用\(k\)个不相等的\(b\)的整数幂之和。首先这个区间是满足区间减法的。因此我们可以只考虑,\(......
  • 2025dsfz集训Day11: 单调队列优化DP
    单调队列优化DP单调队列队列是单调的,递增或递减只能在队首或者队尾进行操作队列中维护所有在窗口中的元素,有一些元素是没用的,以区间最大值为例:所以从左到右尝试加入队列,弹出队尾比当前数更小的元素,弹出队首已经出窗口的元素,再队尾压入当前数这样,队首就是窗口最大值每......
  • 游记 NOIWC2025
    喜报2025年1月17日至24日,NOI2025冬令营在绍兴龙山书院举办。在本次冬令营中,广东省共105位选手(含2位候选队)参加,产生了1位国家队(刘海峰)、28位铜牌获得者、19位银牌获得者、8位金牌获得者。本次比赛中获奖率达到\(100\text{%}\)的学校有:佛山市南海区石实实......
  • FDUWC2025 游记
    cnblogs链接退役老人人生第一次在网上写游记qwqDay0到达国际大都市上海。这是我第二次来上海玩了,但是感觉fdu那一片和我印象中的上海不一样。上一次来没有注意,这一次来发现上海的车道少且窄,容易堵车,而且绿牌车的占比看起来比广州都高。冬天的树叶子都掉光了,有一种独特的美......
  • 2025年1月有什么好用的便宜性价比高的的语音卡、流量卡推荐?
    之前,因为自己网站变现的问题,找了很多变现渠道,有了解到流量卡这个业务,并花了很长时间研究。最近,因为一些工作的原因,需要打的电话比较多,加上之前有了解过流量卡这一块,所以就在想,有没有语音卡呢?找了一堆,发现都是流量卡产品,可用的语音卡比较少,资费最低都是0.1元/分钟或者接近0.1......
  • 2025最新Python安装教程,PyCharm安装授权教程【附安装包】
    Python安装1、打开Python官网下载安装包:WelcometoPython.org注意:由于官网下载速度较慢,我这边将官网下载的安装包提前打包成了压缩文件,需要的同学可以直接点击这里免下载!2、下载完成后打开安装包: 3、按照下图,先勾选最下方两个配置选项,然后选择上方的自定义安装4、这......
  • 英雄联盟手游2025新春福利活动:欢聚峡谷,共庆佳节
    随着2025年农历新年的临近,英雄联盟手游为广大召唤师们准备了一系列精彩纷呈的新春福利活动,从1月16日起,峡谷将化身欢庆的舞台,海量福利接连而来,让我们一起看看这次活动究竟有哪些亮点吧!除夕团聚,峡谷过年1.活动时间:1月16日至2月2日2.召唤师们需完成游戏内的指定任务并积累团聚......
  • 【PR2025-2017】Adobe Premiere Pro 专业视频编辑软件下载安装
    AdobePremierePro软件简介AdobePremierePro是一款由Adobe公司开发的专业视频编辑软件。它广泛应用于电影、电视和网络视频的制作。其强大的功能和灵活性使得用户能够实现多种复杂的视频编辑任务,包括剪辑、特效制作、色彩校正以及音频处理等。PremierePro支持多种视......
  • 2025春招,Spring 面试题汇总
    大家好,我是V哥。2025年金三银四春招马上进入白热化,兄弟们在即将到来的假期,除了吃喝欢乐过新年,想年后跳槽升职的兄弟也要做好充分的准备,要相信,机会永远只留给有准备的人。以下是一份2025年春招Spring面试题汇总,送给大家,关于Java基础相关的请移步V哥上一篇文章《【长文收藏】2......