1 月 30 日算法练习-思维和贪心

文章目录

  • 重复字符串
  • 翻硬币
  • 乘积最大

重复字符串

请添加图片描述
思路:判断是否能整除,如果不能整除直接退出,能整除每次从每组对应位置中找出出现最多的字母将其他值修改为它,所有修改次数即为答案。

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int k;
char s[N];
int cnt[30];int main( ){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);scanf("%d\n%s",&k,s+1);if(strlen(s+1)%k){cout<<-1<<'\n';return 0;}int ans=0,n = strlen(s+1)/k;for(int i = 1;i<=n;i++){int ma = 0;for(int j = 0;j<=25;j++)cnt[j] =0;for(int j=1;j<=k;j++){char x = s[i + (j-1)*n];cnt[ x - 'a' ]++;ma = max(ma,cnt[x-'a']);}ans += k -ma;}cout<<ans<<'\n';return 0;
}

翻硬币

小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作。
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。
输出格式
一个整数,表示最小操作步数
数据范围
输入字符串的长度均不超过100。
数据保证答案一定有解。

输入样例1:

**********
o****o****

输出样例1:

5

思路:从前往后枚举硬币,计数过程中翻转后一枚硬币。

#include<iostream>
#include<string>
using namespace std;
string s,d;
int main( ){cin>>s>>d;int cnt = 0,len=s.length();for(int i = 0;i<len;i++){if(s[i]!=d[i]){cnt++;if(s[i+1]=='*')s[i+1]='o';else s[i+1]='*';}}cout<<cnt<<'\n';return 0;
}

做法二:考验思维,硬币一共有两种情况,第 i 个不同,第 i+1 可能相同也可能不同。当第 i 个不同时,第 i+1 个相同翻的时候后面会变成不同,所以要一直往后翻直到找到不同,期间就是一组翻硬币次数。由于题目没有要我们输出不能成功翻硬币的输出,所以硬币一定能翻成功,即不同个数一定是偶数。

#include<iostream>
#include<vector>
using namespace std;
signed main( ){string s,d;int cnt = 0;cin>>s>>d;vector<int>vec;for(int i=0;i<s.size();i++)if(s[i]!=d[i])vec.push_back(i);for(int i=0;i<vec.size();i+=2)cnt+=vec[i+1]-vec[i];cout<<cnt<<'\n';return 0;
}

乘积最大

给定N个整数A1, A2, … AN。请你从中选出K个数,使其乘积最大。
请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数。
注意,如果X<0, 我们定义X除以1000000009的余数是负(-X)除以1000000009的余数。
即:0-((0-x) % 1000000009)
【输入格式】
第一行包含两个整数N和K。
以下N行每行一个整数Ai。
对于40%的数据,1 <= K <= N <= 100
对于60%的数据,1 <= K <= 1000
对于100%的数据,1 <= K <= N <= 100000 -100000 <= Ai <= 100000
【输出格式】
一个整数,表示答案。
【输入样例】
5 3
-100000
-10000
2
100000
10000
【输出样例】
999100009
再例如:
【输入样例】
5 3
-100000
-100000
-2
-100000
-100000
【输出样例】
-999999829
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

思路:思维题,把所有情况都考虑到。如果用动态规划只能过一半。
在这里插入图片描述

#include<iostream>
using namespace std;
int n,k;
const int N = 1e5+10,mod = 1e9+9;
long long  res = 1;
int cnt1,cnt2;
int a[N];int main( ){cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=0)cnt1++;else cnt2++;}sort(a+1,a+1+n);if(k==n){for(int i = 1;i<=n;i++) res *= a[i],res%=mod;cout<<res<<'\n';}else if(!cnt2){for(int i=n;i>=n-k+1;i--)res *= a[i],res%=mod;cout<<res<<'\n';}else if(!cnt1){if(k&1)for(int i=n;i>=n-k+1;i--)res = res*a[i]%mod;else for(int i=1;i<=k;i++)res = res*a[i]%mod;cout<<res<<'\n';}else{int p = 1;while(k>cnt1){res *= (a[p]*a[p+1])%mod,res %= mod;p+=2,k-=2;}int p1 = p,p2 = n;while(k>1){if(a[p1]*a[p1+1] >= a[p2]*a[p2-1]){res *= (a[p1]*a[p1+1])%mod,res %= mod;p1+=2;}else{res *= (a[p2]*a[p2+1])%mod,res %= mod;p2-=2;}k-=2;}if(k)res = res*a[p2]%mod;cout<<res<<'\n';}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JS逆向实战-入门篇】某gov网站加密参数分析与Python算法还原

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 算法还原 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

