首页 > 其他分享 >icpc网络赛2024-1

icpc网络赛2024-1

时间:2024-09-22 18:03:29浏览次数:7  
标签:p1 int sum hrp 网络 st 2024 icpc size

M - Find the Easiest Problem

给定一些提交记录,问哪道题被通过的最多


int T = next();
while(T--)
{
    int n = next();
    set<string> st[30];
    rep(i, 0, n)
    {
        string team, problem, stat;
        cin>>team>>problem>>stat;

        if (stat[0] == 'a') st[problem[0]-'A'].insert(team);
    }

    int maxx = 0, prob;
    rep(i, 0, 26) if (st[i].size() > maxx) maxx = st[i].size(), prob = i;

    cout<<(char)(prob+'A')<<endl;
}

A - World Cup

给定足球比赛的对战规则,求在你的黑幕后国足能达到的最高排名。
开始我还以为像乒乓球有半区,结果被橄榄了


显然从小组赛出线的最弱战力是第30,然后开始手算。手算很ez所以略。


int T = next();
while(T--)
{
    vector<int> v;
    rep(i, 0, 32) v.push_back(next());
    int china = v[0];

    sort(v.begin(), v.end(), greater<int>());
    int pos;
    rep(i, 0, 32) if (v[i] == china) pos = i+1;

    if (pos == 1) cout<<1<<endl;
    else if (pos <= 5) cout<<2<<endl;
    else if (pos <= 19) cout<<4<<endl;
    else if (pos <= 26) cout<<8<<endl;
    else if (pos <= 30) cout<<16<<endl;
    else cout<<32<<endl;
}

F - Make Max

给定一个正整数序列\(A\),可以进行“选择一个子序列\(A_{l...r}\)并把\(A_{l...r}\)中的所有数都替换成\(max\{A_{l...r}\}\)"的操作。求可能的最大操作数。


显然对于一个数\(A_i\),它要被尽可能小的数替换来让操作数尽可能多。于是可以很自然的想到求出一个数左边和右边第一个比它大的数,位置记为\(l_i, r_i\),并用小一点的替换它。如果你是把小车造成火箭的ds爱好者,可以使用平衡树。于是可以使用单调栈求出\(l_i, r_i\)。不难发现对于\(A_i\),\([l_i+1, r_i-1]\)就是它用来进行操作的最大序列。于是对每个位置计数即可。
需要注意的是\(A_{l_i}=A_{r_i}\)的情况需要去重。


int T = next();
while(T--)
{
    int n = next();
    rep(i, 0, n) cin>>w[i], l[i] = 0, r[i] = n-1;

    stack<int> st;
    st.push(0);
    rep(i, 1, n)
    {
        while (st.size() && w[i] > w[st.top()]) st.pop();
        if (st.size()) l[i] = w[i] == w[st.top()] ? i : st.top()+1; // 去重
        st.push(i);
    }

    while(st.size()) st.pop(); // stack没有clear()是认真的??
    st.push(n-1);
    rev(i, n-2, 0)
    {
        while (st.size() && w[i] > w[st.top()]) st.pop();
        if (st.size()) r[i] = st.top()-1;
        st.push(i);
    }

    int ans = 0;
    rep(i, 0, n) ans += r[i]-l[i];
    cout<<ans<<endl;
}

C - Permutation Counting 4

给定\(n\)组限制\(l_i, r_i\),要求满足\(p_i \in [l_i, r_i]\)的排列\(p\)的个数的奇偶性。


把这些限制转化为一个\(n*n\)的矩阵\(A\),其中当\(j \in [l_i, r_i]\)时\(A_{ij}\)为\(1\),否则为\(0\)。
容易发现答案所求\(p\)的排列个数即为\(perm(A)\),即积和式。
又因为积和式与行列式展开计算时仅有符号的不同,所以在\(\mod2\) 意义下\(perm(A)=det(A)\)。
于是问题转化为了求\(mod2\)意义下的\(det(A)\)。容易发现如果满秩时\(A\)一定可以转化为一个单位矩阵\(E\),此时\(det(A)=1\);如果\(A\)不满秩,即存在线性相关的若干行时,\(det(A)=0\)。
于是问题转化为了求\(A\)是否满秩。又观察到每行的\(1\)都是连续的,所以可以转化为图论问题模拟是否存在线性相关的若干行。
需要@Lcyanstars 教我启发式做法/kel


