比赛链接

·A题

题目描述

给定一个整数\(x\),请你找到严格大于\(x\)且各位数字均不相同的最小整数\(y\)。

\(1000 \le x \le 9000\)

做法分析

发现数据范围很小,那么我们可以直接从\(x+1\)进行枚举,同时使用一个 check 函数检查是否满足条件。

代码

#include <bits/stdc++.h>
using namespace std; int x; bool check(int a)
{
int num[10];//0-9每一个数字是否出现过
for(int i = 0; i < 10; i++)
num[i] = 0;//初始化全部没出现过
while(a > 0)
{
if(num[a % 10])
return 0;//个位数出现过,返回不成立
num[a % 10]++;
a /= 10;//往后缩一位
}
return 1;//坚持到了最后,说明符合条件
} int main()
{
scanf("%d", &x);
for(int i = x + 1; ; i++)
{
if(check(i))//如果符合
{
printf("%d", i);
return 0;//输出并返回
}
} return 0;
}

·B题

题目描述

给定一个平面。

平面中有 n 条与 x 轴平行的有向边,从上到下依次编号为 1 ~ n ,每条边都无限长,且两两不重合。

平面中有 m 条与 y 轴平行的有向边,从左到右依次编号为 1 ∼ m ,每条边都无限长,且两两不重合。

这些边一共有 n × m 个交点。

给定每条边的具体方向,请你判断这 n × m 个交点是否满足:从任意交点出发可以到达任意其它交点。

\(2 \le n,m \le 20\)

做法分析

首先先对样例1进行一个图的画,我们得到下图:

发现一点,其实最终我们需要的就只有围成的一个矩形。

先进行矩形的四个角的讨论,也就是先讲问题简化成只有两条竖线两条横线的情况。只有两种情况能够满足:四条线围成的矩形顺时针或逆时针连通,也就是下图两种情况:

所以我们得到了答案成立的初步条件,即上面的两种情况。

然后发现这两种情况与答案满足是等价的:因为对于任意一个点,我们可以先沿着所在边的方向,到达最外圈,然后就可以通过这一圈到大任意一条边的入口,从而到达任意一点。

代码

#include <bits/stdc++.h>
#define MAXn 50
using namespace std; int n, m;
char a[MAXn], b[MAXn]; int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i <= m; i++)
cin >> b[i]; if(a[1] == '>' && a[n] == '<' && b[1] == '^' && b[m] == 'v')//顺时针
{
printf("YES\n");
return 0;
}
if(a[1] == '<' && a[n] == '>' && b[1] == 'v' && b[m] == '^')//逆时针
{
printf("YES\n");
return 0;
}
printf("NO\n");//都不符合输出NO return 0;
}

·C题

题目描述

金明有 n 天假期,编号 1 ∼ n。

整个假期期间,他每天只可能有三种选择:

去健身房健身一整天。(前提是当天健身房开放)
去图书馆看书一整天。(前提是当天图书馆开放)
在家休息一整天。

用一个长度为 n 的整数数组 a1,a2,…,an 来表示这 n 天健身房与图书馆的开放情况,其中:

\(a_i\) 等于 0 表示第 i 天健身房关闭且图书馆关闭。

\(a_i\) 等于 1 表示第 i 天健身房关闭但图书馆开放。

\(a_i\) 等于 2 表示第 i 天健身房开放但图书馆关闭。

\(a_i\) 等于 3 表示第 i 天健身房开放且图书馆开放。

金明希望自己用来休息的天数尽可能少,但是,他一定不会连续两天(或更多天)去健身房健身,也一定不会连续两天(或更多天)去图书馆看书。

请你计算,金明用来休息的最少可能天数。

\(1 \le n \le 100,0 \le a_i \le 3\)

题目分析

一眼的状态机DP。

f[i][j]表示第 i 天状态是 j 时(0 -- 休息,1 -- 去图书馆, 2 -- 去健身房),前 i 天出去的天数。

当第 i 天在家休息时,f[i][0]继承前一天的最大值即max(f[i - 1][0], f[i - 1][1], f[i - 1][2])

当第 i 天去图书馆时,f[i][1]是前一天在家休息或去健身和钱两天去图书馆中的最大值再加 1 ,因为这一天出去了,即max(f[i - 1][0], f[i - 2][1], f[i - 1][2])

当第 i 天去健身房时于去图书馆同理即max(f[i - 1][0], f[i - 1][1], f[i - 2][2])

这里有一个问题,如果上一天图书馆或健身房不开,这一天的这个状态怎么办呢,我们不用管他,因为没有开放的话就不用更新答案,在下一次使用时就为 0 ,不影响结果

代码

