A-A

https://vjudge.net/contest/639453#problem/A

为了解决这个问题,我们需要确定将墙上的所有数字转换为数字1的最小成本。将数字i转换成数字j的代价由矩阵c[i][j]给出。

这里有一个循序渐进的方法来解决这个问题:

输入读数:读取成本矩阵c和墙体配置A。

Floyd-Warshall算法:使用Floyd-Warshall算法找到将任意数字i转换为任意数字j的最小成本。这是必要的,因为直接转换成本可能不是最小的;我们可能需要处理中间数字。

计算最小成本:对于墙上的每个数字,使用Floyd-Warshall算法的结果计算将其转换为1的最小成本。

累加成本:累加所有的最小成本得到总最小成本。

#include <iostream>
#include <vector>
#include <algorithm> using namespace std; int main() {
int H, W;
cin >> H >> W; vector<vector<int>> c(10, vector<int>(10));
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
cin >> c[i][j];
}
} for (int k = 0; k < 10; ++k) {
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
c[i][j] = min(c[i][j], c[i][k] + c[k][j]);
}
}
} vector<vector<int>> A(H, vector<int>(W));
for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) {
cin >> A[i][j];
}
} long long total_cost = 0;
for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) {
if (A[i][j] != -1) {
total_cost += c[A[i][j]][1];
}
}
} cout << total_cost << endl; return 0;
}

读出尺寸H和W。
读取代价矩阵c,它表示将数字i转换为数字j的代价。
Floyd-Warshall算法:

该算法用于寻找加权图中所有顶点对之间的最短路径。在这里,它有助于找到将任何数字转换为任何其他数字的最小成本,并考虑可能的中间转换。

计算最小成本:

对于墙上的每个数字(不包括-1),使用Floyd-Warshall算法预先计算的成本计算将其转换为1的最小成本。

合计费用:

将所有单个最小成本相加,得到将墙上所有数字转换为1所需的总最小成本。

该方法保证了找到最优的转换路径并有效地计算出最小的总成本。

B_B

https://vjudge.net/contest/639453#problem/B

要解决这个问题,我们需要找到一个整数 b 使得 ∑i=1N|Ai−(b+i)| 最小。我们可以通过以下步骤来解决这个问题:

理解绝对值函数的性质:绝对值函数 |x−y| 在 x=y 时达到最小值 0。因此,我们需要找到一个 b 使得 Ai 尽可能接近 b+i。

中位数性质:对于一个数组 A,如果我们希望最小化 ∑i=1N|Ai−x|,那么 x 应该是数组 A 的中位数。这是因为中位数是使得绝对值和最小的点。

转换问题:我们可以将问题转换为找到一个 b 使得 ∑i=1N|Ai−(b+i)| 最小。我们可以将 Ai 减去 i 得到一个新的数组 Bi=Ai−i,然后找到 B 的中位数 b。

计算最小值:找到 b 后,计算 ∑i=1N|Ai−(b+i)|。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath> using namespace std; int main() {
int N;
cin >> N;
vector<long long> A(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
} vector<long long> B(N);
for (int i = 0; i < N; ++i) {
B[i] = A[i] - (i + 1);
} sort(B.begin(), B.end());
long long b = B[N / 2]; long long sadness = 0;
for (int i = 0; i < N; ++i) {
sadness += abs(A[i] - (b + (i + 1)));
} cout << sadness << endl; return 0;
}

C_C

https://vjudge.net/contest/639453#problem/C

要解决这道题,先分析特殊情况,如果全部相同输出0,如果n==m,不是全部相同输出1.

然后贪心的思考找到数量最多的数,让这个数的最后一个从后往前遍历,如果不是最后一个再往后遍历一次。往前每次走的步数是m-1.

#include <bits/stdc++.h>
using namespace std; using ll =long long; const ll inf=2e18;
ll n,m;
ll v[10000010];
ll pd[10000010];
ll ma=0;
ll cnt;
ll res;
bool cmp(ll a,ll b){
return a>b;
}
int main(){
ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>v[i];
pd[v[i]]++;
if(pd[v[i]]>=ma){
ma=pd[v[i]];
cnt=v[i];
res=i;
}
}
if(ma==n){
cout<<0;
}else if(m==n){
cout<<1;
}else{
ll ans=0;
ll d=res;
while(1){
d-=m-1;
ans++;
if(d<=1){
break;
}
}
d=res;
if(res<n){
while(1){
d+=m-1;
ans++;
if(d>=n){
break;
}
}
}
cout<<ans;
} }

G-G

https://vjudge.net/contest/639453#problem/G

就从前往后遍历一次,记录大于等于m次的连续数字的值和次数,用muitset<int,greater>从大到小保存,如果发现当前的值和上一个不同,把set的元素加出来,如果有大于等于m个,累计次数超过m就跳出。每次加完要清空set。

这里我代码不能特判当n为1的情况,我浪费了半个钟重写。最后加个特判n为1就过了。牢记

代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll v[1000010];
char t[1000010];
multiset<int,greater<int>>st;
int main(){
ll n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>v[i];
}
for(int i=1;i<=n;i++){
cin>>t[i];
}
char cnt=t[1];
ll sum=0;
ll res=1;
if(n==1){
cout<<v[1];
return 0;
}
for(int i=1;i<=n;i++){
if(i==1)st.insert(v[1]);
else{
if(t[i]==cnt&&i<n){
res++;
st.insert(v[i]);
}else{
if(t[i]==cnt&&i==n){
res++;
st.insert(v[i]);
}
if(res>=m){
int j=1;
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
sum+= *it;
j++;
if(j>m)break;
}
st.clear(); }else{ for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
sum+= *it;
}
st.clear(); }
if(i==n&&cnt!=t[i])sum+=v[i];
cnt=t[i];
st.insert(v[i]);
res=1; }
}
}
cout<<sum;
}

