[PYTHON] J'ai participé à AtCoder (édition ABC169)

salut! C'est le domaine de Roadrice, étudiant en master de bioinformatique! Cela fait un moment que je ne suis pas mort de la dernière fois, mais depuis que j'ai participé à ABC169, veuillez noter l'entrée.

Problème A

La multiplication jusqu'à 3 chiffres est apprise par la 3e année de l'école élémentaire selon les directives pédagogiques actuelles.

Ma réponse

A.py


A,B = map(int, input().split())
print(A*B)

Problème B

Je l'ai implémenté exactement comme il a été écrit une fois.

B.py



N = int(input())
A = list(map(int, input().split()))

ans = 1
for i in range(N):
    ans *= A[i]

if ans <= 1e18: print(ans)
else: print(-1)

Le résultat est "TLE". Les nombres sont gros, non?

S'il y a 0 dans l'entrée, la réponse est 0 à ce moment, donc s'il est jugé s'il y a d'abord 0 dans l'entrée, "0" est sorti sans multiplication et le processus se termine, 10 18 pendant le calcul. Je pensais que ce serait plus rapide si je le cassais et que je produisais -1 s'il dépasse </ sup>, alors j'ai écrit comme suit.

B.py



N = int(input())
A = list(map(int, input().split()))

ans = 1
flg = True

if 0 in A: print(0)
else:
    for i in range(N):
        ans *= A[i]
        if ans > 1e18:
            flg = False
            break

    if flg: print(ans)
    else: print(-1)

En passant, cela a réduit le temps de calcul du maximum de «2206 ms» à «56 ms». Il sera considérablement plus rapide avec un peu d'ingéniosité.

Problème C

Je savais que c'était une histoire en virgule flottante, mais cela n'a pas fonctionné ... Je n'ai pas suffisamment étudié les technologies de l'information ...

Problème D

J'ai utilisé C ++ pour ce problème. Vous pouvez maximiser le nombre d'opérations en procédant comme suit.

Tout d'abord, nous factorisons le * N * donné.


N = a^{6} \times b^{4} \times c^{3}  

Soit z = a 1 </ sup>. Remplacez N par N / z. Comme le même z ne peut pas être sélectionné, le plus petit suivant a 2 < Sélectionnez / sup> pour z. Remplacez N par N / z.


N = a^{3} \times b^{4} \times c^{3}  

Il se divise toujours à z = a 3 </ sup>. Remplacez N par N / z.


N = b^{4} \times c^{3}  

Ensuite, divisez par z = b 1 </ sup> ...

Divisez à plusieurs reprises par les 1ère, 2ème et 3ème puissances des facteurs premiers, et si les facteurs premiers sont épuisés en * N *, divisez par les 1ère, 2ème et 3ème puissances des facteurs premiers suivants. Il vous suffit de répéter le processus.

Ma réponse

D.cpp



#include<bits/stdc++.h>
using namespace std;

vector<long long> pri_fac(long long N){
    vector<long long> yakusu;
    long long now = 0; 
    long long a = 2;
        while(N >= a*a){
            if(N%a == 0){
                yakusu.push_back(a);
                 N /= a;
            }else{
                a++;
            }
        } 
    if(N != 1) yakusu.push_back(N);
    return yakusu;
}

int main(){
    long long N;
    cin >> N;

    vector<long long> vec_all;
    vec_all = pri_fac(N);

    if(N == 1) cout << 0 << endl;
    else if(vec_all.size() == 1) cout << 1 << endl;
    else{
        long long now;
        now = vec_all[0];
        vector<long long> unique_count;
        unique_count.push_back(1);
        for(long long i=1;i<vec_all.size();i++){
            if(vec_all[i] != now) unique_count.push_back(1);
            else unique_count[unique_count.size()-1]++;
            now = vec_all[i];
        }

        long long ans = 0;

        for(long long i=0;i<unique_count.size();i++){
            long long j = 1;
            while(j <= unique_count[i]){
                ans++;
                unique_count[i] -= j;
                j++;
            } 
        }

        cout << ans << endl;
    }
    return 0;
}

Quand * N * est 1 ou un nombre premier, je ne voulais pas de bogue, donc je gère d'abord les exceptions. Pri_fac est une fonction qui effectue la décomposition des facteurs premiers et renvoie les facteurs premiers au vecteur.

Recommended Posts

J'ai participé à AtCoder (édition ABC169)
J'ai participé à AtCoder (ABC158)
Atcoder ABC164 A-C en Python
Atcoder ABC167 A-D en Python
Atcoder ABC165 A-D en Python
Atcoder ABC166 A-E en Python
Atcoder ABC169 A-E en Python
AtCoder ABC177 A-D avec python
J'ai participé au tour de qualification ISUCON10!
Résoudre Atcoder ABC169 A-D avec Python
J'ai participé au PyData Tokyo Meetup # 2
AtCoder ABC176
J'ai participé à la compétition NFL de Kaggle
AtCoder ABC177
Je voulais résoudre ABC159 avec Python
AtCoder ABC 174 Python
AtCoder ABC 175 Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Daily AtCoder # 53 en Python
Daily AtCoder # 33 en Python
AtCoder # 24 tous les jours avec Python
Daily AtCoder # 37 en Python
AtCoder # 8 tous les jours avec Python
Daily AtCoder # 42 en Python
AtCoder # 21 quotidien avec Python
Daily AtCoder # 17 avec Python
Daily AtCoder # 38 en Python
Daily AtCoder # 54 en Python
Daily AtCoder # 11 en Python
Daily AtCoder # 15 en Python
Daily AtCoder # 47 avec Python
Daily AtCoder # 13 en Python
AtCoder # 45 quotidien avec Python
J'ai écrit un modèle de conception dans l'édition Kotlin Singleton
J'ai écrit un modèle de conception dans l'édition Kotlin Adapter
AtCoder # 30 tous les jours en Python
AtCoder # 40 quotidien avec Python
AtCoder # 10 quotidien avec Python
AtCoder # 5 tous les jours avec Python
Daily AtCoder # 28 en Python
AtCoder # 39 quotidien avec Python
Daily AtCoder # 20 en Python
Daily AtCoder # 19 en Python
Daily AtCoder # 52 en Python
Daily AtCoder # 3 en Python
Daily AtCoder # 14 avec Python
Daily AtCoder # 50 avec Python
Daily AtCoder # 26 avec Python
AtCoder quotidien # 4 avec Python
Daily AtCoder # 29 en Python
Tous les jours avec Python AtCoder # 22
Daily AtCoder # 49 en Python
Daily AtCoder # 27 en Python
AtCoder # 1 tous les jours avec Python
J'ai participé à une programmation compétitive une semaine après avoir commencé la programmation
Résolvez ABC169 avec Python
Daily AtCoder # 25 avec Python