int fa[U];
int find(int e)
{
    if (fa[e] == e) return e;
    return fa[e] = find(fa[e]);
}
void merge(int a, int b)
{
    fa[find(b)] = find(a);
}


int T = next();
while(T--)
{
    int n = next();
    hrp(i, 0, n) fa[i] = i;

    int ans = 1, l, r;
    hrp(i, 1, n)
    {
        cin>>l>>r;
        if (find(l-1) == find(r)) ans = 0;
        else merge(l-1, r);
    }
    cout<<ans<<endl;
}

G - The Median of the Median of the Median

给定一个正整数序列\(a\),记\(b_{l,r}\)是\(a_{l...r}\)的中位数,记\(c_{l,r}\)是\(b_{l...r,l...r}\)的中位数,问\(c\)的中位数。
在该题中,中位数为序列中第\(\lceil m/2 \rceil\)小的数。


对于求中位数,可以二分并把所有数根据是否大于当前数转化为\(1,0(-1)\)。于我而言\(0\)更加直观一点。
首先可以用对顶堆先把\(b\)数组求出来,时间复杂度\(O(n^2\log n)\),不会T。事实上这一步并不必要,可以一起写到check()函数里。
然后写二分框架和check()函数。对于\(b_{i,j}>mid\),新建一个数组\(t\)把它标记为\(1\),否则标记为\(0\),并对\(t\)做一个前缀和\(sum\)。再然后对于每个\(l \leq i \leq j \leq r\),检查它是大于还是小于等于\(b_{i,j}\)的中位数,如果小于等于就累计。最后判断它是大于还是小于等于\(c\)的中位数。


int w[U], m[U][U], t[U][U], sum[U][U];
int n = next();
hrp(i, 1, n) cin>>w[i];

hrp(i, 1, n)
{
    priority_queue<int> p1;
    priority_queue<int, vector<int>, greater<int>> p2;
    p1.push(w[i]);

    hrp(j, i+1, n)
    {
        int median;
        if ((j-i)%2) median = p1.size() > p2.size() ? p1.top() : p2.top();
        else median = p1.top();
        m[i][j-1] = median;

        if (w[j] > median) p2.push(w[j]);
        else p1.push(w[j]);
        
        if (p2.size() == p1.size()+2) p1.push(p2.top()), p2.pop();
        if (p1.size() == p2.size()+2) p2.push(p1.top()), p1.pop();
    }
    if ((n-i+1)%2) m[i][n] = p1.size() > p2.size() ? p1.top() : p2.top();
    else m[i][n] = p1.top();
}

auto check = [=](int val)
{
    hrp(i, 1, n) hrp(j, i, n) t[i][j] = m[i][j] > val;

    hrp(i, 1, n) hrp(j, 1, n) sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+t[i][j];

    int ova = 0;
    hrp(i, 1, n) hrp(j, i, n) ova += sum[j][j]-sum[i-1][j]-sum[j][i-1]+sum[i-1][i-1] >= (j-i+2)*(j-i+1)/2/2+1;

    return ova < n*(n+1)/2/2+1;
};
/*
auto check = [=](int val)
{
    hrp(i, 1, n) hrp(j, i, n) t[i][j] = m[i][j] > val ? 1 : -1;

    hrp(i, 1, n) hrp(j, 1, n) sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+t[i][j];

    int ova = 0;
    hrp(i, 1, n) hrp(j, i, n) ova += sum[j][j]-sum[i-1][j]-sum[j][i-1]+sum[i-1][i-1] > 0 ? 1 : -1;

    return ova <= 0;
};
*/

