(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(3)

news2024/9/22 17:23:29

1005 Out of Control

先将序列a升序,然后离散化

比如说序列a为1000 1000 500 200 10,然后升序后为10 200 500 1000 1000,映射到从1开始的数,为1 2 3 4 4,此即为前缀最大值序列,比如说5 3 4 6 7的前缀最大值序列为5 5 5 6 7

动态规划

f[i][j]表示长度为i的前缀最大值序列中,j为最大元素值的最大方案数 

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#include<cstdio>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=3010,mod=1e9+7;
int a[N],b[N];
int f[N][N];
int n;
void solve()
{
    cin>>n;
    memset(f,0,sizeof f); 
    for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
    sort(b+1,b+1+n);
    int m=0;
    for(int i=1;i<=n;i++){
        if(i==1||b[i]>b[i-1]) b[++m]=b[i];//去重
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+m,a[i])-b;//离散化
    for(int i=1;i<=m;i++){
        f[1][i]=1;
    }
    cout<<m<<endl;
    for(int i=2;i<=n;i++){
        int sum=0,ans=0;
        if(a[i-1]<a[i]) (sum+=f[i-1][a[i-1]])%=mod;
        for(int j=a[i];j<=m;j++){
            (sum+=f[i-1][j])%=mod;
            f[i][j]=sum;
            (ans+=sum)%=mod;
        }
        cout<<ans<<endl;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

1011 8-bit Zoom

参考JorbanS

可以先单独考虑z等于100和200的情况

然后判断n*z/100是不是一个整数,可以先令m=n*z/100(下取整),然后再判断m*100是否等于n*z

n*n代表原矩阵的大小,m*m代表放大后的矩阵大小

先求n和m的最大公约数d,表示横着最少分成d块,竖着最少分成d块,也就是说将整个矩阵最少d*d块,每一小块中的字母必须完全相同,否则是放大不了的

nn为每一小块的边长

 

如上图,n为4,m为6,它们的最大公约数为2,所以将其分成2*2即4块,每一小块上的字母都得完全相同

所以开一个ans二维数组,将每一小块的最左上角的字母作为其值,将行数是第几个块,以及列数是第几个块作为ans的第一维和第二维,如果每一小块上的字母不完全相同,那么直接输出error

最后需要输出,输出m行,列需要d块,每一个块有mm个字母

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#define endl '\n'
#define int long long
using namespace std;
//typedef pair<int,int>PII;
typedef long long ll;
const int N=110;
char s[N][N];
char ans[N][N];
int n,z;
int gcd(int a,int b){
    if(b==0) return a;
    return gcd(b,a%b);
}
void solve()
{
    cin>>n>>z;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>s[i][j];
        }
    }
    if(z==100){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cout<<s[i][j];
            }
            cout<<endl;
        }
        return;
    }
    if(z==200){
        for(int i=0;i<2*n;i++){
            for(int j=0;j<n;j++){
                cout<<s[i/2][j]<<s[i/2][j];
            }
            cout<<endl;
        }
        return;
    }
    int m=n*z/100;
    if(m*100!=n*z){
        cout<<"error"<<endl;
        return;
    }
    int d=gcd(n,m);
    int nn=n/d;
    int mm=m/d;
    for(int i=0;i<n;i+=nn){
        for(int j=0;j<n;j+=nn){
            ans[i/nn][j/nn]=s[i][j];
            for(int p=0;p<nn;p++){
                for(int q=0;q<nn;q++){
                    if(s[i+p][j+q]!=ans[i/nn][j/nn]){
                        cout<<"error"<<endl;
                        return;
                    }
                }
            }
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<d;j++){
            for(int k=0;k<mm;k++){
                cout<<ans[i/mm][j];
            }
        }
        cout<<endl;
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

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

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

相关文章

leetcode 1005. K 次取反后最大化的数组和

2023.7.30 本题思路如下&#xff1a; 按绝对值大小将数组进行从大到小的排序。遍历数组&#xff0c;若当前元素为负数则修改其符号。遍历完之后&#xff0c;判断k是否为奇数&#xff0c;若为奇数&#xff0c;则还需要修改一次符号&#xff0c;此时修改绝对值最小的那个数的符号…

opencv顺时针,逆时针旋转视频并保存视频

原视频 代码 import cv2# 打开视频文件 video cv2.VideoCapture(inference/video/lianzhang.mp4)# 获取原视频的宽度和高度 width int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建视频编写器并设置输出视频参数 fourcc …

无涯教程-jQuery - Dropable移动函数

Drop-able 功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用可放置功能。 Drop able - 语法 $( "#droppable" ).droppable(); Drop able - 示例 以下是一个简单的示例&#xff0c;显示了drop-able的用法- <html><head><title>…

【数理知识】刚体 rigid body 及刚体的运动

文章目录 1 刚体2 刚体一般运动1 平移运动2 旋转运动 Ref 1 刚体 刚体是指在运动中和受力作用后&#xff0c;形状和大小不变&#xff0c;而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的&#xff0c;只是一种理想模型&#xff0c;因为任何物体在受力作用后&#…

Java ~ Collection/Executor ~ DelayQueue【总结】

前言 文章 相关系列&#xff1a;《Java ~ Collection【目录】》&#xff08;持续更新&#xff09;相关系列&#xff1a;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;相关系列&#xff1a;《Java ~ Collection/Executor ~ DelayQueue【源码】》&#xff08;学…

【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析

文章目录 前言导入库![在这里插入图片描述](https://img-blog.csdnimg.cn/05ab496a2ac045e6ad0b175292462fac.png)发送请求给指定网址伪装自己发送请求并获取响应设置编码解析HTML并获取结果创建CSV文件并写入数据打印输出结果加载自定义字体绘制折线图完整代码 结束语 前言 本…

(学习笔记)matplotlib.pyplot模块下基本画图函数的整理

matplotlib版本&#xff1a;3.7.1 python版本&#xff1a;3.10.12 基本函数 matplotlib版本&#xff1a;3.7.1python版本&#xff1a;3.10.12 1. plt.plot()函数1.1 plt.plot(x, y)1.2 plt.plot(x, y, **kwargs) 2. plt.xlable(), plt.ylable()3. plt.title()4. plt.show()5.p…

Pytorch(二)

一、分类任务 构建分类网络模型 必须继承nn.Module且在其构造函数中需调用nn.Module的构造函数无需写反向传播函数&#xff0c;nn.Module能够利用autograd自动实现反向传播Module中的可学习参数可以通过named_parameters()返回迭代器 from torch import nn import torch.nn.f…

如何注册Ddns域名?用快解析新手也可以轻松搞定!

对于每一个上网的朋友来说&#xff0c;如果平时经常需要访问外网&#xff0c;就需要用到Ddns域名了&#xff0c;不过这个域名的注册比较麻烦&#xff0c;也没有那么容易&#xff0c;因此很多朋友对此也有很多的疑惑。那么&#xff0c;Ddns域名注册怎么操作呢&#xff1f;其实利…

直流电机的系统辨识——LZW

前言 本文采用基于最小二乘的线性辨识方法和基于Nonlinear ARX模型的非线性辨识方法对图1所示的直流电机进行系统辨识&#xff0c;并分别设计H∞控制器&#xff0c;分析比较控制效果。 图1 实验器材 目录 前言一、数据采集二、系统辨识1.最小二乘法&#xff08;线性辨识&#…

认识自动化测试

目录 简述 手动测试 自动化测试 测试类型 单元测试 集成测试 端到端测试&#xff08;E2E&#xff09; 快照测试 测试覆盖率 代码覆盖率 需求覆盖率 总结 自动化测试有以下几个概念&#xff1a; 单元测试集成测试E2E 测试快照测试测试覆盖率TDD 以及 BDD 等 简述 …

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多&#xff0c;新手可以看下 《【MQTT】Esp32数据上传采集&#xff1a;最新mqtt插件&#xff08;支…

GAMES101 笔记 Lecture13 光线追踪1

目录 Why Ray Tracing?(为什么需要光线追踪&#xff1f;)Basic Ray Tracing Algorithm(基础的光线追踪算法)Ray Casting(光线的投射)Generating Eye Rays(生成Eye Rays) Recursive(Whitted-Styled) Ray Tracing Ray-Surface Intersection(光线和平面的交点)Ray Rquation(射线方…

盘点:查快递教程

在“寄快递”成为常态的当下&#xff0c;如何快速进行物流信息查询&#xff0c;是收寄人所关心的问题。在回答这个问题之前&#xff0c;首先我们要知道&#xff0c;物流信息查询&#xff0c;有哪些方法&#xff1f; 1、官网单号查询 知道物流公司和单号的情况下&#xff0c;直…

管理类联考——写作——论说文——实战篇——标题篇

角度3——4种材料类型、4个立意对象、5种写作态度 经过审题立意后&#xff0c;我们要根据我们的立意&#xff0c;确定一个主题&#xff0c;这个主题必须通过文章的标题直接表达出来。 标题的基本要求 主题清晰&#xff0c;态度明确 第一&#xff0c;阅卷人看到一篇论说文的标…

【动态规划part13】| 300.最长递增子序列、674.最长连续递增序列、718.最长重复数组

目录 &#x1f388;LeetCode 300.最长递增子序列 &#x1f388;LeetCode 674. 最长连续递增序列 &#x1f388;LeetCode 718. 最长重复子数组 &#x1f388;LeetCode 300.最长递增子序列 链接&#xff1a;300.最长递增子序列 给你一个整数数组 nums &#xff0c;找到其…

camund——2、cancelActivityInstance()与多实例下getActiveActivityIds()获取不到当前任务的节点。

在多实例&#xff08;会签或者并行网关&#xff09;时如果使用以下代码来进行驳回时&#xff0c;使用 **List activeActivityIds runtimeService.getActiveActivityIds(instanceId);**来获取当前活动的节点会出现获取不到情况。 runtimeService.createProcessInstanceModific…

基于Linux操作系统中的MySQL用户权限管理(三十二)

用户权限管理 目录 一、概述 二、用户权限类型 1、ALL PRIVILEGES 2、CREATE 3、DROP 4、SELECT 5、INSERT 6、UPDATE 7、DELETE 8、INDEX 9、ALTER 10、CREATE VIEW和CREATE ROUTINE 11、SHUTDOWN 12、GRANT OPTION 三、用户赋权 四、权限删除 五、用户删除 …

RTThread实际开发问题统计

文章目录 开启DMA rx中断&#xff0c;数据帧总是接收不全就产生中断&#xff1f;PB3/PB4等和JTAG复用的管脚不能使用&#xff1f;uart使用DMA传输&#xff0c;调用close再open之后就接收不到数据了&#xff1f; 开启DMA rx中断&#xff0c;数据帧总是接收不全就产生中断&#x…

C语言指针应该这么学?

数组名的意义&#xff1a; 1. sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。 2. &数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表示首元素的地址。 根据以上数…