如何对Ajax请求进行封装操作,解决跨域问题的方法,如何使用core解决跨域

目录 1.Ajax原理 2.为什么要封装 3.如何进行封装 4.如何请求 5.如何解决Ajax跨域问题 6.使用CORS解决Ajax跨域问题 1.服务端 2.客户端 1.Ajax原理 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种通过在后台与服务器进行少量数据交换&…

微信小程序(二十八)网络请求数据进行列表渲染

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.GET请求的规范 2.数据赋值的方法 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item">&…

Shell脚本之 -------------免交互操作

一、Here Document 1.Here Document概述 Here Document 使用I/O重定向的方式将命令列表提供给交互式程序 Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地 生产出一个文件并用作命令的标准…

排序链表---归并--链表OJ

https://leetcode.cn/problems/sort-list/submissions/499363940/?envTypestudy-plan-v2&envIdtop-100-liked 这里我们直接进阶&#xff0c;用时间复杂度O(nlogn)&#xff0c;空间复杂度O(1)&#xff0c;来解决。 对于归并&#xff0c;如果自上而下的话&#xff0c;空间复…

Netty源码二:服务端创建NioEventLoopGroup

示例 还是拿之前启动源码的示例&#xff0c;来分析NioEventLoopGroup源码 NioEventLoopGroup构造函数 这里能看到会调到父类的MultiThread EventLoopGroup的构造方法 MultiThreadEventLoopGroup 这里我们能看到&#xff0c;如果传入的线程数目为0&#xff0c;那么就会设置2倍…

代码随想录 Leetcode222.完全二叉树的节点个数

题目&#xff1a; 代码&#xff08;首刷自解 2024年1月30日&#xff09;&#xff1a; class Solution { public:int countNodes(TreeNode* root) {int res 0;if (root nullptr) return res;queue<TreeNode*> deque;TreeNode* cur root;deque.push(cur);int size 0;w…

网络隔离场景下访问 Pod 网络

接着上文 VPC网络架构下的网络上数据采集 介绍 考虑一个监控系统&#xff0c;它的数据采集 Agent 是以 daemonset 形式运行在物理机上的&#xff0c;它需要采集 Pod 的各种监控信息。现在很流行的一个监控信息是通过 Prometheus 提供指标信息。 一般来说&#xff0c;daemonset …

数据中心IP代理是什么?有何优缺点?海外代理IP全解

海外代理IP中&#xff0c;数据中心代理IP是很热门的选择。这些代理服务器为用户分配不属于 ISP&#xff08;互联网服务提供商&#xff09;且来自第三方云服务提供商的 IP 地址&#xff0c;是分配给位于数据中心的服务器的 IP 地址&#xff0c;通常由托管和云公司拥有。 这些 I…

Kali Linux初识

Kali Linux&#xff08;以前称为 BackTrack Linux&#xff09;是一个开源的、基于 Debian 的 Linux 发行版&#xff0c;旨在进行高级渗透测试和安全审计。它通过提供通用工具、配置和自动化来做到这一点&#xff0c;使用户能够专注于需要完成的任务。 包括 600 多种渗透测试工…

麒麟系统—— openKylin 安装 Nginx

麒麟系统—— openKylin 安装 Nginx 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载 nginx三、解压与运行解压检查与编译安装编译运行 Nginx 是一款高性能的 HTTP 和反向代理服务器&#xff0c;广泛应用于 Web 服务器领域。本文将分享如何在麒麟系统&#xf…

嵌入式学习第十五天

内存管理: 1.malloc void *malloc(size_t size); 功能: 申请堆区空间 参数: size:申请堆区空间的大小 返回值: 返回获得的空间的首地址 失败返回NULL 2.free void free(void *ptr); 功能: 释放堆区空间 注…