学校周赛(3)

news2024/10/7 6:14:40

A:

题目:

​​​​​​​在这里插入图片描述

解题:

本道题木只需要找到一个*的位置,并且查看这个*是否满足四种情况即可,对与判断的体哦见是四周不出现任何的*,由于每次搜索我们首先搜索到的的最左上角的*,因此我们以左上角的为中心进行讨论分析,分析见下图所示(橙红色表示第一个*的位置,绿色框表示我对应L的位置,紫色X表示不能有*的位置)
在这里插入图片描述

代码:
#include<iostream>
#include<vector>
using namespace std;
void bu(vector<vector<int>>& a,int i, int j) {
	if (a[i + 1][j] && a[i + 1][j + 1] && !a[i - 1][j - 1] && !a[i - 1][j] && !a[i - 1][j + 1] &&
		!a[i][j - 1] && !a[i][j + 1] && !a[i][j + 2] && !a[i + 1][j - 1] && !a[i + 1][j + 2] &&
		!a[i + 2][j - 1] && !a[i + 2][j] && !a[i + 2][j + 1] && !a[i + 2][j + 2]) {
		a[i][j] = a[i + 1][j] = a[i + 1][j + 1] = 0;
		return;
	}
	if (a[i + 1][j - 1] && a[i + 1][j] && !a[i - 1][j - 1] && !a[i - 1][j] && !a[i - 1][j + 1] &&
		!a[i][j - 2] && !a[i][j - 1] && !a[i][j + 1] && !a[i + 1][j - 2] && !a[i + 1][j + 1] &&
		!a[i + 2][j - 2] && !a[i + 2][j - 1] && !a[i + 2][j] && !a[i + 2][j + 1]) {
		a[i][j] = a[i + 1][j - 1] = a[i + 1][j] = 0;
		return;
	}
	if (a[i][j + 1] && a[i + 1][j + 1] && !a[i - 1][j - 1] && !a[i - 1][j] && !a[i - 1][j + 1] &&
		!a[i - 1][j + 2] && !a[i][j - 1] && !a[i][j + 2] && !a[i + 1][j - 1] && !a[i + 1][j] &&
		!a[i + 1][j + 2] && !a[i + 2][j] && !a[i + 2][j + 1] && !a[i + 2][j + 2]) {
		a[i][j] = a[i][j + 1] = a[i + 1][j + 1] = 0;
		return;
	}
	if (a[i][j + 1] && a[i + 1][j] && !a[i - 1][j - 1] && !a[i - 1][j] && !a[i - 1][j + 1] &&
		!a[i - 1][j + 2] && !a[i][j - 1] && !a[i][j + 2] && !a[i + 1][j - 1] && !a[i + 1][j + 1] &&
		!a[i + 1][j + 2] && !a[i + 2][j - 1] && !a[i + 2][j] && !a[i + 2][j + 1]) {
		a[i][j] = a[i][j + 1] = a[i + 1][j] = 0;
		return;
	}
}
void to_do() {
	int n, m; cin >> n >> m;
	//给予一个边界防止益处
	vector<vector<int>> cnt(n+2, vector<int>(m+2));
	//用1表示*,0表示.
	char c;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> c;
			if (c == '*') cnt[i][j] = 1;
		}
	}
	//第一次遍历,将满足要求的进行填补
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (cnt[i][j]==1) bu(cnt, i, j);
		}
	}
	//第二次遍历,查找是否有未填补的地方
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (cnt[i][j] == 1) {
				cout << "NO" << endl;
				return;//提前返回,减少时间
			}
		}
	}
	cout << "YES" << endl;
}
int main() {
	int T; cin >> T;
	while (T--) to_do();
	return 0;
}

B:

题目:

在这里插入图片描述

解题:

本道题目要求我们求最长路径,但我们所遇到的问题都是最短路径问题,因此我们可以反过来思考,将所有的距离变为负数,那么我们的问题就变成了最基础的最短路径问题。

代码:
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 100010;

int n, m;
int h[N], w[N], e[N], ne[N], idx;
int dist[N];
bool st[N];

void add(int a, int b, int c)//加入边,链接矩阵
{
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

int zui_duan() 
{
    memset(dist, 0x3f, sizeof dist);
    dist[1] = 0;

    queue<int> q;
    q.push(1);
    st[1] = true;

    while (q.size())
    {
        int t = q.front();
        q.pop();

        st[t] = false;

        for (int i = h[t]; i != -1; i = ne[i])
        {
            int j = e[i];
            if (dist[j] > dist[t] + w[i])
            {
                dist[j] = dist[t] + w[i];
                if (!st[j])
                {
                    q.push(j);
                    st[j] = true;
                }
            }
        }
    }

    return dist[n];
}

int main()
{
    cin >> n >> m;

    memset(h, -1, sizeof h);

    while (m--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, -c); 
    }

    int t = zui_duan();

    if (t == 0x3f3f3f3f) cout << "-1";
    else cout << -t;

    return 0;
}

