Cod sursa(job #2404895)

Utilizator AlexutAlex Calinescu Alexut Data 13 aprilie 2019 15:55:19
Problema Zero 2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include<bits/stdc++.h>
using namespace std;

const char iname[]="zapada.in";
const char oname[]="zapada.out";
const int maxn=100005;

ifstream f(iname);
ofstream g(oname);

vector<int> E[maxn];

int been[maxn],many[maxn],k,n,m,i,x,y,start;

void dfs(int x,int type)
{
    if(been[x])
        return;
    been[x]=1;
    for(vector<int>::iterator it=E[x].begin();it!=E[x].end();++it)
        if(been[*it]==0)
            dfs(*it,type);
    if(type==1)
        many[x]=k--;
}

int main()
{
    f>>n>>m;#include <fstream>

using namespace std;

long long p[101],d[101];

long long t,i,k,n,b,nr,j,Min,s;

int main() {
    ifstream f("zero2.in");
    ofstream g("zero2.out");
    for(t=10;t>0;t--) {
        f>>n>>b;
        k=0;
        for(i=2;i*i<=b;i++) {
            if(b%i==0) {
                k++;
                d[k]=i;
                p[k]=0;
                while(b%i==0) {
                    b/=i;
                    p[k]++;
                }
            }
        }
        if(b>1) {
            k++;
            d[k]=b;
            p[k]=1;
        }
        Min=(1LL<<62);
        for (i=1;i<=k;i++) {
            s=0;
            for(j=d[i];j<=n;j*=d[i]) {
                nr=n/j;
                nr=nr*(nr-1)/2*j+nr*(n-nr*j+1);
                s+=nr;
            }
            s/=p[i];
            if (s<Min) {
                Min=s;
            }
        }
        g<<Min<<"\n";
    }
    return 0;
}
    for(i=1;i<=m;++i)
        f>>x>>y,E[y].push_back(x);

    for(i=1;i<=n;++i)
        if(!been[i])
            dfs(i,0),start=i;
    k=n;
    memset(been,0,sizeof(been));
    dfs(start,1);
    for(i=1;i<=n;++i)
        g<<many[i]<<"\n";
}