2021ICPC网络赛(第二场)

本文探讨了编程竞赛中如何构建满足特定条件的集合策略,并提供了C++代码实现。同时,介绍了数值计算的处理方法,包括从低位到高位的逐位相加减,以及进位的分类讨论。这两部分内容结合,展示了在编程竞赛和算法实现中的问题解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021ICPC网络赛(第二场)

H.

分析:
  • 两个条件:

    • 任意 rrr 个的并集 >=128>=128>=128
    • 每一个构造的集合长度 <=∣512r∣<=|\frac{512}{r}|<=r512(向上取整)
  • 构造方法:将 256256256 拆分成 kkk 段,d=256/kd=256/kd=256/k

    ddd 段长度设置起点 ststst ,在接下来的长度 lenlenlen111 去覆盖

  • 大坑点256%k256\%k256%k 的多余的部分不能全部留给最后一段,要均分(每段最多分到 111 ),所以 ststst 还要判断一下

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main()
{
    int k,r;
    cin>>k>>r;
    int len=ceil(512/r), d=256/k;
    /*if(2*(r-1)*k+4*r<k*r)
    {
        cout<<"-1"<<endl; return 0;
    }*/ // 赛后跟队友讨论了一下,发现不存在“-1”的情况
    int st=0, yu=256%k;
    for(int i=1;i<=k;i++)
    {
        int t=len;
        //if(yu) t++; 均不均分跟len没有关系
        for(int j=1;j<=256;j++)
        {
            if((j>st || 256-st+j<=len) && t)
            {
                cout<<"1"; t--;
            }
            else cout<<"0";
        }
        cout<<endl;
        st+=d;
        if(yu) { st++; yu--; }
    }
    return 0;
}

M.

分析:
  • 从最低位到高位,依次相加减,分类讨论进位的多种情况
#include <bits/stdc++.h>
using namespace std;

const int N=1005;
int p[N], a[N], b[N], c[N];
signed main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>p[i];
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    int fp=0; // 表示进位
    for(int i=1;i<=n;i++)
    {
        fp*=p[i]; // 进位加到当前位,同号相加,不变,异号相减
        int t=a[i]+b[i]+fp;
        if(t==0 || t==1) { c[i]=t; fp=0; }
        else if(t==-1) { c[i]=1; fp=-1; }
        else if(t==2) { c[i]=0; fp=1; }
        else if(t==3) { c[i]=1; fp=1; }
        fp*=p[i]; // 当前位进到下一位,若当前的 sgn 是 -1 那进到下一位还要取反
    }
    for(int i=1;i<n;i++) cout<<c[i]<<' ';
    cout<<c[n]<<endl;
    return 0;
}
### 关于2024 ICPC网络预选的信息 #### 参规则 国际大学生程序设计竞ICPC)作为一项全球性的事,其参规则通常保持一定的稳定性。根据以往的经验和惯例[^1],每支参队伍由三名队员组成,他们需在同一台计算机上合作完成一系列算法问题的解答。比期间不允许使用任何外部资源或工具书,仅能依赖团队成员的知识储备以及现场提供的少量参考资料。 对于具体的2024年ICPC网络预选而言,虽然官方尚未发布详细的最新规定,但可以推测基本框架不会发生显著变化。例如,在线形式可能继续沿用近年来因疫情而普及的方式;同时也会严格监控作弊行为以维护公平竞争环境[^2]。 #### 时间安排 关于2024年的具体时间表目前还没有确切消息公布出来。然而按照传统模式来看,整个流程一般会经历以下几个阶段: - **报名期**:预计会在年初开放注册通道供各高校提交候选名单。 - **区域选拔/网络挑战**:这通常是多轮次举行,覆盖不同大洲和地区的时间段以便更多选手参与进来体验实战氛围并争取晋级机会。 - **全球总决准备阶段**:成功突围进入最终环节者将获得额外培训指导来提升实力迎接巅峰对决时刻。 以下是基于历史数据猜测的一个大致日程示例(请注意实际日期应参照官方通知为准): | 阶段 | 开始日期 | 结束日期 | |--------------------|---------------|----------------| | 报名截止 | 2024-02-15 | | | 初步筛选结果公告 | | 2024-03-01 | | 第一轮网络资格 | 2024-03-10 | 2024-03-12 | | 复活 | 2024-04-07 | 2024-04-09 | | 半决分区 | 各区自行决定 | 各区自行决定 | #### 题目解析 由于正式试题还未出炉之前无法提供针对性分析,不过可以根据往届经典案例来进行一些通用技巧分享: ```python def example_problem(): """ 假设有一道简单的字符串匹配问题. 给定两个长度不超过1e6 的字符串S 和T(S >= T),判断是否存在子串使得两者完全一致. 如果存在返回True;否则False. """ from collections import defaultdict def kmp_preprocess(pattern): lps = [0]*len(pattern) j=0;i=1; while i<len(pattern): if pattern[i]==pattern[j]: lps[i]=j+1;j+=1;i+=1; elif j!=0: j=lps[j-1]; else : lps[i]=0;i+=1 return lps; s="abcde";t="bcd"; lps=kmp_preprocess(t); q=[]; res=False; for char in s: while(q and (not t[len(q)]==char)): last=len(q)-lps[-1];q=q[:last]; if not q or t[len(q)]==char:q.append(char); if ''.join(q)==t:res=True;break; print(res) example_problem() ``` 上述代码片段展示了一个利用KMP算法解决字符串查找的经典方法之一。当然这只是众多可能性中的很小一部分而已。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yezzz.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值