【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I
【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的更多相关文章
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 【LGR-(-8)】洛谷入门赛 #5 题解
比赛链接 9道题. 注:题目名称中链接为题目链接,题号中链接为比赛内链接 题目编号 洛谷题号 题目名称 题目难度 A P5713 [深基3.例5]洛谷团队系统 \(\color{red}{入门}\) ...
- war2 洛谷模拟赛day2 t3 状压
(new ) war2 题解:总体数据而言,我们很容易想到着就是DP啊,我们DP数组,用状态压缩,代表有那些点已经被占领过了,代表上一次我占的是那个.对于每一次状态转移,若当前我们要占领的Port ...
- 洛谷 P5594 【XR-4】模拟赛
洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...
- 洛谷 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)\) ...
- 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- 洛谷 P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I(分块+卡常)
洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这 ...
- 洛谷P1650赛马与codevs 2181 田忌赛马
洛谷P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负 ...
- [洛谷2397]yyy loves Maths VI
题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数他还特意 ...
随机推荐
- shell脚本(9)-流程控制for
一.循环介绍 for循环叫做条件循环,或者for i in,可以通过for实现流程控制 二.for语法 1.for语法一:for in for var in value1 value2 ...... ...
- 1. 常用的一些系统性能排查linux命令
目录 一.CPU 1.1 top命令--CPU性能 1.2 负载 -- CPU 任务排队情况 1.3 vmstat -- CPU 繁忙程度 二.内存 2.1 top命令 三.IO 3.1 iostat ...
- Laravel路由匹配
Route常规用法如下,特别是最后一个传参之后可以进行正则匹配,非常好用. //@后面内容为所要访问的方法 Route::get('foo', 'Photos\AdminController@meth ...
- 【Gerrit】操作技巧
多笔提交依赖 1. cherry-pick 同步的多笔代码前后有依赖,如第M笔提交是基于第N笔修改的,直接同步过去会有冲突,所以同步M笔提交时需要基于N笔提交,即写入第N笔commit-id 上述填的 ...
- [转帖]高性能 -Nginx 多进程高并发、低时延、高可靠机制在百万级缓存 (redis、memcache) 代理中间件中的应用
https://xie.infoq.cn/article/2ee961483c66a146709e7e861 关于作者 前滴滴出行技术专家,现任 OPPO 文档数据库 mongodb 负责人,负责 o ...
- Python学习之二:不同数据库相同表是否相同的比较方法
摘要 昨天学习了使用python进行数据库主键异常的查看. 当时想我们有跨数据库的数据同步场景. 对应的我可以对不同数据库的相同表的核心字段进行对比. 这样的话能够极大的提高工作效率. 我之前写过很长 ...
- Redis-rdb-tools与rdr工具学习与使用
Redis-rdb-tools与rdr工具学习与使用 简要说明 rdb工具是python写的一套工具,可以分析dump文件,获取key等信息. rdb其实有一套rdb-profiler工具, 能够导出 ...
- vue过滤器(filter)的使用
过滤器分全局过滤器和局部过滤器 <div id="app"> <p>电脑价格:{{price | addPriceIcon}}</p> < ...
- Linux慢 进程kswapd0与events/0消耗大量CPU的问题 一次网站宕机的处理
今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用.盯了有好十几分钟,主要消耗 CPU 的进程有两 ...
- ABP vNext系列文章10---分布式事务集成netcore.Cap
最近项目中要用到分布式事务功能,调研了DTM和Cap,最终确定用Cap来实现,Cap支持最终一致性,项目中采用MQ作为消息中间件,数据库用的mysql,集成步骤如下: 1.在需要发布消息的服务中引入如 ...