牛客练习赛17

A 长方体

题目描述

给出共享长方体一个顶点的三个面的面积,求它十二条边的边长和。

输入描述:

一行三个整数a, b, c表示面积(1 <= a, b, c <= 10000)。

输出描述:

一行一个整数表示边长和。
输入例子:
1 1 1
输出例子:
12

-->

示例1

输入

1 1 1

输出

12

示例2

输入

4 6 6

输出

28

节约时间就直接暴力做了。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 int main() {
 5     int a, b,c;
 6     cin >> a >> b >> c;
 7     for(int x = 1; x <= a; x ++) {
 8         int y = a/x;
 9         int z = c/x;
10         if(x*y == a && y*z == b && x*z == c) {
11             return 0*printf("%d\n",4*(x+y+z));
12         }
13     }
14
15     return 0;
16 }

B 好位置

题目描述

给出两个串s和x
定义s中的某一位i为好的位置,当且仅当存在s的子序列 满足y=x且存在j使得i=kj成立。
问s中是否所有的位置都是好的位置。

输入描述:

一行两个字符串s,x,这两个串均由小写字母构成。1 <= |s|, |x| <= 200000

输出描述:

Yes表示是。No表示不是。
输入例子:
abab
ab
输出例子:
Yes

-->

示例1

输入

abab
ab

输出

Yes

示例2

输入

abacaba
aba

输出

No

示例3

输入

abc
ba

输出

No

KMP问题,在s中的子串只要出现了x串,那么那些位置都是好位置。只要求下是否存在没在子串里的就行。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 200010;
 4 char str[N], str1[N];
 5 int nex[N];
 6 int vis[N];
 7 void init(){
 8     int j = nex[0] = -1, i = 0;
 9     int len = strlen(str);
10     while(i < len){
11         if(j == -1 || str[i] == str[j]){
12             nex[++i] = ++j;
13         }else j = nex[j];
14     }
15 }
16 void KMP(){
17     int i  = 0, j = 0, sum = 0;
18     int len = strlen(str), len1 = strlen(str1);
19     while(j < len1){
20         if(i == -1 || str[i] == str1[j]){
21             i++;j++;
22         }else i = nex[i];
23         if(i == len) {
24             // printf("j:%d %d %d\n",j,j+1,j-len+1);
25             vis[j+1]--;
26             vis[j-len+1]++;
27         }
28     }
29 }
30 int main() {
31     cin >> str1 >> str;
32     init();
33     int len1 = strlen(str1);
34     KMP();
35     int ans = 0;
36     for(int i = 1; i <= len1; i ++) {
37         ans += vis[i];
38         if(ans == 0) return 0*printf("No\n");
39     }
40     printf("Yes\n");
41     return 0;
42 }

D 经纬度

题目描述

给定地球的两个经纬度坐标,问这两个点的球面距离和直线距离的差。假设地球为球体,半径为6371009米。

输入描述:

第一行一个整数T表示数据组数。接下来n行,每行四个数lat1, lng1, lat2, lng2分别表示两个点的经纬度。正数表示北纬和东经。负数表示南纬和西经。数据保证合法。

输出描述:

n行表示答案。答案保留到米。
输入例子:
1
43.466667 -80.516667 30.058056 31.228889
输出例子:
802333

-->

示例1

输入

1
43.466667 -80.516667 30.058056 31.228889

输出

802333

有个坑,输入的是纬经度,不是经纬度。坑了好久。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 int main() {
 5     int t;
 6     cin >> t;
 7     int r = 6371009;
 8     double PI = acos(-1);
 9     while(t--) {
10         double lat1, lng1, lat2, lng2;
11         cin >> lat1 >> lng1 >> lat2 >> lng2;
12         lat1+= 180; lat2+=180;
13         lat1 *= PI/180;lat2 *= PI/180;
14         lng1 *= PI/180;lng2 *= PI/180;
15         double x1, x2, y1, y2, z1, z2;
16         z1 = r * sin(lat1);
17         y1 = r * cos(lat1) * sin(lng1);
18         x1 = r * cos(lat1) * cos(lng1);
19         z2 = r * sin(lat2);
20         y2 = r * cos(lat2) * sin(lng2);
21         x2 = r * cos(lat2) * cos(lng2);
22         double len1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));
23         double len2 = 2 * r * asin(len1 / (2 * r));
24         //printf("%.lf %lf\n",len1,len2);
25         // printf("%.lf %.lf %.lf %.lf %.lf %.lf\n",x1,y1,z1,x2,y2,z2 );
26         printf("%lld\n",(long long)(len2 - len1 + 0.5));
27     }
28     return 0;
29 }

