ACM题解Day4 | Boring Non-Palindrome ,Mental Rotation ,so Easy

news2024/11/22 22:11:43

学习目标:

博主介绍: 27dCnc
专题 : 数据结构帮助小白快速入门算法
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆

Github今日打卡
在这里插入图片描述

  • ACM题解

学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习内容:

  1. Boring Non-Palindrome
  2. Mental Rotation
  3. so Easy

内容详细:

Boring Non-Palindrome

题目考点: 回文串 字符串 模拟

在这里插入图片描述

解题思路

  • 一给函数用于判断回文串
  • 如果是回文串则返回 true 如果不是返回 false
  • 根据题目要求模拟
    • 如果是回文串直接输出
    • 如果不是回文串 去掉尾部,然后反转相加输出

样例增加
在这里插入图片描述

详细代码:

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;

bool Palindrome(string s) {
    for (int  i = 0 ,k = s.size() - 1; i < s.size() / 2; i++,k--) {
        if(s[i] != s[k]) return false;
    }
    return true;
}


void slove() {
   string s; cin >> s;
   if (Palindrome(s)) {
    cout << s << endl;
   } else {
    string t(s.begin(),s.end() - 1);
    reverse(s.begin(),s.end());
    cout << t + s << endl;
   }
}

signed main() {
    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);
    #if Run
        int _;cin>>_;while(_--) slove();
    #else
        slove();
    #endif
    return 0;
}

Mental Rotation

题目考点: 模拟 情况匹配

在这里插入图片描述

题目代码:

#include <bits/stdc++.h>

using namespace std;
char a[1010][1010];
char aa[1010][1010];
int n;
void right()
{
    for(int i=0;i<n; i++)
    {
        for(int j=0;j<n; j++)
        {
            if(a[i][j]=='>')
            aa[j][n-1-i]='v';
            else if(a[i][j]=='<')
            aa[j][n-1-i]='^';
            else if(a[i][j]=='^')
            aa[j][n-1-i]='>';
            else if(a[i][j]=='.')
            aa[j][n-1-i]='.';
             else if(a[i][j]=='v')
            aa[j][n-1-i]='<';
        }
    }
    for(int i=0;i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            a[i][j]=aa[i][j];
        }
    }
}
int main()
{
    char s[110];
    cin>>n;
    getchar();
    cin>>s;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        cin>>a[i][j];
    }
    int l=0,r=0;
    for(int i=0; s[i]!='\0'; i++)
    {
      if(s[i]=='L')
      l++;
      else
      r++;
    }
    /*这个用于判断旋转次数*/
    l=l%4;
    r=r%4;
    r=(r+4-l)%4;
    while(r--)
    {
        right();
    }
    for(int i=0;i<n; i++)
    {
        for(int j=0;j<n; j++)
        {
            if(j==n-1)
            cout<<a[i][j]<<endl;
            else
            cout<<a[i][j];
        }
    }
    return 0;
}

样例补充
在这里插入图片描述

详细代码

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;
char str_[1005][105];
char str[1005][105];

bool Palindrome(string s) {  //这个用于判断回文串,本题没有用
    for (int  i = 0 ,k = s.size() - 1; i < s.size() / 2; i++,k--) {
        if(s[i] != s[k]) return false;
    }
    return true;
}

char Ttans(char str) { /*确定旋转后的*/
    switch (str)
    {
        case '>': return 'v';
        case 'v': return '<';
        case '^': return '>';
        case '<': return '^';
    }
    return '.';
}

void slove() {
    int n; string s; cin >> n >> s;
    
    int l = 0,r = 0;
    //注意s不是只有一个操作
    for (int i = 0; i < n; i++) {
        cin >> str[i];
    }
    /*最为难懂的地方*/
    for (int i = 0;s[i]; i++) {
        if (s[i] != 'R') l++;
        else r++; 
    }
    r %= 4, l %= 4; //因为4下旋转就回到原状
    r = (r - l + 4) % 4; //确定是向左旋转还是向右旋转


    while (r --) { 
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) str_[i][j] = Ttans(str[n - 1 - j][i]);
        }
        memcpy(str,str_,sizeof(str_)); // 将str_ 中的元素复制到 str
    }
    for (int i = 0; i < n; i++) cout << str[i] << endl;
}

signed main() {
    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);
    #if Run
        int _;cin>>_;while(_--) slove();
    #else
        slove();
    #endif
    return 0;
}

so Easy

题目考点: 数学 思维
在这里插入图片描述
解题思路
本题有两种方法,一个是将过程逆过来求解,另一个是根据矩阵的性质找规律。

方法一:

