J - Playing in a Casino

news2024/11/15 18:29:17

 

 

题意:相当于比大小的赌博计算赌徒一共需要支出多少赌资

比大小的规则很简单,是

在这个游戏中,有一个套牌由n卡。每张卡都有m数字写在上面。每个n玩家从一副牌中只收到一张牌。

然后所有玩家成对玩,每对玩家只玩一次。因此,例如,如果总共有四个玩家,则进行六场比赛:第一场比赛对第二场比赛,第一场比赛对第三场比赛,第一场比赛对第四场比赛,第二场比赛对第三场比赛,第二场比赛对第四场比赛,第三场比赛对第四场比赛。

 解:

一开始其实放纵自己用了一个铁会时间超限的方法,一分钟写出来了,但是智能过样例,第三个test就卡住了,就是输入时就进行相减了

错误示范:

#include<bits/stdc++.h>
using namespace std;
int t,n,m,u,ans;
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n>>m;
        vector<int> a[30];
        ans=0;
        //输入第一行
        for(int j=0; j<m; j++)
        {
            cin>>u;
            a[0].push_back(u);
        }
        //后续
        for(int i=1; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                cin>>u;
                a[i].push_back(u);
                for(int k=0; k<i; k++)
                {
                    ans+=abs(a[k][j]-a[i][j]);
                }
            }
        }
        cout<<ans<<endl;

    }
    return 0;
}

由于绝对值这个东西不确定,我们很讨厌,所以我们可以通过排序接触正负号的不确定性,使得我们算出的值符号被我们绝对掌握!

注意,由于列向相减和横向相减可不是一样的东西

 所以我们要进行行列置换,我们可以通过一个二维数组在输入时就可以达到该目的