原文地址:https://www.cnblogs.com/xingkongyihao/p/8992622.html

时间: 2024-10-30 04:44:00

牛客练习赛17的相关文章

转载:牛客练习赛17 c 规律题

转载:https://www.cnblogs.com/zzqc/p/8995135.html C.链接:https://www.nowcoder.com/acm/contest/109/C来源:牛客网 题目描述 给定长度为n的数组a,定义一次操作为:1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007:2. 执行a = s:现在问k次操作以后a长什么样. 输入描述: 第一行两个整数n,k(1 <= n <= 2000,

牛客练习赛17 B-好位置

传送门 题意:本来惯例中文题不解释的, 但是有些人不懂这个题意, 简单的来说, 就是s1每一个的每一个字符都可以和别的字符构成一个子串 == s2.  算了还是惯例中文题意不解释吧. 题解:其实以前写nowcoder的比赛的时候,已经被nowcoder的数据给震惊过了,可是昨天发现有人交随机数过的,有人交Java套数据过的,汗,然后中午被某人催了写一下这个题目. 其实很简单,对于s1, 我们从开头匹配出最先的s2子串,并且对应的位置记录下L[i], 在从末尾开始匹配出最后的s2子串,并且记录下对

牛客练习赛11 B trie树+拓扑判环 E 分治求平面最近点对

牛客练习赛11 B  假的字符串题意:给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们. tags:好题 对于一个字符串, 1]如有其它字符串是它的前缀,那肯定不可能.这个直接用字典树处理就可以. 2]但如果以这个字符串为最小,怎么判定其它字符串不会矛盾呢? 其实矛盾的情况详细一点说是: 比如要以  abcd 为最小, 但又有另一个字符串 aba ,这就矛盾了. 对这种情况,在跑字典树的时候,我们对有相同父亲结点的多个儿

牛客练习赛18

链接:https://www.nowcoder.com/acm/contest/110/A来源:牛客网 最大乘积 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积最大是多少?请输出答案除以2000000000000000003(共有17 个零) 的余数. 举例来说,当 S = 5 时,若干个数的和为 5

牛客练习赛7 E 珂朵莉的数列(树状数组+爆long long解决方法)

https://www.nowcoder.com/acm/contest/38/E 题意: 思路: 树状数组维护.从大佬那里学习了如何处理爆long long的方法. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7 const int maxn =

牛客练习赛10

A旅游观光 题目描述 有n个地方,编号为1->n,任意两个地方有公交车,从i到j的票价为(i+j)mod(n+1),而且这个票可以用无限次,你要把这些地方全部走一遍,问最小花费为多少.可以在任意地方开始和结束. 输入描述: 第一行一个数n 输出描述: 输出一行一个数表示答案 示例1 输入 10 输出 4 说明 1 -> 10 -> 2 -> 9 -> 3 -> 8 -> 4 -> 7 -> 5 -> 6,代价是4 备注: 对于100%的数据,有1

牛客练习赛1 补题记录

A 矩阵 中文题意,要找一个最大的k阶子矩阵在原矩阵中出现过两次. 需要将这个矩阵进行Hash,也就是需要二维Hash,先把每一行Hash了,再把每一列Hash了,有一点前缀的感觉. 预处理完Hash值之后,二分答案k,check过程是在$O(n ^ 2)$枚举起点,这里其实枚举终点方便一些,边界比较好处理,把每个k阶矩阵的hash值存下来,最后看有没有两个一样的. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int

牛客练习赛13

幸运数字 I 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如说,47.744.4都是幸运数字而5.17.467都不是. 现在,给定一个字符串s,请求出一个字符串,使得: 1.它所代表的整数是一个幸运数字: 2.它非空: 3.它作为s的子串(不是子序列)出现了最多的次数(不能为0次). 请求出这个串(如果有多解,请输出字典序最小的那一个). s中无4或7,输出-1 4的个数大于等于7,输出4 否则输出7 幸运数字 II 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如

牛客练习赛 16

在各位ak的大佬中,我感觉我寄几好菜啊... 题目描述 给定字符串s,s只包含小写字母,请求出字典序最大的子序列. 子序列:https://en.wikipedia.org/wiki/Subsequence 字典序:https://en.wikipedia.org/wiki/Lexicographical_order 输入描述: 一行一个字符串s (1 <= |s| <= 100,000). 输出描述: 字典序最大的子序列. 示例1 输入 ababba 输出 bbba 示例2 输入 abbcb