2024 暑假友谊赛-热身1(7.11)zhaosang的更多相关文章

  1. 合肥学院ACM集训队第一届暑假友谊赛 B FYZ的求婚之旅 D 计算机科学家 F 智慧码 题解

    比赛网址:https://ac.nowcoder.com/acm/contest/994#question B FYZ的求婚之旅 思路: 然后用快速幂即可. 细节见代码: #include <i ...

  2. 使用Excel制作万年历(可打印)

    先来看看A4纸打印效果,其他功能后续继续完善中. 年份数据字典(农历节日) 农历节日表 年度 春节 元宵节 龙抬头 端午节 六月六 七月七 七月十五 仲秋节 除夕 2010年02月14日 2010年0 ...

  3. DirectX11 With Windows SDK--00 目录

    前言 (更新于 2019/4/10) 从第一次接触DirectX 11到现在已经有将近两年的时间了.还记得前年暑假被要求学习DirectX 11,在用龙书的源码配置项目运行环境的时候都花了好几天的时间 ...

  4. 使用Excel制作万年历(日历可A4纸打印)

    先来看看A4纸打印效果,其他功能后续继续完善中. 年份数据字典(农历节日) 农历节日表 年度 春节 元宵节 龙抬头 端午节 六月六 七月七 七月十五 仲秋节 除夕 2010年02月14日 2010年0 ...

  5. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  6. 暑假热身 E. 无聊的LSY

    LSY大牛没事就爱玩游戏,包括很多很无聊的游戏.某日,LSY大牛又找到了一个无聊的游戏:每一局游戏的开始,LSY大牛将代表自己的棋子放在一个线性棋盘的最左端(第0个格子,可以认为向右端无限延伸),接着 ...

  7. 暑假热身 D. 条形码设计

    校ACM队准备筹划向学校批请一个专用机房.但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个.这种大小为2*n的条形码由以下三种元素构成:1*2.2*1.2*2 ...

  8. 暑假热身 B. 下载测速

    最近,nono终于结束了每年一次的为期12个月的冬眠,醒来的第一件事就是——看电影!!nono发现最近一年出现了各种很好很强大的电影,例如这个.这个.还有这个. 于是nono直接把这些电影全部扔进了下 ...

  9. 暑假热身 A. GCC

    GCC编译器是一个由GNU项目维护的编译系统,它支持多种编程语言的编译.但是它并不包含数学运算符“!”.在数学中,这个符号代表阶乘.表达式n!的意思是从1到n的所有整数的乘积. 例如,4!=4*3*2 ...

  10. php热身2:CRUD with Ajax

    这次热身是一个会员管理系统,包括会员注册.登录.资料修改功能,使用ajax技术 1.建表 use common_module; create table if not exists member( u ...

随机推荐

  1. ThreadLocal原理详解——终于弄明白了ThreadLocal

    目录 概述 API介绍 ThreadLocal的理解 ThreadLocal的原理分析 总结 概述 在java学习生涯中可能很多人都会听到ThreadLocal变量,从字面上理解ThreadLocal ...

  2. WPF开发快速入门【6】下拉框与枚举类型

    概述 本文讲述下拉框和枚举类型进行绑定的一些操作. 下拉框的基本操作 设计部分: <ComboBox ItemsSource="{Binding Fruits}" Selec ...

  3. 使用elementUI组件来完成前台展示

    使用elementUI组件来完成前台展示,当然不是全部都用,有用到的时候,才用. 网址:https://element.eleme.cn/#/zh-CN 安装 cnpm i element-ui -S ...

  4. 填IP那个就算是接口式开发,这回随便填

    ///////////////////////////////////////////////////////////using namespace std; #include<stdlib.h ...

  5. 谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.net framework和.net core+

    前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦.或者已有的一些例子,至少我看到的很多案例,动态 ...

  6. EF MYSQL DB FIRST 出现2次数据库名

    环境:使用ADO设计器添加的数据库实体,运行时出现 :Table 'world.world.city' doesn't exist . world 是mysql的演示数据库. MySql.Data.E ...

  7. mysql windows 下配置可远程连接

    1.在防火墙入站规则里加入 3306  端口,3306 为你安装mysql 时的端口. 2.在mysql 命令行中输入: #应用mysql数据库use mysql;#将root用户可访问改成所有upd ...

  8. 时间戳,mysql 秒数,毫秒数与时间之间的相互转换

    时间戳,mysql 秒数,毫秒数与时间之间的相互转换 时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数.通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已 ...

  9. springboot项目编译时,使用自定义注解类找不到符号

    springboot项目编译时,使用自定义注解类找不到符号 Java项目编译时,使用自定义注解类找不到符号Spring-boot项目编辑器:idea问题:编译时找不到符号.项目中用到了自定义注解类.编 ...

  10. Opencompass笔记整理

    Smiling & Weeping ---- 山海自有归期,风雨自有相逢 大模型评测教程 随着人工智能技术的快速发展, 大规模预训练自然语言模型成为了研究热点和关注焦点.OpenAI于2018 ...