Submission #44919
Source Code Expand
#include <iostream>
#ifdef __DEBUG
#define TRACE(var) std::clog << #var << ':' << ' ' << var << std::endl
#else
#define TRACE(var)
#endif
struct Vector{
int x;
int y;
};
#ifdef __DEBUG
inline std::ostream& operator<<(std::ostream& left, Vector const& right){
left << '(' << right.x << ',' << ' ' << right.y << ')';
return left;
}
#endif
inline void simplify(Vector* vec){
int m = ((*vec).x > 0 ? (*vec).x : -(*vec).x);
int n = ((*vec).y > 0 ? (*vec).y : -(*vec).y);
if(m < n){
std::swap(m, n);
}
TRACE(m);
TRACE(n);
while(n != 0){
int tmp = n;
n = m % n;
m = tmp;
}
(*vec).x /= m;
(*vec).y /= m;
}
inline Vector direction_vector(Vector const& p1, Vector const& p2){
Vector res = {p2.x - p1.x, p2.y - p1.y};
simplify(&res);
return res;
}
inline void vec_insert(int const& i, Vector* vec, Vector const& val){
int idx = -1;
while(++idx < i){
if(vec[idx].x > val.x || (vec[idx].x == val.x && vec[idx].y > val.y)){
int t = i;
do{
vec[t] = vec[t - 1];
t--;
}while(t > idx);
break;
}
}
vec[idx] = val;
}
inline void find(unsigned long long int& res, bool panel[100][100], Vector const& a, Vector const& b, Vector const& ab){
Vector current;
Vector increm;
if(ab.x > 0 || (ab.x == 0 && ab.y > 0)){
current = b;
increm = ab;
}else{
current = a;
increm.x = -ab.x;
increm.y = -ab.y;
}
TRACE(increm);
do{
TRACE(current);
current.x += increm.x;
current.y += increm.y;
if(current.x >= 100 || current.y < 0 || current.x < 0 || current.y >= 100){
break;
}
if(panel[current.x][current.y]){
res--;
TRACE(res);
}
}while(true);
}
int main(void){
int n;
unsigned long long int res = 0;
Vector vec[10000];
bool panel[100][100];
for(int i = 0; i < 100; i++){
for(int j = 0; j < 100; j++){
panel[i][j] = false;
}
}
std::cin >> n;
for(int i = 0; i < n; i++){
Vector tmp;
std::cin >> tmp.x >> tmp.y;
panel[tmp.x][tmp.y] = true;
vec_insert(i, vec, tmp);
}
#ifdef __DEBUG
for(int i = 0; i < n; i++){
std::cout << '(' << vec[i].x << ',' << ' ' << vec[i].y << ')' << ',' << ' ';
}
std::cout << std::endl;
system("pause");
std::cout << std::endl;
for(int i = 0; i < 100; i++){
for(int j = 0; j < 100; j++){
std::cout << (panel[i][j] ? '*' : '+');
}
std::cout << std::endl;
}
system("pause");
#endif
for(int i = 0; i < n - 3; i++){
TRACE(i);
for(int j = i + 1; j < n - 2; j++){
TRACE(j);
Vector ij = direction_vector(vec[i], vec[j]);
TRACE(ij);
for(int k = j + 1; k < n - 1; k++){
TRACE(k);
Vector ik = direction_vector(vec[i], vec[k]);
TRACE(ik);
if(ij.x == ik.x && ij.y == ik.y || ij.x == -ik.x && ij.y == -ik.y){
continue;
}
Vector jk = direction_vector(vec[j], vec[k]);
TRACE(jk);
res += n - k - 1;
find(res, panel, vec[i], vec[j], ij);
find(res, panel, vec[i], vec[k], ik);
find(res, panel, vec[j], vec[k], jk);
}
}
}
std::cout << res % 1000000007 << std::endl;
#ifdef __DEBUG
system("pause");
#endif
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | B - よんてん |
| User | Kt_Sz |
| Language | C++ (G++ 4.6.4) |
| Score | 4 |
| Code Size | 3164 Byte |
| Status | WA |
| Exec Time | 2035 ms |
| Memory | 916 KiB |
Judge Result
| Set Name | level1 | level2 | level3 | level4 | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 4 / 4 | 0 / 16 | 0 / 30 | 0 / 50 | ||||||||||||||||||||||
| Status |
|
|
|
|
| Set Name | Test Cases |
|---|---|
| level1 | 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1 |
| level2 | 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2 |
| level3 | 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2, 30/30_input25, 30/30_input26, 30/30_input27, 30/30_input28, 30/30_input29, 30/30_input30, 30/30_input31, 30/30_input32, 30/30_input33, 30/30_input34, 30/30_input35, 30/30_input36, 30/30_input37, 30/30_input38, 30/30_input39, 30/30_input40, 30/30_input41, 30/30_input42, 30/30_input43, 30/30_input44, 30/30_input68, 30/30_input69 |
| level4 | 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2, 30/30_input25, 30/30_input26, 30/30_input27, 30/30_input28, 30/30_input29, 30/30_input30, 30/30_input31, 30/30_input32, 30/30_input33, 30/30_input34, 30/30_input35, 30/30_input36, 30/30_input37, 30/30_input38, 30/30_input39, 30/30_input40, 30/30_input41, 30/30_input42, 30/30_input43, 30/30_input44, 30/30_input68, 30/30_input69, 50/50_input45, 50/50_input46, 50/50_input47, 50/50_input48, 50/50_input49, 50/50_input50, 50/50_input51, 50/50_input52, 50/50_input53, 50/50_input54, 50/50_input55, 50/50_input56, 50/50_input57, 50/50_input58, 50/50_input59, 50/50_input60, 50/50_input61, 50/50_input62, 50/50_input63, 50/50_input70, 50/50_input71, 50/50_input72, 50/50_input73 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 04/04_input00 | AC | 20 ms | 788 KiB |
| 04/04_input01 | AC | 21 ms | 796 KiB |
| 04/04_input02 | AC | 22 ms | 732 KiB |
| 04/04_input03 | AC | 21 ms | 784 KiB |
| 04/04_input04 | AC | 20 ms | 784 KiB |
| 04/04_input05 | AC | 22 ms | 792 KiB |
| 04/04_input06 | AC | 22 ms | 784 KiB |
| 04/04_sample1 | AC | 21 ms | 792 KiB |
| 16/16_input05 | WA | 41 ms | 788 KiB |
| 16/16_input06 | WA | 70 ms | 788 KiB |
| 16/16_input07 | WA | 45 ms | 780 KiB |
| 16/16_input08 | WA | 22 ms | 788 KiB |
| 16/16_input09 | WA | 21 ms | 824 KiB |
| 16/16_input10 | WA | 21 ms | 752 KiB |
| 16/16_input11 | WA | 53 ms | 784 KiB |
| 16/16_input12 | WA | 25 ms | 780 KiB |
| 16/16_input13 | WA | 22 ms | 796 KiB |
| 16/16_input14 | WA | 30 ms | 788 KiB |
| 16/16_input15 | WA | 22 ms | 764 KiB |
| 16/16_input16 | WA | 23 ms | 784 KiB |
| 16/16_input17 | WA | 26 ms | 788 KiB |
| 16/16_input18 | WA | 37 ms | 800 KiB |
| 16/16_input19 | AC | 21 ms | 788 KiB |
| 16/16_input20 | WA | 33 ms | 736 KiB |
| 16/16_input21 | WA | 32 ms | 788 KiB |
| 16/16_input22 | WA | 22 ms | 736 KiB |
| 16/16_input23 | WA | 22 ms | 792 KiB |
| 16/16_input24 | WA | 23 ms | 796 KiB |
| 16/16_input64 | WA | 22 ms | 788 KiB |
| 16/16_input65 | WA | 21 ms | 796 KiB |
| 16/16_input66 | WA | 22 ms | 764 KiB |
| 16/16_input67 | WA | 76 ms | 792 KiB |
| 16/16_sample2 | WA | 21 ms | 816 KiB |
| 30/30_input25 | TLE | 2030 ms | 888 KiB |
| 30/30_input26 | TLE | 2030 ms | 888 KiB |
| 30/30_input27 | RE | 0 ms | 796 KiB |
| 30/30_input28 | TLE | 2030 ms | 892 KiB |
| 30/30_input29 | TLE | 2030 ms | 888 KiB |
| 30/30_input30 | TLE | 2029 ms | 884 KiB |
| 30/30_input31 | TLE | 2030 ms | 896 KiB |
| 30/30_input32 | TLE | 2003 ms | 788 KiB |
| 30/30_input33 | WA | 1612 ms | 780 KiB |
| 30/30_input34 | TLE | 2029 ms | 888 KiB |
| 30/30_input35 | TLE | 2028 ms | 884 KiB |
| 30/30_input36 | WA | 80 ms | 792 KiB |
| 30/30_input37 | TLE | 2029 ms | 884 KiB |
| 30/30_input38 | TLE | 2030 ms | 896 KiB |
| 30/30_input39 | TLE | 2035 ms | 900 KiB |
| 30/30_input40 | WA | 388 ms | 760 KiB |
| 30/30_input41 | WA | 1216 ms | 796 KiB |
| 30/30_input42 | TLE | 2032 ms | 888 KiB |
| 30/30_input43 | TLE | 2029 ms | 880 KiB |
| 30/30_input44 | TLE | 2029 ms | 892 KiB |
| 30/30_input68 | TLE | 2030 ms | 892 KiB |
| 30/30_input69 | TLE | 2030 ms | 884 KiB |
| 50/50_input45 | TLE | 2030 ms | 900 KiB |
| 50/50_input46 | TLE | 2029 ms | 896 KiB |
| 50/50_input47 | TLE | 2029 ms | 896 KiB |
| 50/50_input48 | RE | 0 ms | 888 KiB |
| 50/50_input49 | TLE | 2030 ms | 888 KiB |
| 50/50_input50 | TLE | 2029 ms | 884 KiB |
| 50/50_input51 | TLE | 2029 ms | 908 KiB |
| 50/50_input52 | TLE | 2029 ms | 888 KiB |
| 50/50_input53 | RE | 0 ms | 892 KiB |
| 50/50_input54 | TLE | 2030 ms | 892 KiB |
| 50/50_input55 | TLE | 2029 ms | 892 KiB |
| 50/50_input56 | TLE | 2029 ms | 888 KiB |
| 50/50_input57 | TLE | 2031 ms | 888 KiB |
| 50/50_input58 | RE | 0 ms | 892 KiB |
| 50/50_input59 | TLE | 2030 ms | 888 KiB |
| 50/50_input60 | TLE | 2030 ms | 888 KiB |
| 50/50_input61 | TLE | 2030 ms | 904 KiB |
| 50/50_input62 | TLE | 2030 ms | 892 KiB |
| 50/50_input63 | RE | 0 ms | 888 KiB |
| 50/50_input70 | TLE | 2030 ms | 804 KiB |
| 50/50_input71 | TLE | 2029 ms | 916 KiB |
| 50/50_input72 | TLE | 2030 ms | 888 KiB |
| 50/50_input73 | TLE | 2030 ms | 888 KiB |