3솔했다.
D번은 그냥 사설 보고 업솔빙했다.
구현을 왤케 못하는지... 넘 슬프다.
C번도 짜증난게, 너무 뻘짓을 했다...
퍼센트 출력
void solve() {
double a, b; cin >> a >> b;
double ans = 1-b/a;
cout.precision(4); cout << fixed;
cout << ans*100;
}
그냥 시키는 대로.
void solve() {
int n; cin >> n;
int a[n], p[n], x[n];
int ans = INT_MAX;
REPh(i,0,n) {
cin >> a[i] >> p[i] >> x[i];
if (x[i] > a[i]) {
ans = min(ans, p[i]);
}
}
cout << (ans == INT_MAX ? -1 : ans);
}
에라토스테네스 체로만 생각했다.
도대체 왜 그랬는지 모르겠다. 최근에 소수 문제들만 풀어댄 것이 원인이 아닐까...
까지 하면 무조건 시간초과라 까지 도는 식으로 하면 된다.
void solve() {
ll n; cin >> n;
set<ll> s;
for (ll a = 2; a*a <= n; ++a) {
for (ll ab = a*a; ab <= n; ab *= a) {
s.emplace(ab);
}
}
cout << n-s.size();
}
다음과 같이 엄청 뻘짓을 했다.
뭐가 문제인지 아직 모르겠다.
난 말리면 한없이 말려서
그냥 포기하고 답지를 봤다.
구현이 어려운 문제이고,
에디토리얼의 코드는 보지 않는 것을 추천한다. UB를 대수롭지 않게 넘기는 부분이 있기 때문이다.
ll score(string S) {
ll cnt[10];
iota(cnt+1, cnt+10, 1);
for(char c : S) cnt[c - '0'] *= 10;
return accumulate(cnt+1, cnt+10, 0);
}
void solve() {
int k;
string s, t;
cin >> k >> s >> t;
ll cnt[10]; fill(cnt+1, cnt+10, k);
for(char c : s.substr(0,4)) cnt[c - '0']--;
for(char c : t.substr(0,4)) cnt[c - '0']--;
ll win = 0;
REPh(x,1,10) REPh(y,1,10) {
s.back() = '0' + x; t.back() = '0' + y;
if(score(s) <= score(t)) continue;
win += cnt[x] * (cnt[y] - (x == y));
}
cout << (double)win/(9*k-8)/(9*k-9);
}
실제 돌아가는 거에서 다른 점은
를 난 개짜리 인덱스 있는 배열에 맞춰서 비교했고
정답 코드는 10개짜리로 비교했다는 것이다.
사실 그 때 졸았음을 부정하지는 않겠다. 워낙 코드가 망해서 졸 수밖에 없었다.
담에는 4솔 해야지...