Acwing——第 89 场周赛

news/2024/11/28 8:32:51/

题目链接

4803. 满足的数 简单
4804. 构造矩阵 中等
4805. 加减乘 困难

题目描述

4803. 满足的数

给定 n个不超过 5 的正整数 a1,a2,…,an

不妨设 S=a1+a2+…+an

请你统计,一共有多少个不同的整数 x 能够同时满足以下所有条件:

  • 1≤x≤51≤x≤51x5
  • (S+x)mod(n+1)≠1(S+x)mod(n+1)≠1(S+x)mod(n+1)=1输入格式第一行包含整数 n

输入格式

第一行包含整数 n

第二行包含 n个正整数 a1,a2,…,an

输出格式

一个整数,表示满足条件的 x的数量。

数据范围

  • 1≤n≤1001≤n≤1001n100
  • 1≤ai≤51≤a_i≤51ai5

输入样例1:

1
1

输出样例1:

3

输入样例2:

1
2

输出样例2:

2

输入样例3:

2
3 5

输出样例3:

3

时间复杂度:O(n)O(n)O(n)

代码:

#include<iostream>
#include<algorithm>using namespace std;const int N = 110;
int a[N];int main(){int n;cin>>n;int sum = 0;for(int i = 1;i <= n;i++){cin>>a[i];sum += a[i];}int ans = 0;for(int x = 1;x <= 5;x++){if((sum + x) % (n + 1) != 1) ans++;}cout<<ans<<endl;return 0;
}

4804. 构造矩阵

给定一个 mmmnnn 列的 01矩阵 B。

请你构造一个 mmmnnn 列的 01矩阵 A。

矩阵的行编号为 1∼m1∼m1m,列编号为 1∼n1∼n1n

BijB_{ij}Bij 表示矩阵 B 中第 i 行第 j 列的元素。

要求,构造的矩阵 A 满足,对于每一个 BijB_{ij}Bij

  • 如果 Bij=0B_{ij}=0Bij=0,则矩阵 A 中第 i 行的 nnn 个元素以及第 j 列的 mmm 个元素总共 n+mn+mn+m 个元素必须全都为 0。

  • 如果 Bij=1B_{ij}=1Bij=1,则矩阵 A 中第 i 行的 nnn 个元素以及第 j 列的 mmm 个元素总共 n+mn+mn+m 个元素不能全都为 0。

输入格式

第一行包含两个整数 m,nm,nm,n

接下来 mmm 行,每行包含 nnn 个整数 0 或 1,其中第 i 行第 j 列的整数表示 BijB_{ij}Bij

输出格式

如果不存在满足条件的矩阵 A,则输出一行 NO即可。

否则,第一行输出 YES,接下来 mmm 行,每行输出 nnn个整数,用来表示矩阵 A。

如果答案不唯一,则输出任意合理答案均可。

数据范围

  • 1≤m,n≤1001≤m,n≤1001m,n100

输入样例1:

2 2
1 0
0 0

输出样例1:

NO

输入样例2:

2 3
1 1 1
1 1 1

输出样例2:

YES
1 1 1
1 1 1

输入样例3:

2 3
0 1 0
1 1 1

输出样例3:

YES
0 0 0
0 1 0

分析:

我们先将整个数组初始化为全部是 1,我们直接先处理所有 Bij=0B_{ij} = 0Bij=0 的情况,将对应的行和列全部置为0。

接着我们再处理 Bij=1B_{ij} = 1Bij=1 的情况,对于其对应行 和 列的元素之和 如果等于0,就直接打印 NO返回;否则最后打印 YES,再打印数组

时间复杂度:O(n2)O(n^2)O(n2)

代码:

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N = 110;int n,m;
int a[N][N],b[N][N];//对应行 和 列都更新为0
void update(int x,int y){for(int j = 1;j <= n;j++) b[x][j] = 0;for(int i = 1;i <= m;i++) b[i][y] = 0;
}//获取对应行 和 列的元素之和
int getsum(int x,int y){int sum = 0;for(int j = 1;j <= n;j++) sum += b[x][j];for(int i = 1;i <= m;i++) sum += b[i][y];//因为 + 了两次 b[x][y],所以要减一次return sum - b[x][y];
}int main(){cin>>m>>n;for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++) {cin>>a[i][j];b[i][j] = 1;}}for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){if(!a[i][j]) update(i,j);}}for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){if(a[i][j]){int sum = getsum(i,j);if(sum == 0){puts("NO");return 0;}}}}puts("YES");for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){cout<<b[i][j]<<" ";}puts("");}return 0;
}

4805. 加减乘

规定两种数字操作:

  • 加减操作,将数字加 1 或减 1,代价为 x
  • 乘法操作,将数字乘 2,代价为 y

每种操作的使用次数不限。

请你计算,通过上述操作,将 0 变为 n,所需花费的最小代价

输入格式

共一行,包含三个整数 n,x,yn,x,yn,x,y

输出格式

一个整数,表示最小代价。

数据范围

  • 1≤n≤107,1≤x,y≤1091≤n≤10^7,1≤x,y≤10^91n1071x,y109

输入样例1:

8 1 1

输出样例1:

4

输入样例2:

2 3
1 1 1
1 1 1

输出样例2:

8 1 10

输入样例3:

8

分析:

本题使用 动态规划 求解。我们定义 f(i)f(i)f(i) 是从 0 ~ n的最小代价。

状态转移:

  • f(i)=f(i−1)+xf(i) = f(i-1) + xf(i)=f(i1)+x
  • i是偶数时,f(i)=min(f(i),f(i/2)+y)f(i) = min( f(i) , f(i/2) + y )f(i)=min(f(i),f(i/2)+y)
  • f(i−1)=min(f(i−1),f(i)+x)f(i-1) = min( f(i - 1) , f(i) + x)f(i1)=min(f(i1),f(i)+x) (因为 f(i−1)f(i-1)f(i1) 可能还会由 f(i)f(i)f(i) 更新而来,所以要等 f(i)f(i)f(i) 先更新完毕)

时间复杂度:O(n)O(n)O(n)

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
using LL = long long;int n,x,y;const int N = 1e7+10;
//用 long long 防止溢出
LL f[N];int main(){cin>>n>>x>>y;memset(f,0,sizeof f); //之所以是 1 ~ n + 1 ,是因为当 i = n 时,f[n] 还可能会由 f[n+1] + x 更新而来 for(int i = 1;i <= n+1;i++){f[i] = f[i-1] + x;if(i % 2 == 0) f[i] = min(f[i],f[i/2] + y);f[i-1] = min(f[i-1],f[i] + x);}cout<<f[n]<<endl;return 0;}

http://www.ppmy.cn/news/22204.html

相关文章

GcExcel-JAVA 6.0.3-Documents for Excel

在更短的时间内生成 Excel 电子表格&#xff0c;不依赖于 Excel&#xff01; 在任何应用程序中转换、计算、格式化和解析电子表格。快速高效&#xff1a;其轻巧的尺寸意味着 Documents for Excel 针对快速处理大型 Excel 文档进行了优化使用适用于 Windows、Linux 和 Mac 的 J…

【数据结构(5)】2.3 线性表的类型定义

文章目录1. 线性表的抽象数据类型定义2. 线性表的基本操作1. 线性表的抽象数据类型定义 数据对象&#xff1a;就是一些元素&#xff0c;元素的个数大于等于 0。数据关系&#xff1a;ai-1 是 ai 的前驱&#xff0c;同时 ai 是 ai-1 的后继&#xff0c;他们都属于集合 D 2. 线性…

第六章——CSS元素显示模式(网页布局),块元素、行内元素、行内块元素

文章目录6.1 块元素6.1.1 块级元素的特点6.2 行内元素6.3 行内块元素6.4 元素显示模式总结6.5 元素显示模式转换选择不同的标签元素&#xff0c;以更好的布局我们网页的整体结构元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;比如自己占一行…

若依框架 -------- vue3+element-plus(三)

后端管理系统&#xff0c;前后端分离的框架若依管理后台&#xff0c;来看下vue3element-plus版本。 静态文本 assets assets 静态img、svg、style main.js import /assets/styles/index.scss // global css 引入了全局样式 组件 components breadcrumb 面包屑 从路由中获取…

【C++】多态——实现、重写、抽象类、多态原理

文章目录一、多态概念二、多态定义及实现三、析构函数的重写四、重载、重写、重定义总结五、C11 override 和 final六、抽象类七、多态原理八、单继承和多继承关系的虚函数表1.单继承虚函数表2.多继承虚函数表3.菱形继承、菱形虚拟继承九、经典题目十、总结一、多态概念 多态的…

「自控元件及线路」1.2 电机中的磁性材料与磁场

本节介绍磁性材料的性能、分类 本节介绍电机中永磁材料的工作曲线 本节介绍电机中主磁极、电枢的磁场及电枢反应 文章目录磁性材料的基本概念磁性材料的磁性能高导磁性 饱和性 磁滞性 非线性温度特性 电阻率特性铁耗磁性材料的分类电机中的永磁材料永磁电机概述永磁材料的磁性能…

TCP协议面试灵魂12 问(三)

等待2MSL的意义 如果不等待会怎样&#xff1f; 如果不等待&#xff0c;客户端直接跑路&#xff0c;当服务端还有很多数据包要给客户端发&#xff0c;且还在路上的时候&#xff0c;若客户端的端口此时刚好被新的应用占用&#xff0c;那么就接收到了无用数据包&#xff0c;造成…

jquery方法学习及案例

JQ框架入手须知封装方法学习及应用插件&#xff08;白嫖超好用&#xff09;总结案例推荐网课链接入手须知 1.进官网点3.6版本 2.复制全部代码 3.建立文档名为jquery.min.js&#xff0c;粘贴代码 &#xff08;用的时候同cssjs引入&#xff09; 封装方法学习及应用 介绍联系…