由于每次都操作了一行或者一列,先不管− 1 -1−1所在的行和列,将其他所有的行,所有的列,减去该行(列)最小的那个数。这样之后− 1 -1−1所在的行和列均变成了只操作该行和该列的次数,也会发现其他位置都是0 00,随便加上两个(非− 1 -1−1所在位置)就是答案

方法二:

可以发现这样一个规律:不管进行多少次操作,该矩阵中任取一个二元子矩阵,其两条对角线上的和相同,因此直接找到− 1 -1−1周围相邻的任意四个数,斜对角线求和再减去和− 1 -1−1在同一条对角线上那个数,即可求出答案

这个是基本思路但是详细代码放头歌里是错的,我表示不理解

代码

#include <iostream>
#include <algorithm>
using namespace std;
int a[1007][1007];
int n,r,c;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
            if(a[i][j]==-1){
                r=i;
                c=j;
            }
        }
    if(r==1){
       	if(c==n)
    	  	printf("%d",a[r+1][c]+a[r][c-1]-a[r+1][c-1]);
       	else printf("%d",a[r+1][c]+a[r][c+1]-a[r+1][c+1]);
    }else if(r==n){
    	if(c==n)
            printf("%d",a[r-1][c]+a[r][c-1]-a[r-1][c-1]);
        else printf("%d",a[r-1][c]+a[r][c+1]-a[r-1][c+1]);
    }else if(c==1) printf("%d",a[r+1][c]+a[r][c+1]-a[r+1][c+1]);
    else if(c==n) printf("%d",a[r+1][c]+a[r][c-1]-a[r+1][c-1]);
    else printf("%d",a[r+1][c]+a[r][c-1]-a[r+1][c-1]);

    return 0;
}

其他代码

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1005;

int n,mp[N][N];

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	int sx=1,sy=1;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			cin>>mp[i][j];
			if(mp[i][j]==-1){
				sx=i;sy=j;
				mp[i][j]=0;
			}
		}
	}
	for(int i=1;i<=n;++i){
		int mi=1e9; 
		if(i==sx) continue; 
		for(int j=1;j<=n;++j) mi=min(mi,mp[i][j]);
		for(int j=1;j<=n;++j) mp[i][j]-=mi;
	}
	for(int j=1;j<=n;++j){
		int mi=1e9; 
		if(j==sy) continue;
		for(int i=1;i<=n;++i) if(sx!=i||sy!=j) mi=min(mi,mp[i][j]);
		for(int i=1;i<=n;++i) mp[i][j]-=mi;
	}
	int ans=max(mp[sx-1][sy],mp[sx+1][sy])+max(mp[sx][sy+1],mp[sx][sy-1]);
	cout<<ans<<"\n";
	return 0;
}


学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

在这里插入图片描述

重磅消息:

GTP - 4 最新版接入服务他来了 点击链接即可查看详细

GTP - 4 搭建教程

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~

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

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

相关文章

GuitarPro8激活许可证24位下载

Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。下面我们来看Guitar Pro8 如何安装激活。 Guitar Pro 8.1官方中文解锁版如何安装 …

可视化和跟踪机器学习实验的工具——Wandb

简介&#xff1a;用于可视化和跟踪机器学习实验的工具。Weights & Biases 是一个机器学习平台&#xff0c;供开发人员更快地构建更好的模型。使用 W&B 的轻量级、可互操作的工具快速跟踪实验、对数据集进行版本和迭代、评估模型性能、重现模型、可视化结果和发现回归&a…

【Java多线程进阶】JUC常见类以及CAS机制

1. Callable的用法 之前已经接触过了Runnable接口&#xff0c;即我们可以使用实现Runnable接口的方式创建一个线程&#xff0c;而Callable也是一个interface&#xff0c;我们也可以用Callable来创建一个线程。 Callable是一个带有泛型的interface实现Callable接口必须重写cal…

【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格列数据数组[基于el-table]

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136141769 查看使用说明 --><div :class"$options.name"><div class"sg-head">表格数据生成工具</div><div class"sg-container&quo…

Nginx (window)2024版 笔记 下载 安装 配置

前言 Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理&#xff08;Reverse Proxy&#xff09;服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 反向代理方式是指以代理服务器来接受 internet 上的连接请求&#xff0c;然后将请求转发给内部网络上的服…

java8-使用流-2

筛选各异的元素 流还支持一个叫作aistinct的方法&#xff0c;它会返回一个元素各异(根据流所生成元素的hashcode和eguals方法实现)的流。例如&#xff0c;以下代码会筛选出列表中所有的偶数&#xff0c;并确保没有重复。图5-2直观地显示了这个过程。 List<Integer>number…

「算法」滑动窗口

前言 算法需要多刷题积累经验&#xff0c;所以我行文重心在于分析解题思路&#xff0c;理论知识部分会相对简略一些 正文 滑动窗口属于双指针&#xff0c;这两个指针是同向前行&#xff0c;它们所夹的区间就称为“窗口” 啥时候用滑动窗口&#xff1f; 题目涉及到“子序列…

