• 比赛感受

这会刚打完上海icpc,比起区域赛的题,这个简单太多了。

感受还不错,写的很顺手。除了第3题,其他3题都是一发过。

刷题得长期刷。







  • A题 移动

题意:f : y+1 ;  b : y-1 ;   l : x-1 ;  r : x+1



 

一个简单的模拟,若当前操作使机器人移出场地,那么使机器人移回来就好

#include <bits/stdc++.h>
#define int long long
using namespace std;
void ooo(int x){
cout<<x<<'\n';
}
signed main()
{
int n, k;cin>>n>>k;
for(int i=1;i<=k;i++){
int x, y;cin>>x>>y;
string s;cin>>s;
int len=s.size();
for(int j=0;j<len;j++){
if(s[j]=='f')y+=1;
else if(s[j]=='b')y-=1;
else if(s[j]=='l')x-=1;
else x+=1; if(y>n)y--;
if(y<1)y++;
if(x>n)x--;
if(x<1)x++;
}
cout<<x<<' '<<y<<'\n';
}
return 0;
}

  • B题 梦境巡查

这个题不算太难,有点思维,对码力要求不高。

  

它假设当bi为0时求初始时要带的最小补给。

关键在于怎样维护bi=0时,全程中所拥有补给的最小量(为负数表示还需要多少补给)
所以就是一个单点修改,以bi为分界处,维护前半段和后半段最小值,对两段最小值取最小值,为负数则取绝对值,为非负数则为0。


#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmmm=2e5+10;
int a[xmmm], b[xmmm];
int c[xmmm];
int sum[xmmm];
int pmi[xmmm], lmi[xmmm];
int ans[xmmm];
void ooo(int x){
cout<<x<<'\n';
}
signed main()
{
int n;cin>>n;
for(int i=0;i<=n;i++){
cin>>a[i];
c[i*2+1]=0-a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
c[i*2]=b[i];
}
pmi[0]=lmi[2*n+2]=0-1e10;
for(int i=1;i<=2*n+1;i++){
sum[i]=sum[i-1]+c[i];
}
for(int i=1;i<=2*n+1;i++){
if(i==1)pmi[i]=sum[i];
else pmi[i]=min(pmi[i-1], sum[i]);
}
for(int i=2*n+1;i>=1;i--){
if(i==2*n+1)lmi[i]=sum[i];
else lmi[i]=min(lmi[i+1], sum[i]);
}
for(int i=1;i<=n;i++){
int pos=i*2;
int t1=pmi[pos-1];
int t2=lmi[pos]-b[i];
ans[i]=min(t1, t2);
}
for(int i=1;i<=n;i++){
if(ans[i]<0)cout<<0-ans[i]<<' ';
else cout<<0<<' ';
}
return 0;
}
/* 3
5 5 5 5
0 100 0 3
9 4 6 2
9 4 6
*/

  • D题 跳房子

这个题感觉还没有C题难。

这其实是一个很简单的图遍历的问题

建完边还是只有一个前驱的这种,简单版的迪杰斯特拉。

处理出b数组,每个点只入队列一次。

#include <bits/stdc++.h>
//#define int long long
using namespace std;
void ooo(int x){
cout<<x<<'\n';
}
struct p{
int id, num;
};
const int xmmm=2e5+10;
int a[xmmm], b[xmmm], k[xmmm];
int dis[xmmm];
bool vis[xmmm];
signed main()
{
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=i-a[i];
}
for(int i=1;i<=n;i++)cin>>k[i];
int pos=0;
queue<p>q;
//q.clear();
q.push(p{1, 0});
int ans=-1;
while(!q.empty()){
p t=q.front();q.pop();
if(vis[t.id])continue;
vis[t.id]=1;
if(t.id==n){
ans=t.num;break;
}
int x=t.id;
if(x+k[x]<=pos)continue;
if(x+k[x]>=n){
q.push(p{n, t.num+1});
continue;
}
for(int i=max(pos+1, x+1);i<=min(n, x+k[x]);i++){
q.push(p{b[i], t.num+1});
}
pos=max(pos, x+k[x]);
}
cout<<ans<<'\n';
return 0;
}
/* 5
0 1 2 3 0
3 4 4 10 15 10
0 1 1 1 1 3 1 0 3 0
2 4 5 4 1 4 1 3 5 3
*/

  • C题 缓存模拟



一个大模拟按他的要求来就好了,详细的可以看注释

