牛客練習試合17 ABD
13699 ワード
A直方体
タイトルの説明
共有長方体の1つの頂点の3つの面の面積を与えて、その12本の辺の辺の長さとを求めます.
説明を入力:
出力の説明:
例1
入力
しゅつりょく
例2
入力
しゅつりょく
B好位置
タイトルの説明
2つの列sとxを与える
sのいずれかのiを良い位置として定義し、sのサブシーケンスがy=xを満たし、jが存在する場合にのみi=kとする
jが成立する.
sの中ですべての位置が良い位置かどうかを聞きます.
説明を入力:
出力の説明:
例1
入力
しゅつりょく
例2
入力
しゅつりょく
例3
入力
しゅつりょく
D経緯度
タイトルの説明
地球の2つの緯度座標を与えて、この2つの点の球面距離と直線距離の差を聞きます.地球を球体と仮定し、半径は6371009メートルである.
説明を入力:
出力の説明:
例1
入力
しゅつりょく
転載先:https://www.cnblogs.com/xingkongyihao/p/8992622.html
タイトルの説明
共有長方体の1つの頂点の3つの面の面積を与えて、その12本の辺の辺の長さとを求めます.
説明を入力:
a, b, c (1 <= a, b, c <= 10000)。
出力の説明:
。
例1
入力
1 1 1
しゅつりょく
12
例2
入力
4 6 6
しゅつりょく
28
。
1 #include
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
",4*(x+y+z));
12 }
13 }
14
15 return 0;
16 }
B好位置
タイトルの説明
2つの列sとxを与える
sのいずれかのiを良い位置として定義し、sのサブシーケンスがy=xを満たし、jが存在する場合にのみi=kとする
jが成立する.
sの中ですべての位置が良い位置かどうかを聞きます.
説明を入力:
s,x, 。
1 <= |s|, |x| <= 200000
出力の説明:
Yes 。
No 。
例1
入力
abab
ab
しゅつりょく
Yes
例2
入力
abacaba
aba
しゅつりょく
No
例3
入力
abc
ba
しゅつりょく
No
KMP , s x , 。 。
1 #include
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
",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
");
39 }
40 printf("Yes
");
41 return 0;
42 }
D経緯度
タイトルの説明
地球の2つの緯度座標を与えて、この2つの点の球面距離と直線距離の差を聞きます.地球を球体と仮定し、半径は6371009メートルである.
説明を入力:
T 。
n , lat1, lng1, lat2, lng2 。
。
。
。
出力の説明:
n 。
。
例1
入力
1
43.466667 -80.516667 30.058056 31.228889
しゅつりょく
802333
, , 。 。
1 #include
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
",len1,len2);
25 // printf("%.lf %.lf %.lf %.lf %.lf %.lf
",x1,y1,z1,x2,y2,z2 );
26 printf("%lld
",(long long)(len2 - len1 + 0.5));
27 }
28 return 0;
29 }
転載先:https://www.cnblogs.com/xingkongyihao/p/8992622.html