【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I

T1 luoguP9502 『MGOI』Simple Round I | A. 魔法数字 \(100pts\)

  • 水题,场切了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define sort stable_sort
    #define endl '\n'
    int main()
    {
    int n,m;
    cin>>n;
    m=log2(n);
    if((1<<m)==n)
    {
    if(m%2==1)
    {
    m--;
    }
    else
    {
    m-=2;
    }
    }
    else
    {
    if(m%2==1)
    {
    m--;
    }
    }
    cout<<m;
    return 0;
    }

T2 luoguP9503 『MGOI』Simple Round I | B. 魔法照相馆 \(100pts\)

  • 水题,赛场上不会位运算,就当成大模拟打了,码风凑合看吧,谨慎观看此代码。

  • 可以将 \(if,else\) 压成位运算。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define sort stable_sort
    #define endl '\n'
    int main()
    {
    ll n,i,ans=0,r=1,b=1,w=1;
    char pd,en='W';
    cin>>n;
    for(i=1;i<=n;i++)
    {
    cin>>pd;
    if(pd!=en)
    {
    if(en=='W')
    {
    if(pd=='B')
    {
    if(b==1)
    {
    ans++;
    }
    else
    {
    ans+=2;
    b=1;
    }
    w=0;
    }
    if(pd=='R')
    {
    if(r==1)
    {
    if(b==1)
    {
    ans+=2;
    b=0;
    }
    else
    {
    ans++;
    }
    }
    else
    {
    if(b==1)
    {
    ans+=3;
    b=0;
    }
    else
    {
    ans+=2;
    }
    }
    w=0;
    r=1;
    }
    }
    if(en=='B')
    {
    if(pd=='R')
    {
    if(r==1)
    {
    ans++;
    }
    else
    {
    ans+=2;
    r=1;
    }
    b=0;
    r=1;
    }
    if(pd=='W')
    {
    ans+=1;
    w=1;
    }
    }
    if(en=='R')
    {
    if(pd=='W')
    {
    ans+=1;
    w=1;
    }
    if(pd=='B')
    {
    ans+=1;
    b=1;
    }
    }
    en=pd;
    }
    }
    cout<<ans;
    return 0;
    }

T3 luoguP9504 『MGOI』Simple Round I | C. 魔法禁林 \(0pts\)

  • 注意 \(0\le w\le 100\) 这个条件,又因为 扣血方式为\(\left\lfloor \frac{w_i}{k} \right\rfloor\) ,所以易知最多跑 \(100\) 条边(因为 \(k>w_i\) 就不扣血了,能够无伤走到终点,直接返回记录答案即可),故魔力值 \(\le 100\) 。
  • 正解:以 \(t\) 为起点, \(s\) 为终点,便于确定 \(k\) 的值,跑单源最短路。
    • 考虑给 \(dijkstra\) 中的 \(dis\) 数组增加一维,令 \(dis[i][j]\) 表示当 \(k=i\) 时,走到 \(j\) 的最小生命值。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define sort stable_sort
    #define endl '\n'
    struct node
    {
    int nxt,to,w;
    }e[90000];
    int head[90000],vis[110][90000],dis[110][90000],cnt=0,ans=0x7f7f7f7f;
    void add(int u,int v,int w)
    {
    cnt++;
    e[cnt].nxt=head[u];
    e[cnt].to=v;
    e[cnt].w=w;
    head[u]=cnt;
    }
    void dijkstra(int s)
    {
    int x,num,i;
    priority_queue<pair<int,pair<int,int> > >q;
    memset(vis,0,sizeof(vis));
    memset(dis,0x3f,sizeof(dis));
    dis[0][s]=0;
    q.push(make_pair(0,make_pair(0,-s)));
    while(q.empty()==0)
    {
    num=-q.top().second.first;
    x=-q.top().second.second;
    q.pop();
    if(num>100)//当走的边数大于100时,直接返回
    {
    ans=min(ans,dis[num][x]);
    }
    else
    {
    if(vis[num][x]==0)
    {
    vis[num][x]=1;
    for(i=head[x];i!=0;i=e[i].nxt)
    {
    if(dis[num+1][e[i].to]>dis[num][x]+e[i].w/(num+1))
    {
    dis[num+1][e[i].to]=dis[num][x]+e[i].w/(num+1);
    q.push(make_pair(-dis[num+1][e[i].to],make_pair(-(num+1),-e[i].to)));
    }
    }
    } }
    }
    }
    int main()
    {
    int n,m,s,t,u,v,w,i;
    cin>>n>>m>>s>>t;
    for(i=1;i<=m;i++)
    {
    cin>>u>>v>>w;
    add(u,v,w);
    add(v,u,w);
    }
    dijkstra(t);
    for(i=0;i<=101;i++)
    {
    ans=min(ans,dis[i][s]);
    }
    cout<<ans<<endl;
    return 0;
    }

