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. 一文带你理解透MyBatis源码

    本文分享自华为云社区<一文彻底吃透MyBatis源码!!>,作者:冰 河. 写在前面 随着互联网的发展,越来越多的公司摒弃了Hibernate,而选择拥抱了MyBatis.而且,很多大厂在 ...

  2. umask永久修改用户创建文件权限

    Linux里永久设置用户创建文件权限的配置文件是/etc/profile.可以在该文件中添加umask命令来设置默认权限.具体操作步骤如下: 打开/etc/profile文件:sudo vi /etc ...

  3. Linux进程间通信-管道(pipe)

    本系列文章主要是学习记录Linux下进程间通信的方式. 常用的进程间通信方式:管道.FIFO.消息队列.信号量以及共享存储. 参考文档:<UNIX环境高级编程(第三版)> 参考视频:Lin ...

  4. k8s组件和网络插件挂掉,演示已有的pod是否正常运行

    环境 03 master ,05 06是node [root@mcwk8s03 mcwtest]# kubectl get nodes -o wide NAME STATUS ROLES AGE VE ...

  5. 后端返回html字符串 样式覆盖全局必须用 iframe嵌套显示才行

    后端返回html字符串 样式覆盖全局必须用 iframe嵌套显示才行 $.axios({          method: "POST",          url: progre ...

  6. react组件传值(props[只读属性]) 函数组件

    组件间传值,在React中是通过只读属性 props 来完成数据传递的. props:接受任意的入参,并返回用于描述页面展示内容的 React 元素. function Cmp1(props) { r ...

  7. HDFS 常用操作命令

    HDFS 文件操作命令 注,其实常用命令不用网上搜,和linux下的命令很类似,触类旁通,直接在linux 上 hadoop fs 看一下就行了,不需要刻意去记 我把 linux 上的 help 列举 ...

  8. 使用shell脚本在Linux中管理Java应用程序

    目录 前言 一.目录结构 二.脚本实现 1. 脚本内容 2. 使用说明 2.1 配置脚本 2.2 脚本部署 2.3 操作你的Java应用 总结 前言 在日常开发和运维工作中,管理基于Java的应用程序 ...

  9. 彻底解决IDEA Jrebel 错误找不到口令文件的问题

    本来我的Jrebel也是好用的,突然就变成了这个样子,网上针对这个问题有很多帖子,但是每次新建项目后我都需要去解决一下这个问题,这我不能忍,经过一整天的百度和测试终于找到了原因并解决这个问题,伸手党直 ...

  10. 高级前端开发需要知道的 25 个 JavaScript 单行代码

    1. 不使用临时变量来交换变量的值 例如我们想要将 a 于 b 的值交换 let a = 1, b = 2; // 交换值 [a, b] = [b, a]; // 结果: a = 2, b = 1 这 ...