C:解析和答案见周赛(1)的 F

题目:

在这里插入图片描述

D:

题目:

在这里插入图片描述

解题:

数学的组合问题,我们可以将两个位置用二位数组取记录其数量,利用组合数的思想直接计算答案

代码:
#include<iostream>
using namespace std;

int main()
{
    int t; cin >> t;
    while (t--)
    {
        int n; cin >> n;
        int cnt[11][11] = { 0 };
        long long ans = 0;
        for (int i = 0; i < n; i++)
        {
            char x, y;
            cin >> x >> y;
            cnt[x - 'a'][y - 'a']++;
            for (int k = 0; k < 11; k++)
            {
                if (cnt[x - 'a'][k] && k != y - 'a')
                    ans += cnt[x - 'a'][k];
                if (cnt[k][y - 'a'] && k != x - 'a')
                    ans += cnt[k][y - 'a'];
            }
        }
        cout << ans << endl;
    }
    return 0;
}

E:

题目:

在这里插入图片描述

解题:

本题要求你最多执行k次操作使得整个数组&操作得到最大值.关于每次操作 你可以改变数组中某个数的某个二进制位变为1。我们可以先统计每个位上&的结果(注:&的结果只有是1&1时才为1,因此只需要和1进行比较),然后我们由高位向低位进行逐位分析(因为要是结果最大,那么我们就必须保证高位尽可能为1),那么此时我们需要考虑第j位是否可以通过need次操作达到效果(要想使此位为1,则要求每个数的此位都为1,即need=此位置上的0的个数),当我need<=k时表示我能够进行此操作,同时k-=need表示我已经操作了need次数了

