比赛链接

·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. 一个好用的java图片缩放及质量压缩方法

    本文中代码来自:http://blog.csdn.net/liuhuanchao/article/details/50527856由于网站需要对上传的图片进行宽度判断缩放和质量压缩,以提升整体加载速度 ...

  2. pytest—添加日志

    开头 保存工作中常用的日志. pytest有自己的日志管理的开关,不需要用到python的日志库 开始 在文件根目录下新建一个pytest.ini文件 基本设置 [pytest] log_cli=tr ...

  3. ctfshow菜狗杯(一)

    CTFshow菜狗杯,web签到 传参. 需要注意的是传参的时候要对中文字符进行编码输出. 得到flag. 第二关 come-to_s1gn 打开页面源代码 这里好像给了一半的flag,另一半好像说在 ...

  4. 2020-12-31:tcp三次握手,最后一次失败,网络会怎么样?

    福哥答案2020-12-31:[答案来自此链接:](https://www.zhihu.com/question/437249958)第一次握手:建立连接时,客户端发送syn包(syn=a)到服务器, ...

  5. 2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=

    2021-11-12:前 K 个高频元素.给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案.提示:1 <= nums.length ...

  6. SpringMVC 简单的开始

    SpringMVC简单的开始 利用Spring模板配置写一个web项目. 1.核心配置文件(模板代码) <?xml version="1.0" encoding=" ...

  7. 【Python&RS】GDAL计算遥感影像光谱指数(如NDVI、NDWI、EVI等)

            GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它 ...

  8. 不同大小的缓冲区对 MD5 计算速度的影响

    最*需要在计算大文件的 MD5 值时显示进度,于是我写了如下的代码: public long Length {get; private set; } public long Position { ge ...

  9. 花了半天时间,使用spring-boot实现动态数据源,切换自如

      在一个项目中使用多个数据源的情况很多,所以动态切换数据源是项目中标配的功能,当然网上有相关的依赖可以使用,比如动态数据源,其依赖为, <dependency> <groupId& ...

  10. Java 网络编程 —— RMI 框架

    概述 RMI 是 Java 提供的一个完善的简单易用的远程方法调用框架,采用客户/服务器通信方式,在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法,它要求客户端与服务器端都 ...