結果
| 問題 |
No.1143 面積Nの三角形
|
| コンテスト | |
| ユーザー |
theory_and_me
|
| 提出日時 | 2020-08-01 23:33:54 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 316 ms / 800 ms |
| コード長 | 2,673 bytes |
| コンパイル時間 | 3,873 ms |
| コンパイル使用メモリ | 207,036 KB |
| 最終ジャッジ日時 | 2025-01-12 12:57:58 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 18 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef vector<ll> vl;
typedef vector<vector<ll>> vvl;
//typedef vector<vector<ll>> Graph;
const ll mod = 1e9 + 7;
//const ll mod = 998244353;
#define REP(i,n) for(ll i=0;i<(ll)n;i++)
#define dump(x) cerr << #x << " = " << (x) << endl;
#define spa << " " <<
#define fi first
#define se second
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class S, class T> ostream& operator << (ostream& os, const pair<S, T> v){
os << "(" << v.first << ", " << v.second << ")"; return os;
}
template<class T> ostream& operator << (ostream& os, const vector<T> v){
for(int i = 0; i < (int)v.size(); i++){if(i > 0){os << " ";} os << v[i];} return os;
}
template<class T> ostream& operator << (ostream& os, const vector<vector<T>> v){
for(int i = 0; i < (int)v.size(); i++){if(i > 0){os << endl;} os << v[i];} return os;
}
template<typename T> void debug(vector<vector<T>>&v,ll h,ll w){for(ll i=0;i<h;i++)
{cerr<<v[i][0];for(ll j=1;j<w;j++)cerr spa v[i][j];cerr<<endl;}};
template<typename T> void debug(vector<T>&v,ll n){if(n!=0)cerr<<v[0];
for(ll i=1;i<n;i++)cerr spa v[i];
cerr<<endl;};
vector<ll> divisor(ll n) {
vector<ll> ret;
for(ll i = 1; i * i <= n; i++) {
if(n % i == 0) {
ret.push_back(i);
if(i * i != n) ret.push_back(n / i);
}
}
sort(begin(ret), end(ret));
return (ret);
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N;
cin >> N;
auto y = divisor(N);
vl z;
for(auto x1: y){
for(auto x2: y){
z.push_back(x1*x2);
}
}
sort(z.begin(), z.end());
z.erase(unique(z.begin(), z.end()), z.end());
set<vl> res;
//cout << z << endl;
for(auto p: z){
for(auto q: z){
if(p>N*N/q) continue;
double pp = p;
double qq = q;
double a = pp*qq;
double b = pp*pp*qq+pp*qq*qq;
ll r1 = (-b+(ll)sqrt(b*b+4*a*N*N))/(2*a);
ll r2 = (-b-(ll)sqrt(b*b+4*a*N*N))/(2*a);
auto check = [&](ll r){
if(r>=0 and p*q*r*(p+q+r)==N*N){
vl tmp = {p, q, r};
sort(tmp.begin(), tmp.end());
res.insert(tmp);
return;
}
};
check(r1);
check(r2);
}
}
cout << res.size() << endl;
return 0;
}
theory_and_me