Submission #1546867
Source Code Expand
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
long long x_1, y_1, x_2, y_2, sw;
long long N;
long long X[200000], Y[200000];
long long n;
vector<pair<long long, long long> > fountains;
long long a[200000], dp[200000], len;
long long p_min, p_max, p;
int main() {
scanf("%lld %lld %lld %lld", &x_1, &y_1, &x_2, &y_2);
scanf("%lld", &N);
for (int i = 0; i < N; i++) {
scanf("%lld %lld",&X[i], &Y[i]);
}
if (x_1 > x_2) {
sw = x_1; x_1 = x_2; x_2 = sw;
sw = y_1; y_1 = y_2; y_2 = sw;
}
if (y_1 > y_2) {
y_1 = -y_1;
y_2 = -y_2;
for (int i = 0; i < N; i++) {
Y[i] = -Y[i];
}
}
/*一直線だった時の処理をここら辺に書く*/
if (x_1 == x_2) {
/*間に噴水があるか調べる*/
for (int i = 0; i < N; i++) {
if (X[i] == x_1 && y_1 < Y[i] && Y[i] < y_2) {
/*間に噴水がある*/
printf("%.15Lf\n", (y_2 - y_1) * 100 - 20 + 40 * atan((long double)1));
return 0;
}
}
/*噴水はない*/
printf("%lld\n", (y_2 - y_1) * 100);
return 0;
}
if (y_1 == y_2) {
/*間に噴水があるか調べる*/
for (int i = 0; i < N; i++) {
if (Y[i] == y_1 && x_1 < X[i] && X[i] < x_2) {
/*間に噴水がある*/
printf("%.15Lf\n",(x_2 - x_1) * 100 - 20 + 40 * atan((long double)1));
return 0;
}
}
/*噴水はない*/
printf("%lld\n", (x_2-x_1)*100);
return 0;
}
/*一直線じゃなかった場合*/
for (int i = 0; i < N; i++) {
if (x_1 <= X[i] && X[i] <= x_2 && y_1 <= Y[i] && Y[i] <= y_2) {
fountains.push_back(make_pair(X[i], Y[i]));
}
}
sort(fountains.begin(), fountains.end());
/*最長増加部分列*/
len = 0;
n = fountains.size();
if (n > 0) {
for (int i = 0; i < n; i++) {
a[i] = fountains[i].second;
}
len = 1;
dp[0] = a[0];
for (int i = 1; i < n; i++) {
p_min = 0;
p_max = len;
while (p_min < p_max) {
p = (p_min + p_max) / 2;
if (dp[p] > a[i]) { p_max = p; }
else { p_min = p + 1; }
}
if (p_min == len) { len++; }
dp[p_min] = a[i];
for (int j = 0; j < len; j++) {
}
}
}
/*(x_2-x_1) + (y_2-y_1)個の道を通って、その間にlen個の噴水を通る。
100 * ((x_2-x_1) + (y_2-y_1))+(- 20 + 5pi) * len
*/
if (len <= x_2 - x_1 && len <= y_2 - y_1) {
printf("%.15Lf\n", 100 * ((x_2 - x_1) + (y_2 - y_1)) + (-20 + 20 * atan((long double)1)) * len);
}
else {
/*この場合を忘れていたっぽい…このときは、len-1個の噴水でショートカットし、1個の噴水で遠回りをする。
100 * ((x_2-x_1) + (y_2-y_1))+(- 20 + 5pi) * (len-1) - 20 + 10pi
*/
printf("%.15Lf\n", 100 * ((x_2 - x_1) + (y_2 - y_1)) + (-20 + 20 * atan((long double)1)) * (len - 1) - 20 + 40 * atan((long double)1));
}
}
Submission Info
Submission Time |
|
Task |
C - Fountain Walk |
User |
tah |
Language |
C++14 (GCC 5.4.1) |
Score |
900 |
Code Size |
2894 Byte |
Status |
AC |
Exec Time |
67 ms |
Memory |
10736 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:19:54: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld %lld %lld", &x_1, &y_1, &x_2, &y_2);
^
./Main.cpp:20:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld", &N);
^
./Main.cpp:22:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld %lld",&X[i], &Y[i]);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
900 / 900 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt, sample_03.txt |
All |
sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
2 ms |
4352 KB |
sample_02.txt |
AC |
2 ms |
4352 KB |
sample_03.txt |
AC |
2 ms |
4352 KB |
subtask_1_01.txt |
AC |
2 ms |
4352 KB |
subtask_1_02.txt |
AC |
2 ms |
4352 KB |
subtask_1_03.txt |
AC |
2 ms |
4352 KB |
subtask_1_04.txt |
AC |
2 ms |
4352 KB |
subtask_1_05.txt |
AC |
2 ms |
4352 KB |
subtask_1_06.txt |
AC |
2 ms |
4352 KB |
subtask_1_07.txt |
AC |
2 ms |
4352 KB |
subtask_1_08.txt |
AC |
2 ms |
4352 KB |
subtask_1_09.txt |
AC |
15 ms |
4352 KB |
subtask_1_10.txt |
AC |
30 ms |
4352 KB |
subtask_1_11.txt |
AC |
9 ms |
4352 KB |
subtask_1_12.txt |
AC |
65 ms |
10480 KB |
subtask_1_13.txt |
AC |
31 ms |
4352 KB |
subtask_1_14.txt |
AC |
16 ms |
4352 KB |
subtask_1_15.txt |
AC |
8 ms |
4352 KB |
subtask_1_16.txt |
AC |
64 ms |
9712 KB |
subtask_1_17.txt |
AC |
26 ms |
4352 KB |
subtask_1_18.txt |
AC |
21 ms |
4352 KB |
subtask_1_19.txt |
AC |
21 ms |
4352 KB |
subtask_1_20.txt |
AC |
62 ms |
9708 KB |
subtask_1_21.txt |
AC |
64 ms |
10736 KB |
subtask_1_22.txt |
AC |
64 ms |
9840 KB |
subtask_1_23.txt |
AC |
64 ms |
10352 KB |
subtask_1_24.txt |
AC |
2 ms |
4352 KB |
subtask_1_25.txt |
AC |
2 ms |
4352 KB |
subtask_1_26.txt |
AC |
2 ms |
4352 KB |
subtask_1_27.txt |
AC |
2 ms |
4352 KB |
subtask_1_28.txt |
AC |
38 ms |
4736 KB |
subtask_1_29.txt |
AC |
41 ms |
4736 KB |
subtask_1_30.txt |
AC |
67 ms |
8688 KB |
subtask_1_31.txt |
AC |
42 ms |
9200 KB |
subtask_1_32.txt |
AC |
49 ms |
10608 KB |
subtask_1_33.txt |
AC |
47 ms |
9584 KB |
subtask_1_34.txt |
AC |
44 ms |
10096 KB |
subtask_1_35.txt |
AC |
56 ms |
10096 KB |
subtask_1_36.txt |
AC |
56 ms |
10224 KB |
subtask_1_37.txt |
AC |
54 ms |
9584 KB |
subtask_1_38.txt |
AC |
55 ms |
9328 KB |
subtask_1_39.txt |
AC |
56 ms |
10096 KB |
subtask_1_40.txt |
AC |
52 ms |
9840 KB |
subtask_1_41.txt |
AC |
50 ms |
10096 KB |