#include <bits/stdc++.h>
using namespace std; int n;
int a[100], f[100][3];//在家,图书馆,健身房 int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d\n", &a[i]);
for(int i = 1; i <= n; i++)
{
f[i][0] = max(max(f[i - 1][0], f[i - 1][1]), f[i - 1][2]);
if(a[i] == 1) f[i][1] = max(max(f[i - 1][0], f[i - 2][1]), f[i - 1][2]) + 1;
if(a[i] == 2) f[i][2] = max(max(f[i - 1][0], f[i - 2][2]), f[i - 1][1]) + 1;
if(a[i] == 3)
{
f[i][1] = max(max(f[i - 1][0], f[i - 2][1]), f[i - 1][2]) + 1;
f[i][2] = max(max(f[i - 1][0], f[i - 2][2]), f[i - 1][1]) + 1;
}
} printf("%d", n - max(max(f[n][0], f[n][1]), f[n][2])); return 0;
}

Acwing 周赛88 题解的更多相关文章

  1. AcWing周赛43

    AcWing周赛43 题源:https://www.acwing.com/activity/content/1233/ 4314. 三元组 直接暴力做就是了,我一开始还在找规律..悲 我滴代码 #in ...

  2. Leetcode 周赛#202 题解

    本周的周赛题目质量不是很高,因此只给出最后两题题解(懒). 1552 两球之间的磁力 #二分答案 题目链接 题意 有n个空篮子,第i个篮子位置为position[i],现希望将m个球放到这些空篮子,使 ...

  3. AcWing周赛44

    周赛44 4317. 不同正整数的个数 link:https://www.acwing.com/problem/content/4320/ 我直接set #include <iostream&g ...

  4. LeetCode(88)题解-- Merge Sorted Array

    https://leetcode.com/problems/merge-sorted-array/ 题目: Given two sorted integer arrays nums1 and nums ...

  5. [NowCoder]牛客OI周赛1 题解

    A.分组 首先,认识的人不超过3个,因此不存在无解的方案 考虑直接构造,先把所有点设为1,顺序扫一遍把有问题的点加入队列 每次取队头,将其颜色取反,再更新有问题的点 复杂度:考虑到每个点不会操作2次, ...

  6. FJUT2019暑假周赛一题解

    A.排队问题*-* 题意就是有长度为L的序列,每位的取值可以是'f'或者'm',问不包含'fff'和'fmf'的个数. 打表找规律 不难找出递推公式为F[n] = F[n-1] + F[n-3] + ...

  7. Acwing P283 多边形 题解

    Analysis 总体来说是一个区间DP 此题首先是一个环,要你进行删边操作,剩下的在经过运算得到一个最大值 注意事项: 1.删去一条边,剩下的构成一条线,相当于求此的最大值,经典区间DP该有的样子: ...

  8. Acwing P284 金字塔 题解

    Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ ...

  9. Acwing P277 饼干 题解

    每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考 ...

  10. AcWing P379 捉迷藏 题解

    Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream ...

随机推荐

  1. 如何通过C#/VB.NET代码将PowerPoint转换为HTML

    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强.但难免在某些情况下我们会需要将PowerPoint转换为HTML格式.因为HTML文档能独立于各种操作系统平台(如Un ...

  2. (亲自实践)解决安装weditor报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 825

    升级weditor时,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 825: illegal multib ...

  3. 查找命令 (which 、 find )----grep 、 wc 和管道符,echo ,反引号 `

    which命令 通过which命令,查看所使用的一系列命令的程序文件存放在哪里 find命令 按文件大小查找文件 语法:find  起始路径  -size  [(+,-)k,m,g  ] •+.-表示 ...

  4. 2020-10-07:redis存在线程安全的问题吗?为什么?

    福哥答案2020-10-07:#福大大架构师每日一题# Redis6.0的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行.所以我们不需要去考虑控制 key.lua.事务, ...

  5. 2022-03-29:整个二维平面算是一张地图,给定[x,y],表示你站在x行y列, 你可以选择面朝的任何方向, 给定一个正数值angle,表示你视野的角度为, 这个角度内你可以看无穷远,这个角度外你

    2022-03-29:整个二维平面算是一张地图,给定[x,y],表示你站在x行y列, 你可以选择面朝的任何方向, 给定一个正数值angle,表示你视野的角度为, 这个角度内你可以看无穷远,这个角度外你 ...

  6. python如何利用算法解决业务上的【分单问题】

    分单是很多企业日常工作中非常典型的一项内容,它非常复杂,但同时又极为重要,如何合理的分单是企业管理中一个很重要的课题. 之所以说分单很复杂,是因为影响单据该分给谁,分多少量这个事儿本身就有太多的影响因 ...

  7. harbor改造为https---血泪史

  8. [MAUI]模仿Chrome下拉标签页的交互实现

    @ 目录 创建粘滞效果的圆控件 贝塞尔曲线绘制圆 创建控件 创建形变 可控形变 形变边界 形变动画 创建手势控件 创建页面布局 更新拖拽物位置 其它细节 项目地址 今天来说说怎样在.NET MAUI中 ...

  9. 基于nerdctl+buildkitd+containerd实现镜像构建

    1.容器技术简介 容器技术除了的docker之外,还有coreOS的rkt.google的gvisor.以及docker开源的containerd.redhat的podman.阿⾥的pouch等,为了 ...

  10. R 语言中 X11 相关的一些问题

    参考 Anaconda 官方文档<Using R language with Anaconda>安装 R-4.0.2: conda create -n r-4.0.2 r-essentia ...