牛客練習試合17 ABD

13699 ワード

A直方体
タイトルの説明
共有長方体の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