代码:
#include<iostream>
#include<vector>
using namespace std;
void to_do() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n),cnt(31,0);
    //给一个数组,允许改变任意一个元素最多k次(将二进制的k位变成1)
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        for (int j = 30; j >= 0; j--) {
            if (a[i] & (1 << j)) {
                //记录按位与的过程
                cnt[j]++;
            }
        }
    }
    int ans = 0;
    //遍历按位与的记录值,要想结果最大,优先给最高位1
    for (int j = 30; j >= 0; j--) {
        //cnt记录的值为1的个数
        //n-cnt的个数为0的个数
        int need = n - cnt[j];
        //如果此为0的个数小于k,那么说明我可以通过need次操作使其变为1
        if (need <= k) {
            //k减去need的次数
            k -= need;
            ans += (1 << j);
        }
    }
 cout << ans << endl;
}
int main()
{
    int t; cin >> t;
    while (t--) to_do();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在VSCode中使用Excalidraw

概述 Excalidraw是一款非常不错的示意图绘制软件&#xff0c;没想到在VSCode中有其扩展&#xff0c;可以在VScode中直接使用。 安装扩展 使用 需要创建.excalidraw.svg、.excalidraw或.excalidraw.png等名称的文件。 搭配手写版使用 自由画笔工具可以配合手写板&#xff0c…

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(下篇)

【ps】本篇有 8 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;字母大小写全排列 .1- 题目解析 .2- 代码编写 2&#xff09;优美的排列 .1- 题目解析 .2- 代码编写 3&#xff09;N 皇后 .1- 题目解析 .2- 代码编写 4&#xff09;有效的数独 .1-…

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Excel中的屠龙大招

indirect的地位部分动摇&#xff0c;神坛下已初生大力骑士——“”。 (笔记模板由python脚本于2024年10月06日 18:57:11创建&#xff0c;本篇笔记适合同时喜欢python和Excel的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&…

C++——模拟实现list

1.初步实现结点和链表 namespace jxy {template<class T>struct list_node{T _data;list_node<T>* _prev;list_node<T>* _next;list_node(const T& x T()):_data(x),_prev(nullptr),_next(nullptr){}};template<class T>class list//list的框架本…

C# 雷赛运动控制器 SMC304 新建工程

雷赛SMC304资料下载地址 https://www.leisai.com/cn/cpzx/info_36_itemid_3389_lcids_140_cid_3340.html 在官网下载需要的资料 新建文件 在官网下载的资料中找出需要三个文件 把文件添加到现有的项目中 编译选择x64 将连接雷赛电脑的网口IP号改为&#xff1a;如下图所示

深度学习环境安装

**前置知识&#xff1a; 1、各个软件之间的关系&#xff1a; pytorch/tensorflow库&#xff0c;调用cuda runtime version&#xff0c;接着cuda调用驱动&#xff08;cuda driver version&#xff09;&#xff0c;最后驱动又调用GPU显卡。 Anaconda&#xff1a; 集成了python&…

华为海思:大小海思的双轮驱动战略分析

华为海思,作为华为旗下的半导体设计部门,近年来在芯片设计领域取得了显著成就,成为了中国乃至全球芯片设计的重要力量。实际上,华为海思并非单一实体,而是由两个主要分支构成:大海思和小海思。这两个分支虽然同属华为海思,但在定位、产品布局以及市场策略上有所不同,共…

YOLOv8改进 - 注意力篇 - 引入EMA注意力机制

一、本文介绍 作为入门性篇章&#xff0c;这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析&#xff0c;EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。 二、EMA原理分析 EMA官方论文地址&#xff1a;EMA文章 EMA代码&#xff1a;EMA代码 EMA注意力机…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数&#xff0c;表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

毕业设计项目 基于大数据人才岗位数据分析

文章目录 1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入 3. 数据分析可视化3.1 整体情况&#xff08;招聘企业数、岗位数、招聘人数、平均工资&#xff09;3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云 3.3 岗位主…

晶体管最佳效率区域随频率逆时针旋转原因分析

晶体管最佳效率区域随频率逆时针旋转原因分析 在功率放大器的设计时&#xff0c;晶体管最佳区域随频率逆时针旋转。但是&#xff0c;对于一般的微带电路&#xff0c;匹配阻抗区域是随着频率顺时针旋转的&#xff08;也有称这个特性是Foster特性&#xff09;&#xff0c;因此功…

运动员场景分割系统源码&数据集分享

运动员场景分割系统源码&#xff06;数据集分享 [yolov8-seg-HGNetV2&#xff06;yolov8-seg-aux等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al lnnovati…

基于SpringBoot+Vue+MySQL的在线学习交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;在线学习已成为现代教育的重要组成部分。传统的面对面教学方式已无法满足广大学习者的需求&#xff0c;特别是在时间、地点上受限的学习者。因此&#xff0c;构建一个基于SpringBoot、Vue.…

CPU 多级缓存

在多线程并发场景下&#xff0c;普通的累加很可能错的 CPU 多级缓存 Main Memory : 主存Cache : 高速缓存&#xff0c;数据的读取存储都经过此高速缓存CPU Core : CPU 核心Bus : 系统总线 CPU Core 和 Cache 通过快速通道连接&#xff0c;Main menory 和 Cache 都挂载到 Bus 上…

gm/ID设计方法学习笔记(二)

一、任务 设计一个二级运放&#xff0c;第一级为有源负载差动对&#xff08;五管OTA&#xff09;&#xff0c;第二级为电流源负载的共源极。 二、参数指标 GBW≥50MHz|Av|≥80dBPM60~70SR≥50V/us10pF 本文使用smic13mmrf_1233工艺库进行设计。 三、电路设计 &#xff08;…

【进阶OpenCV】 (6)--指纹识别

文章目录 指纹识别1. 计算指纹间匹配点的个数2. 获取指纹编号3. 获取对应姓名4. 代码实现 总结 指纹识别 假设&#xff0c;现在我们有一个小的指纹库&#xff0c;此时&#xff0c;有一个指纹图片需要我们识别是不是指纹库中某一个人的。如果是&#xff0c;是谁的呢&#xff1f…

力扣110:判断二叉树是否为平衡二叉树

利用二叉树遍历的思想编写一个判断二叉树&#xff0c;是否为平衡二叉树 示例 &#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true思想&#xff1a; 代码&#xff1a; int getDepth(struct TreeNode* node) {//如果结点不存在&#xff0c;返回…

有趣幽默彩虹屁文案生成工具微信小程序源码

有趣幽默彩虹屁文案生成工具小程序源码 此文案小程序主要功能为分享各种有趣幽默的文案 免服务器免域名&#xff0c;源码只提供彩虹屁&#xff0c;朋友圈&#xff0c;毒鸡汤API接口&#xff0c;其他需自行查找替代 小程序拥有复制收藏功能&#xff0c;可自行体验&#xff0c;设…

FineReport 11 在线学习

文章目录 学习路线图FineReport 11 在线学习资源链接分享帆软report 特点 学习路线图 学习生态 自测题 FineReport 11 在线学习资源链接分享 帮助中心https://help.fanruan.com/finereport/ FineReport 入门学习路径https://edu.fanruan.com/guide/finereport 普通报表…