(注意这里输入完可以进行一个特判,如果只有一行数据那么没有进行博弈的其他对象,赌资将会是0,n=1时,可以直接输出0然后continue进行下一次判断

 

回到前面,如果n>1,接下来要对每列进行排序

 

 排序之后我们可以发现规律:

拿这一列排序后为 1,2,3,4,5举例

由于顺序已经拍好了,1-2的绝对值等同于2-1,所以1-后面的值的绝对值等同于(2+3+4+5)-4*1

同理,2-后面的值等同于(3+4+5)-3*2

后面同理,且这样子我们可以保证是正数。

(设i从0开始)

那么通过找规律,可以发现改列最后的赌资就是a【i】*i - a【i】*(n-i-1)即a【i】*(2i-n+1)

把每一列的赌资算出来之后都加到ans中最终就能得出答案。

这道题错了很多次,主要原因一个是比较少使用vector,一个是没养成注意精度范围的习惯

首先,vector的定义可以直接带入变量开辟空间

vector<vector<int>>v(n,vector<int>(m))

因为题目说n和m在1到3e5之间且n*m小于3e5

3e5是不大的,但是如果之间vector<vector<int>>v(3e5,vector<int>(3e5)),那么开辟的空间大小就是9e10,爆掉了,所以要用输入的n和m来开辟空间。

(注意由于进行了行列转换,这里的一维要用m,二维用n)

其次,当定义vector时指定了大小,那么它就相当于这个大小的数组了,赋值时直接使用a【i】【j】=xxx就行,不可以a.push_back(xxx),因为push_back是在原来的基础上再开辟空间添加数据,而我们已经开辟好了空间,原本的基础上就是m*n的大小了(这就是为什么输入时直接cin>>a[j][i]而不用push_back)

最后,注意精度范围,数值大小在1到1e6之间,大范围数值涉及到乘法时就需要注意int还够不够充裕了,这里的ans涉及了,这里的i指的是1~n,n最大3e5,a【i】【j】最大1e6,一相乘就变成了3e11,所以必须用long long int,而vector中的数值也需要用long long int,对范围做判断即可,不做再多解释了。

所以这道题:

#include<bits/stdc++.h>
using namespace std;
int t,n,m,u;
long long int ans;
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n>>m;
        vector<vector<long long int>> a(m,vector<long long int>(n));
        ans=0;
        //输入
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                cin>>a[j][i];
            }
        }
        //特判
        if(n==1){
            cout<<"0"<<endl;
            continue;
        }
        for(int j=0;j<m;j++){
            sort(a[j].begin(),a[j].end());
            for(int i=0;i<n;i++){
                ans+=a[j][i]*(2*i+1-n);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

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

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

相关文章

SpringBoot 中 4 种常用的数据库访问方式

SpringBoot 中常用的数据库访问方式主要有以下几种&#xff1a; SpringBoot 是一个非常流行的 Java 开发框架&#xff0c;它提供了大量的开箱即用的功能&#xff0c;包括数据库访问。在开发过程中&#xff0c;我们经常需要使用数据库&#xff0c;因此选择一种合适的数据库访问…

Day2_vue集成elementUI完善布局

上一节&#xff0c;实现了从O到vue页面主体框架的搭建&#xff0c;这一节补充完善搜索框&#xff1b;新增、删除、导入、导出等按钮&#xff1b;表格设置&#xff1b;分页&#xff1b;面包屑的实现&#xff01; 目录 搜索框 新增删除、导入、导出按钮 表格设置 设置边框&a…

记录安装Nodejs和HBuilderX搭建、部署微信小程序开发环境(一)

文章目录 1 前言2 注册小程序账号3 安装微信开发者工具4 安装Nodejs和HBuilderX4.1 windows用户安装Nodejs4.2 macos/linux用户安装Nodejs4.3 安装HBuilder X 5 创建项目5.1 新建一个项目5.2 进行基本配置 6 HBuilderX同步微信开发者工具6.1 打开服务端口6.2 调用微信开发者工具…

PHP初识

php简介 PHP全称超文本预处理语言&#xff0c;是在服务器端执行的脚本语言&#xff0c;是一种简单的&#xff0c;面向对象的开源脚本语言PHP脚本可以让Web开发人员快速的书写动态生成的网页 PHP脚本以<?php开始&#xff0c;以?>结束 <?php echo "hello world&…

Visual Studio调试代码教学

本篇博客主要讲解程序员最应该掌握的技能之一——调试。我个人认为&#xff0c;学习编程&#xff0c;有2件事情非常重要&#xff0c;一是画图&#xff0c;一是调试。下面我会以Visual Studio 2022为例&#xff08;VS的其他版本大同小异&#xff09;&#xff0c;演示如何调试一个…

测试开发实战项目 | 搭建Pytest接口自动化框架

一、预研背景 目前系统研发多为前后端分离&#xff0c;当后端接口研发完成后&#xff0c;可以不依赖前端界面通过接口测试提前发现问题并解决。同时由于软件迭代周期不断缩短&#xff0c;开发新功能后又担心影响原有功能&#xff0c;可以通过接口自动化进行原有功能快速回归测…

spi,iic,uart,pcie区别

一、spi SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口&#xff0c;是同步传输协议&#xff0c;特征是&#xff1a;设备有主机&#xff08;master&#xff09;和从机&#xff08;slave&#xff09;的区分&#xff0c;主机在通讯时发送…

分治与减治算法实验: 排序中减治法的程序设计

目录 前言 实验内容 实验目的 实验分析 实验过程 流程演示 写出伪代码 实验代码 代码详解 运行结果 总结 前言 本文介绍了算法实验排序中减治法的程序设计。减治法是一种常用的算法设计技术&#xff0c;它通过减少问题的规模来求解问题。减治法可以应用于排序问题&…

mysql数据库自动备份

前言 服务器中数据库的数据是最重要的东西,如果因为某些情况导致数据库数据错误,数据错乱或数据库崩溃,这时一定要及时的修复,但如果数据丢失或数据没法用了,这时就要回滚数据了,而这时就需要我们经常的备份数据库的数据 正文 一般别人都会推荐使用Navicat来备份和连接数据库…

Kafka时间轮(TimerWheel)--算法简介

一、简介 一个简单的时间轮是一个定时器任务桶的循环列表。 让u作为时间单位。尺寸为n的时间轮有n个桶&#xff0c;可以在n*u的时间间隔内保存定时器任务。每个bucket保存属于相应时间范围的计时器任务。 在开始时&#xff0c; 第一个桶保存[0&#xff0c;u&#xff09;的任务…

第7章 “字典”

1.字典简介 字典是什么&#xff1f; 解答&#xff1a;与集合类似&#xff0c;也是一种存储唯一值的数据结构&#xff0c;但它是以键值对的形式来存储。(键值对是最重要的特性)在Es6中新增了字典&#xff0c;名为Map字典的常用操作&#xff1a;增删改查 const map new Map()/…

使用PY003基于外部中断+定时器的方式实现NEC红外解码

写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的&#xff0c;找了很多帖子有看到用外部中断下降沿判断&#xff08;但可惜判定数据的方式是while在外部中断里面死等的&#xff09;&#xff0c;有看到用100us定时器定时刷来判断&#xff0c;感觉都不太适合用在我这个工…

基于MATLAB实现WSN(无线传感器网络)的LEACH(低能耗自适应集群层次结构)(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 低能耗自适应集群层次结构&#xff08;“LEACH”&#xff09;是一种基于 TDMA 的 MAC 协议&#xff0c;它与无线传感器网络 &a…

[2018.09.25][Sourceinsight]4.0配置

1 字体放大 (1)panel fonts: option,preference,colors&font (2)code fonts: option,file type options 2 修改默认字体 Alt y 3 显示行号 点击菜单栏View->Line Numbers 4 破解 https://blog.csdn.net/biubiuibiu/article/details/78044232 5 全局搜索字…

在Spring Boot微服务使用knife4j发布后端API接口

记录&#xff1a;422 场景&#xff1a;在Spring Boot微服务上&#xff0c;应用knife4j发布后端API接口&#xff0c;辅助开发与调试。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,knife4j-3.0.3,springfox-swagger2-3.0.0。 Knife4j: 是一个集Swagger2 和 OpenAPI3为一体的增…

第三十二篇,记一次Windows下Qt使用boost的经历

Win10系统 Qt版本如下所示 Qt中使用的编译器是MinGW&#xff0c;如下图 boost版本是1.82.0 好的&#xff0c;描述一下过程&#xff1a; 按这个教程下载、编译boost&#xff0c;在boost的目录下生成了stage/lib/目录&#xff0c;然后加入到Qt工程里&#xff0c;主要是include目…

win10安装Anaconda,配置Pytorch环境

一、安装Anaconda Anaconda实际上是一个包管理器&#xff0c;可以理解为一个工具。Anaconda自带Python&#xff08;选中版本&#xff09;解释器以及其他一些数据分析与挖掘需要的模块而无需用户手动添加这些常用模块&#xff08;安装模块会出现各种错误&#xff09;。早期学Pyt…

Django个性化推荐系统,以电影为例

背景 随着科学技术发展&#xff0c;电脑已成为人们生活中必不可少的生活办公工具&#xff0c;在这样的背景下&#xff0c;网络技术被应用到各个方面&#xff0c;为了提高办公生活效率&#xff0c;网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。电影…

flask+opencv:实时视频直播推流平台Demo

简介&#xff1a;推流&#xff0c;指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。网上调查、对话访谈、在线培训等内容现场发布到互联网上。利用互联网的直观、快速&#xff0c;表现形式好、内容丰富、交互性强、地域不受限制、受…

华为OD机试真题(Java),猴子爬山(100%通过+复盘思路)

一、题目描述 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a; 每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 二、输入描述 输入只有一个整数N&…