#include <bits/stdc++.h>
#define int long long using namespace std;
const int xxx=3e5;
const int xx=7e4;
int head[xxx],nnum[xxx]; //m组里有多少个
struct p{
int x, y;
};
vector<p>ans;
void ooo(int x){
cout<<x<<'\n';
};
struct node {
int id, num;
bool operator<(const node &a)const {return a.num<num;}
};
priority_queue<node>qq[xx];
unordered_map<int, int>a, vis;//位置//是否修改
signed main()
{ int n, m, q;cin>>n>>m>>q;
for(int i=1;i<=q;i++){
int x, y;cin>>x>>y;
if(a[y]){//判断是否命中
int pos=(y/n)%m;
head[pos]++;
qq[pos].push(node{y, head[pos]});
a[y]=head[pos];
if(x==0)x=x;
else {
vis[y]=1;//判断是否改写
}
}
else {
int pos=(y/n)%m;//位置
if(nnum[pos]==n){//如果已经满了
while(!qq[pos].empty()){
node tt=qq[pos].top();qq[pos].pop();
if(a[tt.id]!=tt.num)continue;
if(vis[tt.id]){
//cout<<"pos"<<tt.id<<' '<<tt.num<<' '<<a[tt.id]<<'\n';
ans.push_back(p{(int)1, tt.id});
vis[tt.id]=0;
}
head[pos]++;
a[y]=head[pos];
if(x)vis[y]=1;
qq[pos].push(node{y, head[pos]});
ans.push_back(p{(int)0, y});
a[tt.id]=0;break;
}
}
else {
head[pos]++;
a[y]=head[pos];
nnum[pos]++;
qq[pos].push(node{y, head[pos]});
if(x)vis[y]=1;
ans.push_back(p{(int)0, y});
}
}
}
int len=ans.size();
for(int i=0;i<len;i++){
cout<<ans[i].x<<' '<<ans[i].y<<'\n';
}
return 0;
}
/* 4 8 8
0 0
0 1
1 2
0 1
1 0
0 32
1 33
0 34 1 1 3
1 0
1 1
0 2
*/

  • 自我总结

这次写题的顺序是1243,再写一点点。

第36次ccf-csp题解(思维)的更多相关文章

  1. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  2. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  3. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  4. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  5. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  6. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  7. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

  8. CCF CSP 201509-2 日期计算

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-2 日期计算 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? ...

  9. CCF CSP 201604-2 俄罗斯方块

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...

  10. CCF CSP 201512-2 消除类游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...

随机推荐

  1. 【墨天轮专访第四期】华为云GaussDB苏光牛:发挥生态优势,培养应用型DBA

    导读: 随着5G互联网时代的来临,各行各业对于数据库的依赖程度也在逐步提高.由于国内在数据库行业的发展起步较晚,数据库的市场份额长期被Oracle,微软等美国公司所控制.但是伴随着国内IT技术栈的不断 ...

  2. Tarjan缩点题单 刷题题解

    Tarjan缩点可以将一个图的每个强连通分量缩成一个点,然后构建新图,该图就会变成一个有向无环图.变成有向无环图之后就能结合最短路,拓扑......解决相应题目 洛谷题单分享: https://www ...

  3. 神经网络之卷积篇:详解残差网络(ResNets)(Residual Networks (ResNets))

    详解残差网络 ResNets是由残差块(Residual block)构建的,首先解释一下什么是残差块. 这是一个两层神经网络,在\(L\)层进行激活,得到\(a^{\left\lbrack l + ...

  4. KubeSphere 在互联网医疗行业的应用实践

    作者:宇轩辞白,运维研发工程师,目前专注于云原生.Kubernetes.容器.Linux.运维自动化等领域. 前言 2020 年我国互联网医疗企业迎来了"爆发元年",越来越多居民在 ...

  5. OpenFunction v0.8.0 发布:通过 Dapr Proxy 加速函数启动

    相较于其他函数计算项目,OpenFunction 有很多独特的功能,其中之一便是通过 Dapr 与各种后端服务(BaaS)无缝集成.目前 OpenFunction 已经支持了 Dapr 的 pub/s ...

  6. synchronized锁的内容

    synchronized锁的内容 import java.util.concurrent.TimeUnit; class Test1 { public static void main(String[ ...

  7. 网页转换为PDF的方法 Python

    前言 近期有些文档是在网站上的,量非常大.加之对于纸质书的喜爱,想把他们整合到一个PDF文档中,然后交由拼多多的老熟人打印店给打一下. 但是这个网站网页转PDF有很多在线网站可以用,不过只能转一个页面 ...

  8. 搞清楚这个老六的真面目!逐层‘剥开’人工智能中的卷积神经网络(CNN)

    第三章:超越基础--图像中的特征检测 上一篇<揭开计算机视觉的神秘面纱,原来机器是这样"看图"的!> 本篇序言:上一篇我们实现并训练了一个神经网络,成功让计算机&quo ...

  9. 利用jupyter进行股票数据分析

    1.需求:股票分析 使用tushare包获取某股票的历史行情数据. 输出该股票所有收盘比开盘上涨3%以上的日期. 输出该股票所有开盘比前日收盘跌幅超过2%的日期. 假如我从2010年1月1日开始,每月 ...

  10. Python 潮流周刊#75:用 Python 开发 NoSQL 数据库(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...