T4 luoguP9505 『MGOI』Simple Round I | D. 魔法环 \(0pts\)

  • 因为涉及变量重复问题,题面中的 \(k\) 此处用 \(m\) 代替。
  • 考虑破坏为链,进行 \(DP\) ,枚举以每个点为起点,令 \(f[i][j]\) 表示前 \(i\) 个中激活了 \(j\) 个精灵产生的附魔值的最小值,枚举上一个被激活的精灵 \(k(1\le k <i)\) 进行状态转移,
    • 得到在 \(1\le j \le i\le n,j<m\) 时, \(f[i][j]=min(f[i][j],f[k][j-1]+max(b[k],b[i])×\sum\limits_{h=1}^{i-k-1}h+b[i]^2)\)。
    • 得到在 \(m\le i\le n,j=m\) 时, 因为要满足 至少 激活 \(m\) 个精灵,\(f[i][j]=min(f[i][j],f[k][m]+max(b[k],b[i])×\sum\limits_{h=1}^{i-k-1}h+b[i]^2)\)。
    • 这样的复杂度为 $O(n^3k) $,成功 \(\huge TLE\) 。
  • 有个贪心的结论,激活魔供值为 \(0\) 的精灵一定不劣(因为是否激活 \(0\) 对答案没有影响)。故直接考虑以 \(0\) 为起点,故 \(f[1][1]=0^2=0\) ,接着进行状态转移。时间复杂度 \(O(n^2k)\) ,卡着时限过。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define sort stable_sort
    #define endl '\n'
    ll a[3001],b[3001],f[3001][101];//十年OI一场空,不开long long见祖宗
    int main()
    {
    ll n,m,i,j,k,rt,ans=0x7f7f7f7f;
    cin>>n>>m;
    memset(f,0x3f,sizeof(f));//初始化
    f[1][1]=0;
    for(i=1;i<=n;i++)
    {
    cin>>a[i];
    if(a[i]==0)
    {
    rt=i;
    }
    }
    for(i=1;i<=n;i++)//以0为起点,重新构造
    {
    b[i]=a[(i+rt-2)%n+1];
    }
    for(i=1;i<=n;i++)
    {
    for(j=2;j<=min(i,m);j++)
    {
    for(k=1;k<=i-1;k++)
    {
    f[i][j]=min(f[i][j],f[k][j-1]+(i-k-1)*(i-k)/2*max(b[k],b[i])+b[i]*b[i]);
    if(j==m)
    {
    f[i][j]=min(f[i][j],f[k][j]+(i-k-1)*(i-k)/2*max(b[k],b[i])+b[i]*b[i]);
    }
    }
    }
    }
    for(i=m;i<=n;i++)
    {
    ans=min(ans,f[i][m]+(n-i)*(n-i+1)/2*b[i]);
    }
    cout<<ans<<endl;
    return 0;
    }

总结

看清楚题再交,不要像我一样好几次把 \(T3\) 代码交到了 \(T4\) 。

