刷题记录(NC50937 货仓选址,NC18386 字符串,NC207040 丢手绢)

本文主要是介绍刷题记录(NC50937 货仓选址,NC18386 字符串,NC207040 丢手绢),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NC50937 货仓选址

题目链接

关键点: 

我的第一个想法是,挑中间的点,然后画了一下,发现中间的点大概率为所有点距离的最短和

代码:

# include <iostream>
# include <algorithm>
using namespace std;
int n, sum;
int a[100000+10];
int main()
{scanf("%d", &n);for (int i=1; i<=n; i++){scanf("%d", &a[i]);}sort(a+1, a+1+n);for (int i=1; i<=n/2; i++){sum+=(a[n-i+1]-a[i]);}cout<<sum;return 0;
}

总结,对于类似的题,其实和加权的中位数相同,有两种做法:

1、直接选中间的点来计算所有的距离

2、利用前缀和,先在输入数组的时候,算出前缀和,然后先算出一个距离dist[x](指所有点到x的距离),然后算x之后的点,

dist[x+p] = (x+p和x间的距离)*(x及其x之前的前缀和(增加的距离)-x及其x之后的前缀和(减少的距离))

 

 

NC18386 字符串

题目链接

关键点: 

1、利用尺取法,一个l指向头,一个r指向尾,r从第一个数开始,然后求当前区间的小写字母个数,一旦小写字母等于26,或者已经超过了整个的size,就退出

2、然后就是注意如何求区间字母的个数

代码:

# include <iostream>
# include <cstdio>
# include <algorithm>
# include <cstring>
using namespace std;
string s;
int len, total;
int cnt[30];
int main()
{cin>>s;len = s.size();int r = 0;
//     cout<<len<<endl;for (int l=0; l<s.size(); l++){while (r<s.size() && total<26){int x = s[r]-'a';cnt[x]++;if (cnt[x]==1)total++;r++;}if (total==26){len = min(len, r-l);}int x = s[l]-'a';cnt[x]--;if (!cnt[x])total--;}printf("%d", len);return 0;
}

 NC207040 丢手绢

题目链接

关键点: 

1、还是尺取法,先算出所有数的和,当当前区间的和大于总和的一半时,就没有必要再算下去的,这是就退出r的循环,并且算出当前距离,并取最大值

2、还有一点,这个是个环,所以r在加一的时候,要保证r也形成个环,将数组从0开始存,然后采用以下方式,可以保证所有的数都会变成r这个右区间。

(r++)%n 

 代码:

# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
int n, sum;
int a[100000+10];
int main()
{scanf("%d", &n);for (int i=0; i<n; i++){scanf("%d", &a[i]);sum+=a[i];}int len = 0;int r = 0;int total = 0;for (int l=0; l<n; l++){while(total<sum/2){total+=a[(r++)%n];}len = max(len, min(total, sum-total));total-=a[l];}printf("%d", len);return 0;
}

 

这篇关于刷题记录(NC50937 货仓选址,NC18386 字符串,NC207040 丢手绢)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233697

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu