牛客周赛 Round 69 C-E

server/2024/12/2 10:43:40/

    C——仰望水面的歪

一、题目描述:

一看这个题目是不是觉得是物理问题,我也觉得是这样的,全反射我都快忘记了,结果发现他居然还能这样看,请看图片:

第一种情况:当目标点在小歪所在平面的上面得到的反射方向(3,3,8),这个8=(h-z)*2+z得到的。

第二种情况:当目标点在小歪所在平面的下面得到的反射方向(3,3,12),这个12=(h-z)*2+z得到的。

注意他说了得约分,得到约分后的结果———>于是你还要对他们求最大公约数。

代码如下:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
long long n,h;
long long i,j,k;int main(void){cin>>n>>h;while(n--){cin>>i>>j>>k;long long z=(h-k)*2+k;long long x=__gcd(z,__gcd(i,j));i/=x;j/=x;z/=x;cout<<i<<" "<<j<<" "<<z<<endl;}return 0;
}

D——小心火烛的歪

题目:

输入输出:

样例一:

输入:
2 2 1
00
01
11
10
输出:
1
1

样例二:

输入:
7 7 5
1110111
1111111
1100001
0101000
1100001
1111111
1110111
0001000
0000000
0000000
1000001
0000000
0000000
0001000
0000000
0000000
0011100
0000000
0011100
0000000
0000000
0000000
0000000
0000010
0000111
0000010
0000000
0000000
0000000
0000000
0010000
0010000
0010000
0000000
0000000
0000000
0000000
0010000
0010111
0010000
0000000
0000000输出:
4
1 2 3 4

思路:我还是选择用二进制的状况来描述选了哪几个计划,如果该选择能够让所有的非障碍地都燃放烟花,障碍地都不燃放烟花,那么我们就来选择最少数量的计划,那么怎么确定这个选择能够让所有非障碍地都燃放烟花,障碍地都不燃放烟花,我们肯定是得让我们的选择结合起来看是否与起始草地的状况刚好相反,但是因为看是否相反要分很多种情况,显得比较麻烦,于是我们就将起始的状况全部取反再进行判断,那么又引申出了下一个问题,就是我们怎么选中的所有计划进行融合,这个其实也挺好解决,就是用一个数组来记录,刚开始他全部都初始化为0,不断和计划取或|运算,这样最后得到的答案就是融合之后的选择。

具体代码如下:

#include <iostream>
using namespace std;const int N = 8;int n,m,q;
int a[N][N],b[N][N][N],c[N][N];bool check(int x){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){c[i][j]=0;}}for(int i=0;i<q;i++){if(x>>i&1){for(int j=1;j<=n;j++){for(int k=1;k<=m;k++){c[j][k]|=b[i+1][j][k];	//c[j][k]很容易就写错了,小心 }}}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]!=c[i][j]){return false;}}}return true;
}int main(void){cin>>n>>m>>q;char x;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>x;a[i][j]=x-'0';a[i][j]=1-a[i][j];}}for(int i=1;i<=q;i++){for(int j=1;j<=n;j++){for(int k=1;k<=m;k++){cin>>x;b[i][j][k]=x-'0';}}}int ans=1e7;for(int i=0;i<(1<<q);i++){if(check(i)){if(__builtin_popcount(i)<__builtin_popcount(ans)||ans==1e7){ans=i;}	}}if(ans==1e7){cout<<-1<<endl;} else{cout<<__builtin_popcount(ans)<<endl;for(int i=0;i<q;i++){if(ans>>i&1){cout<<i+1<<" ";}}cout<<endl;}return 0;
}

E——喜欢切数组的红

一看到这道题,其实我感觉是会的,但最后还是没过,我当时一直在想怎么判断他是不是正数,结果还是没想到,我看别人写的感觉很巧妙,我们一起来学习一下吧:

这里我先简单的解释一下:

  • num 变量:用于统计前缀和等于 sum / 3 的出现次数。

  • w[i] 数组的使用

    • 如果当前元素 a[i] 是正数(a[i] > 0),w[i] 将被设置为 num,代表当前 sum/3 的分割数量。
    • 如果当前元素是负数或零,保持 w[i] 为前一个值 w[i-1]。这意味着负数不对 num 的统计产生影响,巧妙地排除了负数的干扰。
  • 判断逻辑

    • 当 s[i] 等于 sum / 3 时,增加 num,表示找到一个可形成部分的前缀和。
    • 当 s[i] 等于 2 * (sum / 3) 时,根据当前 w[i] 的值(即正数出现的数量)增加到答案 ans,这表明可以用之前找到的 sum / 3 的部分数(num)来与当前部分结合形成完整的分割。

我们看具体实现代码吧!

//大师我悟了^_^卡哇哇
//算法jia四级jiajava 
#include <iostream> 
#include <algorithm>
using namespace std;const int N = 2e5+10;long long a[N],s[N],w[N];int main(void){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];s[i]=s[i-1]+a[i];}int sum=s[n];if(sum%3!=0){cout<<0<<endl;}else{long long num=0,ans=0;for(int i=1;i<=n;i++){//这个真挺难想到的哈哈if(a[i]>0){w[i]=num;}else{w[i]=w[i-1];}if(s[i]==sum/3){num++;}else if(s[i]==(sum/3)*2){ans+=w[i];}}cout<<ans<<endl;}return 0;
}

 果然很考验思维哈哈哈哈qwq  -_-   *_*

F还在想呢嘻嘻


http://www.ppmy.cn/server/146690.html

相关文章

LeetCode 动态规划 任意子数组和的绝对值的最大值

任意子数组和的绝对值的最大值 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 … numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组&#xff08;可能为空&#xff09;&#xff0c;并返回该 …

【Maven系列】深入解析 Maven 常用命令

前言 在当今的软件开发过程中&#xff0c;项目管理是至关重要的一环。项目管理包括了项目构建、依赖管理以及发布部署等诸多方面。而在Java生态系统中&#xff0c;Maven已经成为了最受欢迎的项目管理工具之一。Maven 是一套用于构建、依赖管理和项目管理的工具&#xff0c;主要…

Django Admin与Vue前后端分离开发实战教程

前言 本教程将详细介绍如何将Django Admin与Vue.js结合,实现一个既有完整后台管理功能,又能支持自定义前端页面的现代化系统。 一、环境准备 1. 创建虚拟环境 # 创建虚拟环境 python -m venv venv# Windows激活虚拟环境 venv\Scripts\activate# Linux/Mac激活虚拟环境 sou…

Python练习(1)

一:英文字符频率统计。编写一个程序&#xff0c;对给定字符串中出现的a到z字母频率进行分析&#xff0c;忽略大小写采用降序方式输出 from collections import Counter import string def analyze_frequency(input_string): # 将字符串转换为小写以忽略大小写 input_…

Oracle 数据库执行增删改查命令的原理与过程

摘要&#xff1a; 本文深入探讨当向 Oracle 数据库发送一个增删改查&#xff08;CRUD&#xff09;命令时&#xff0c;数据库内部的执行机制与详细过程。从用户发起命令开始&#xff0c;逐步剖析命令在 Oracle 数据库体系结构各组件中的流转、解析、优化以及执行路径&#xff0c…

Samba服务器常见问题处理

指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接&#xff0c;首先请断开所有现有的连接到网络共享的映射 解决方案 单击“开始”菜单&#xff0c;选择“运行…”。 在弹出的窗口中&#xff0c;输入cmd 进入命令行模式&#xff0c;并输入…

vue学习11.27

监视属性 watch: { isHot:{ handler(){ } } } handler当isHot发生改变时调用。 watch: {isHot: {handler(newValue, oldValue) {console.log(修改了, newValue, oldValue);}}} 有什么用吗&#xff1a;例如new和oldvalue差值过大&#xff0c;本例子就意味着温差过大&…

六、Python —— 函数

文章目录 一、函数基础1.1、编写函数1.2、调用函数1.3、形参和实参1.3.1、形参的初始化方式1.3.2、带默认值的形参 1.4、变量的作用域1.5、嵌套定义函数1.6、pass 语句 二、参数传递2.1、值传递2.2、引用传递 三、return 语句四、lambda 表达式五、函数递归 一、函数基础 Pytho…