【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I的更多相关文章

  1. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

  2. 【LGR-(-8)】洛谷入门赛 #5 题解

    比赛链接 9道题. 注:题目名称中链接为题目链接,题号中链接为比赛内链接 题目编号 洛谷题号 题目名称 题目难度 A P5713 [深基3.例5]洛谷团队系统 \(\color{red}{入门}\) ...

  3. war2 洛谷模拟赛day2 t3 状压

    (new )   war2 题解:总体数据而言,我们很容易想到着就是DP啊,我们DP数组,用状态压缩,代表有那些点已经被占领过了,代表上一次我占的是那个.对于每一次状态转移,若当前我们要占领的Port ...

  4. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  5. 洛谷 P5089: CodeForces #500 (Div. 1) B / 1012B : Chemical table

    题目传送门:洛谷P5089. 题意简述: 一张 \(n \times m\) 的表格,有一些格子有标记,另外一些格子没有标记. 如果 \((r_1,c_1),(r_1,c_2),(r_2,c_1)\) ...

  6. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  7. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  8. 洛谷 P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I(分块+卡常)

    洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这 ...

  9. 洛谷P1650赛马与codevs 2181 田忌赛马

    洛谷P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负 ...

  10. [洛谷2397]yyy loves Maths VI

    题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数他还特意 ...

随机推荐

  1. IDEA插件Material Theme UI 激活

    介绍 "Material Theme UI" 是一款为 IntelliJ IDEA 提供现代化材料设计主题的插件,通过重新设计IDE的外观,为开发人员带来更加美观.富有活力的用户体 ...

  2. jQuery组织后续事件 事件冒泡 事件委托 键被按下 批量操作 hover input 事件

    1. jQuery绑定事件的方式 1. $('').click(function(){}) 2. $('').on('click', function(){}) 2. 阻止后续事件执行 1. retu ...

  3. 国庆学go,完成了博客基本功能,迫不及待的发布上线了

    大家好,我是沙漠尽头的狼. 国庆7天,利用带娃之余的空闲时间学习了go,并做了一个不是很完善的博客前台网站. 网站发布地址:https://go.dotnet9.com 源码 边做边上传Github, ...

  4. Laravel - blade 模板继承的使用

    1. 模板文件 <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...

  5. Redis不同版本性能研究

    Redis不同版本性能研究 背景 前期同事遇到了一个大key的慢查询. 前提条件是: 一个 60万key的环境里面. 有一个 260万元素的set类型的key 产品经常会进行 smember key ...

  6. [转帖]Linux内核参数 rp_filter

    https://www.cnblogs.com/chenmh/p/6001977.html 简介 rp_filter (Reverse Path Filtering)参数定义了网卡对接收到的数据包进行 ...

  7. [转帖]Jmeter连接InfluxDB2.0.4

    Jmeter连接InfluxDB2.0.4 问题描述:在用Jmeter+InfluxDB构建监控时,因为docker构建的InfluxDB的版本是2.0.4,按照网上的教程进行后端监听器的填写,但是一 ...

  8. [转帖]JMETER结果分析

    https://www.cnblogs.com/a00ium/p/10462892.html 我相信你同意:有很多方法可以收集和解释JMeter结果,你会感到迷茫. 嗯,看完这篇文章后,您将了解收集和 ...

  9. [转帖]VCSA6.7证书过期后的处置方法

    0x00 环境说明 一台测试的ESXI主机,元旦之后已然发现证书已过期,具体现象:VCenter无法登录,一直提示输入用户名和密码,ESXI主机web页面无法登录.重启VC以后,报故障503错误. / ...

  10. 【转帖】SRE 高延迟问题的罪魁祸首 System.gc()

    https://www.infoq.cn/article/lXTRgYb9ecVBu*72fT7O jstact -gccause pid 3000 30 01 案例一: 某日,支付平台的开发人员找到 ...