【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. shell脚本(9)-流程控制for

    一.循环介绍 for循环叫做条件循环,或者for i in,可以通过for实现流程控制 二.for语法 1.for语法一:for in for var in value1 value2 ...... ...

  2. 1. 常用的一些系统性能排查linux命令

    目录 一.CPU 1.1 top命令--CPU性能 1.2 负载 -- CPU 任务排队情况 1.3 vmstat -- CPU 繁忙程度 二.内存 2.1 top命令 三.IO 3.1 iostat ...

  3. Laravel路由匹配

    Route常规用法如下,特别是最后一个传参之后可以进行正则匹配,非常好用. //@后面内容为所要访问的方法 Route::get('foo', 'Photos\AdminController@meth ...

  4. 【Gerrit】操作技巧

    多笔提交依赖 1. cherry-pick 同步的多笔代码前后有依赖,如第M笔提交是基于第N笔修改的,直接同步过去会有冲突,所以同步M笔提交时需要基于N笔提交,即写入第N笔commit-id 上述填的 ...

  5. [转帖]高性能 -Nginx 多进程高并发、低时延、高可靠机制在百万级缓存 (redis、memcache) 代理中间件中的应用

    https://xie.infoq.cn/article/2ee961483c66a146709e7e861 关于作者 前滴滴出行技术专家,现任 OPPO 文档数据库 mongodb 负责人,负责 o ...

  6. Python学习之二:不同数据库相同表是否相同的比较方法

    摘要 昨天学习了使用python进行数据库主键异常的查看. 当时想我们有跨数据库的数据同步场景. 对应的我可以对不同数据库的相同表的核心字段进行对比. 这样的话能够极大的提高工作效率. 我之前写过很长 ...

  7. Redis-rdb-tools与rdr工具学习与使用

    Redis-rdb-tools与rdr工具学习与使用 简要说明 rdb工具是python写的一套工具,可以分析dump文件,获取key等信息. rdb其实有一套rdb-profiler工具, 能够导出 ...

  8. vue过滤器(filter)的使用

    过滤器分全局过滤器和局部过滤器 <div id="app"> <p>电脑价格:{{price | addPriceIcon}}</p> < ...

  9. Linux慢 进程kswapd0与events/0消耗大量CPU的问题 一次网站宕机的处理

    今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用.盯了有好十几分钟,主要消耗 CPU 的进程有两 ...

  10. ABP vNext系列文章10---分布式事务集成netcore.Cap

    最近项目中要用到分布式事务功能,调研了DTM和Cap,最终确定用Cap来实现,Cap支持最终一致性,项目中采用MQ作为消息中间件,数据库用的mysql,集成步骤如下: 1.在需要发布消息的服务中引入如 ...