Unity所有关于旋转的方法详解

前言&#xff1a;欧拉角和四元数的简单描述 我们在Inspector面板上看到的rotation其实是欧拉角&#xff0c; 我们将Inspector面板设置成Debug模式&#xff0c;此时看到的local Rotation才是四元数。 Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转&#xff0c;一组欧拉旋转过程中…

C++11---lambda表达式

lambda表达式 lambda表达式概念lambda表达式语法lambda表达式各部分说明 lambda表达式交换两个数lambda表达式底层原理lambda表达式的底层原理 lambda表达式之间不能相互赋值 lambda表达式概念 lambda表达式是一个匿名函数&#xff0c;恰当使用lambda表达式可以让代码变得简洁…

Linux CPU 性能分析工具火焰图(Flame Graphs)认知

写在前面 博文内容为 《BPF Performance Tools》 读书笔记整理详细了解小伙伴可以访问作者官网&#xff1a;https://www.brendangregg.com/flamegraphs.html有油管上分享的作者在USENIX ATC 2017 的视屏理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&a…

Day-01-01

项目准备 项目介绍 1. 业务功能 本项目包括了用户端、机构端、运营端。 2. 技术选型 各层简要说明&#xff1a; 环境配置 1. 版本信息 在开发过程中&#xff0c;个人使用gitee作为版本控制工具。 2. 虚拟机安装说明 根据所提供资料&#xff0c;虚拟机IP地址已设置为192.1…

OpenAI Sora出炉,视频鉴赏,详细介绍,小白看过来~~立即尝试Sora,开启您的AI视频创作之旅吧!

OpenAI最新推出的视频创作的颠覆性产品&#xff1a;Sora&#xff0c;它开启了该行业的新纪元&#xff0c;吊打目前一众视频制作工具。 无论是专业人士还是爱好者&#xff0c;都可以轻松创作出高质量的视频内容。 Sora同样是一个根据文本指令创建逼真而富有想象力的场景的人工智…

图表示学习 Graph Representation Learning chapter2 背景知识和传统方法

图表示学习 Graph Representation Learning chapter2 背景知识和传统方法 2.1 图统计和核方法2.1.1 节点层次的统计和特征节点的度 节点中心度聚类系数Closed Triangles, Ego Graphs, and Motifs 图层次的特征和图的核节点袋Weisfieler–Lehman核Graphlets和基于路径的方法 邻域…

Flex布局简介及微信小程序视图层View详解

目录 一、Flex布局简介 什么是flex布局&#xff1f; flex属性 基本语法和常用属性 Flex 布局技巧 二、视图层View View简介 微信小程序View视图层 WXML 数据绑定 列表渲染 条件渲染 模板 WXSS 样式导入 内联样式 选择器 全局样式与局部样式 WXS 示例 注意事项…

阅读笔记(SOFT COMPUTING 2018)Seam elimination based on Curvelet for image stitching

参考文献&#xff1a; Wang Z, Yang Z. Seam elimination based on Curvelet for image stitching[J]. Soft Computing, 2018: 1-16. 注&#xff1a;SOFT COMPUTING 大类学科小类学科Top期刊综述期刊工程技术 3区 COMPUTER SCIENCE, ARTIFICIAL INTELLIGENCE 计算机&#xf…

二次元风格404页面源码

大气二次元风格带背景音乐404页面模板 蓝奏云&#xff1a;https://wfr.lanzout.com/ivaYi1odtjhe

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下&#xff1a; Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…

Docker容器运行

1、通过--name参数显示地为容器命名&#xff0c;例如:docker run --name “my_http_server” -d httpd 2、容器重命名可以使用docker rename。 3、两种进入容器的方法&#xff1a; 3.1、Docker attach 例如&#xff1a; 每间隔一秒打印”Hello World”。 Sudo docker run…

高程 | 类与对象(c++)

文章目录 &#x1f4da;面向对象程序设计的基本特点&#x1f407;抽象——概括问题&#xff0c;抽出公共性质并加以描述。&#x1f407;封装——将抽象所得数据和行为相结合&#xff0c;形成一个有机的整体&#xff0c;形成“类”。&#x1f407;继承——在原有类特性的基础上&…

小白必看,总结前端所有主流的构建工具,webpack / vite / roollup / esbuild,包含源码,建议关注+收藏

前言 本篇文章旨在总结前端常见的构建工具&#xff0c;构建工具是前端工程化中的重要的组成部分。 在实际项目中&#xff0c;我们初始化项目&#xff0c;一般是使用脚手架命令一键生成的&#xff0c;比如说使用 create-vue 初始化 vue 项目的时候&#xff0c;就会默认使用 vi…