首页 > 其他分享 >牛客练习赛46

牛客练习赛46

时间:2023-02-17 17:34:35浏览次数:51  
标签:练习赛 r1 46 LL 矩阵 奕奕 牛客 int include


 

题目描述

奕奕的几何很差,然而奕奕并不承认,所以华华扔给奕奕一道题目。如图:

牛客练习赛46_数组

已知大半圆的半径等于两个小半圆半径之和。若给出红色部分的面积,那么大圆的半径最小是多少呢?反正奕奕是不会的,所以现在请你回答。

输入描述:


输入一个正整数s表示红色部分的面积。 1<=s<=1e9


输出描述:


输出一个小数表示大圆的最小半径,保留三位小数


示例1

输入

复制


2


输出

复制


1.596


示例2

输入

复制


3


输出

复制


1.954


设大半圆半径为r,两个小半圆的半径为r1,r2。

则有:2*s=π*(r*r-r1*r1-r2*r2) ①

r=r1+r2 ②

两式联立得r=r1+s/(π*r1)

可以把r1看作自变量,r看作因变量,对r1求导,即可得r的最小值。

#include <iostream>
#include <cstdio>
#include <cmath>
#define pi 3.141592654
using namespace std ;

int main(){
int s ;
cin >> s ;
double ans =sqrt((4.0*s)/pi ) ;
printf("%.3f",ans);
return 0 ;
}

链接:​​https://ac.nowcoder.com/acm/contest/894/B​​​ 来源:牛客网
 

题目描述

华华用数组a和数组b合成了矩阵c。其中a数组长度为n,b数组长度为m,c是n行m列的矩阵,且c[i][j]=a[i]*b[j]。定义矩阵的权值为矩阵中所有元素的和。然后他想把矩阵送给奕奕。然而他怕奕奕不喜欢。若矩阵的权值小于L,奕奕会讨厌它,因为奕奕不喜欢太小的数字。若矩阵的权值大于R,奕奕会生气因为奕奕不认识比R大的数字。所以奕奕只喜欢权值大于等于L并且小于等于R的矩阵。还好华华学过acm,他马上想到可以送奕奕一个子矩阵,并且他立马写程序从c矩阵中找出了所有奕奕喜欢的子矩阵。你只需要帮他算算这样的子矩阵有多少个即可。

输入描述:


第一行输入n,m,L,R。 第二行n个数表示a数组 第三行m个数表示b数组 1<=n,m<=1000,1<=L<=R<=1e18 1<=a[i],b[i]<=1e6


输出描述:


输出一个数表示子矩阵的个数


示例1

输入

复制


3 3 3 8 3 2 3 2 3 1


输出

复制


10


 

B:

设sum_a为a的前缀和,sum_b为b的前缀和。则以(x1,y1)为左上角,以(x2,y2)为右下角的矩阵的权值为(sum_a[x2]-sum_a[x1-1])*(sum_b[y2]-sum_b[y1-1]),其中要满足x1<=x2,y1<=y2。x1,x2的选择与y1,y2的选择相互独立。可以预处理所有y1,y2的组合,然后排序。接下来枚举x1,x2,对y二分即可。复杂度n^2*log(m^2)

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#pragma GCC optimize(2)
#include <cmath>
#define pi 3.141592654
using namespace std ;
const int MAX = 1005 ;
typedef long long LL ;
int n , m , len ;
int a[MAX] ,b[MAX] ;
int c[MAX*MAX] ;
LL work(LL limit){
LL id = 0 ;
int l = 1 ,r =len ;
while(l<=r){
int mid = (l+r)/2 ;
if(c[mid] <=limit) {
id = mid ;
l = mid + 1 ;
}
else
r = mid -1 ;
}
return id ;
}
LL cal(LL limit){
LL ans = 0 ;
for(int i = 1 ; i<=n ; i++ ) {
for(int j =1 ; j<=i ; j++ ) {
LL x = a[i] - a[j-1] ;

ans +=work(limit/x) ;
}

}
return ans ;
}
int main()
{
LL L ,R;
scanf("%d%d%lld%lld",&n,&m,&L,&R);
for(int i = 1 ; i<=n ; i++ ) {
int x ;
cin >>x ;
a[i]=a[i-1]+x ;
}
for(int i = 1 ; i<=m ; i++){
int x ;
cin >>x ;
b[i] = b[i-1]+x ;
for(int j = 1 ;j<=i; j++ ) {
c[++len] = b[i]-b[j-1] ;
}
}
sort(c+1,c+1+len) ;
// for(int i = 1 ; i<=len ; i++ )cout<<c[i]<<" " ;
// cout<<endl;
// cout<<cal(R) <<endl ;
// cout<<cal(L-1) <<endl ;
printf("%lld\n",cal(R)-cal(L-1)) ;
return 0;
}

 

标签:练习赛,r1,46,LL,矩阵,奕奕,牛客,int,include
From: https://blog.51cto.com/u_15970235/6064427

相关文章

  • 【牛客网】字符串分隔
    题目描述•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(每个字符串......
  • 【牛客网】明明的随机数
    题目描述明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。数据......
  • 【牛客网】计算某字符的出现次数
    题目描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)数据范围:1≤n≤1000输入描......
  • 【牛客网】字符串的最后一个单词的长度
    题目描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出......
  • 解决 1146 - Table ‘performance_schema.session_variables’ doesn’t exist
    C:\Users\Administrator>cdC:\ProgramFiles\MySQL\MySQLServer5.7\bin输入指令mysql_upgrade-uroot-p--force这是网上的教程,但是我自己在尝试的时候出现了以下......
  • 牛客小白月赛12 -- E 华华给月月准备礼物 (二分)
     题目描述二月中旬虐狗节前夕,华华决定给月月准备一份礼物。为了搭建礼物的底座,华华需要若干根同样长的木棍。华华手头上有一些长度参差不齐的木棍,他想将每根都裁剪成若干......
  • 牛客小白月赛12 -- B 华华教月月做数学
     题目描述找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。月月的其中......
  • 牛客练习赛 108 题解
    六道题目的出题人都是我,希望大家玩的开心!https://ac.nowcoder.com/acm/contest/51208A.惊鸿显然位或之后只会变大,因此答案为\(4\times(a_1\text{or}a_2\text{or}......
  • 【牛客刷题】HJ68 成绩排序
    题目链接这题本身就是一个排序题,按照学生成绩排序,成绩一样的按照输入的前后顺序排。如果用Java,那么利用ArrayList能很轻松的完成:importjava.util.ArrayList;importja......
  • leetcode-1346-easy
    CheckifNandItsDoubleExistGivenanarrayarrofintegers,checkifthereexisttwoindicesiandjsuchthat:i!=j0<=i,j<arr.lengtharr[i]==2......