sort(w+1, w+n+1);
int l = 1, r = n;
while(l <= r)
{
    int mid = l+r>>1;
    if (check(w[mid])) r = mid-1;
    else l = mid+1;
}

cout<<w[l]<<endl;

标签:p1,int,sum,hrp,网络,st,2024,icpc,size
From: https://www.cnblogs.com/Loxilante/p/18425604/EConline24-1

相关文章

  • Abaqus 2024百度云下载:附中文安装包+教程
    正如大家所熟知的,Abaqus是一款有限元分析软件,能够高效的配合工程师完成创作。它可以高精度地实现包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料的工程仿真计算。“Abaqus”不仅具有出色的仿真计算能力,由于其基于Python开......
  • 图卷积网络(GCN)与图注意力网络(GAT)基础实现及其应用
    创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!图卷积网络(GraphConvolutionalNetworks,GCN)是一种能够直接在图结构数据上进行操作的神经网络模型。它能够处理不规则的数据结构,捕获节点之间的依赖关系,广泛应用于社交网络分析、推荐系统、图像识别、化学分......
  • 药物分子生成算法综述:从生成对抗网络到变换器模型的多样化选择
    创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!基于已有的药物数据生成新的药物分子是一项复杂的任务,通常涉及到生成模型和机器学习算法。以下是一些常用的算法和方法:1.生成对抗网络(GANs)特点:由生成器和判别器两个神经网络组成,生成器生成新分子,判别......
  • 【游记】CSP-S2024游记
    CSP-S2024游记展开目录目录CSP-S2024游记初赛9.21上午9.21下午初赛9.21上午关于为什么从比赛当天开始,原因是我记性太差全忘了。早上起来水了会谷,吃完饭出发。同车@Vsinger_洛天依和@JustinXaviel.我和洛天依都不考钩组,所以把JustinXaviel送到地方之后我就拐着......
  • CSP2024-24
    2A题意:给定长度为\(n\)的非负整数数组\(a\),求最小的\(r−l+1\)满足\(l≤r,\sum_{i=l}^ra_i\)是合数。考虑全是正数的情况,答案一定\(\le4\),考虑一下每个数的奇偶性即可。那么就把所有正数及其位置存下来,使得\(b_i=a_{p_i}\),暴力检查\(b\)中长度为2/3的段,和\(......
  • 2024如何利用AI建模
    1、SD生成三/四视图 使用模型awpainting_v1.2.safetensors 描述词((multipleviewsofthesamecharaceterwiththesameclothes,charactersheet,turnaround,referencesheet,whitebackground,simplebackground,characterconcept,fullbody)).approximately80kilo......
  • 计算机网络(月考一知识点)
    文章目录计算机网络背诵默写版计算机网络知识点(月考1版)计算机网络背诵默写版为我自己留个印记,本来荧光笔画的是没记住的,但是后面用紫色的,结果扫描的时候就看不见了。计算机网络知识点(月考1版)......
  • 神经网络:激活函数选择
        结论直接看——激活函数的选择方式        神经网络主体分为输入层、隐藏层和输出层三个模块。一般情况下,输入层只负责对数据的输入,并不做任何的变换。故而,激活函数的选择只涉及隐藏层和输出层两个模块。     神经网络主体图激......
  • Cloudflare WARP+ 又能用了!2024年9月22日,新增MASQUE协议
    1.Windows用户1.1WARP+官网下载客户端WARP+官网:进入WARP+官网,下载对应客户端。 双击运行,完成安装。1.2新建mdm.xml文件在C:\ProgramData\Cloudflare目录下,新建文本文件:mdm.xml,复制以下内容进去,并保存<dict><key>warp_tunnel_protocol</key><string>masque......
  • 网络安全在2024好入行吗?
      前言024年的今天,慎重进入网安行业吧,目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多,还有很多高中被挖过来的大佬。理由很简单,目前来说,信息安全的圈子人少,985、211院校很多都才建立这个专业,加上信息安全法的存在,形成了小圈子的排他效应,大佬们的技术交流都......