Percer en 1 minute. Il suffit d'écrire.
N, A, B = map(int, input().split())
print(N - A + B)
Percer en 3 minutes. Il suffit d'écrire.
N, *x = map(int, open(0).read().split())
print(sum(abs(a) for a in x))
print(sum(a * a for a in x) ** 0.5)
print(max(abs(a) for a in x))
Percer en 3 minutes. Il suffit d'écrire. Si vous savez que vous pouvez vous tourner vers la racine carrée de N, cela ne devrait pas être difficile.
N = int(input())
result = set()
for i in range(1, int(N ** 0.5) + 1):
if N % i == 0:
result.add(i)
result.add(N // i)
print(*sorted(result), sep='\n')
Percer en 14 minutes. Cela prend trop de temps. Il est plus clair que de regarder le feu qu'un code naïf qui simule docilement aboutira à TLE lorsque B est petit. En ce qui concerne, «* A» est meilleur que «+ B». Concluez sur la conclusion que vous ne devriez pas simplement faire «* A» alors que l'incrément est petit et additionner le reste. Puisque A est au moins 2, * O * (log N) peut être simulé docilement. </ i>) Il n'y a donc pas de problème.
X, Y, A, B = map(int, input().split())
result = 0
while X * A < Y and X * A < X + B:
X *= A
result += 1
result += ((Y - 1) - X) // B
print(result)
Post-scriptum: Je pensais qu'il y avait beaucoup de gens qui ont été pénalisés à cause du problème D, mais si je l'écris sans imaginer, c'est parce que X * A
déborde même avec int64.Je vois.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
defer flush()
X := readInt()
Y := readInt()
A := readInt()
B := readInt()
result := 0
for X <= (Y-1)/A && X*A < X+B {
X *= A
result++
}
result += ((Y - 1) - X) / B
println(result)
}
const (
ioBufferSize = 1 * 1024 * 1024 // 1 MB
)
var stdinScanner = func() *bufio.Scanner {
result := bufio.NewScanner(os.Stdin)
result.Buffer(make([]byte, ioBufferSize), ioBufferSize)
result.Split(bufio.ScanWords)
return result
}()
func readString() string {
stdinScanner.Scan()
return stdinScanner.Text()
}
func readInt() int {
result, err := strconv.Atoi(readString())
if err != nil {
panic(err)
}
return result
}
var stdoutWriter = bufio.NewWriter(os.Stdout)
func flush() {
stdoutWriter.Flush()
}
func println(args ...interface{}) (int, error) {
return fmt.Fprintln(stdoutWriter, args...)
}
ABC180E - Traveling Salesman among Aerial Cities
Il a percé en 39 minutes et demie. Je l'ai résolu en copiant le code du livre de fourmis. Je me demande si je pourrais obtenir la performance jaune si elle était copiée, merde.
#include <bits/stdc++.h>
#define rep(i, a) for (int i = (int)0; i < (int)a; ++i)
using ll = long long;
using namespace std;
#define MAX_N 17
#define INF 2147483647
ll N;
ll dp[1 << MAX_N][MAX_N];
ll d[MAX_N][MAX_N];
void solve() {
rep(i, 1 << N) rep(j, N) dp[i][j] = INF;
dp[(1 << N) - 1][0] = 0;
for (int S = (1 << N) - 2; S >= 0; S--) {
for (int v = 0; v < N; v++) {
for (int u = 0; u < N; u++) {
dp[S][v] = min(dp[S][v], dp[S | 1 << u][u] + d[v][u]);
}
}
}
cout << dp[0][0] << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
vector<ll> X(N), Y(N), Z(N);
rep(i, N) {
cin >> X[i] >> Y[i] >> Z[i];
}
rep(i, N) {
rep(j, N) {
d[i][j] = abs(X[i] - X[j]) + abs(Y[i] - Y[j]) + max(0ll, Z[i] - Z[j]);
}
}
solve();
return 0;
}
Recommended Posts