QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#712826#9536. Athlete Welcome CeremonyOneWan#WA 0ms36272kbC++233.7kb2024-11-05 17:11:432024-11-05 17:11:43

Judging History

This is the latest submission verdict.

  • [2024-11-05 17:11:43]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 36272kb
  • [2024-11-05 17:11:43]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int a[400];
unordered_map<int,int>sb;
set<pair<int,int>>sx;
unordered_set<int>ss;
unordered_map<int,int>id;
int cnt;
struct edge{
    int to;
    int next;
    int cap;
    int cost;
}edge[6600000];
const int N=6600000;
int head[N],tot;
bool vis[N];
int dis[N],level[N];
void addEdge(int x,int y,int cap,int cost){


   // cout<<x<<" "<<y<<" "<<cap<<" "<<cost<<'\n';
    edge[++tot].to=y;
    edge[tot].next=head[x];
    edge[tot].cap=cap;
    edge[tot].cost=cost;
    head[x]=tot;

    edge[++tot].to=x;
    edge[tot].next=head[y];
    edge[tot].cap=0;
    edge[tot].cost=-cost;
    head[y]=tot;
}

bool SPFA(int S,int T,int n){
    for(int i=1;i<=n+1;i++){
        dis[i]=1e9;
        vis[i]=0;
        level[i]=0;
    }
    dis[S]=0;
    level[S]=1;
    vis[S]=true;
    deque<int>Q;
    Q.push_back(S);
    while(!Q.empty()){
        int x=Q.front();
        Q.pop_front();
        vis[x]=false;
       // cerr<<x<<'\n';
        for(int i=head[x];i!=-1;i=edge[i].next){
            int to=edge[i].to;
            if(dis[to]>dis[x]+edge[i].cost&&edge[i].cap>0){
                dis[to]=dis[x]+edge[i].cost;
                level[to]=level[x]+1;
                if(!vis[to]){
                    vis[to]=true;
                    if(!Q.empty()&&dis[to]<dis[Q.front()]){
                        Q.push_front(to);
                    }else{
                        Q.push_back(to);
                    }
                }
            }
        }
    }
    return dis[T]!=dis[n+1];
}
bool flag=false;
int dfs(int x,int T,int t,int &flow,int &cost){
    if(x==T){
        flow+=t;
        flag=true;
        return t;
    }
    int num=0,newflow=0;
    for(int i=head[x];i!=-1;i=edge[i].next){
        int to=edge[i].to;
        if(t==num)break;
        if(dis[x]+edge[i].cost==dis[to]&&level[x]+1==level[to]&&edge[i].cap>0){
            newflow=dfs(to,T,min(t-num,edge[i].cap),flow,cost);
            num+=newflow;
            cost+=newflow*edge[i].cost;
            edge[i].cap-=newflow;
            edge[i^1].cap+=newflow;
        }
    }
    return num;
}

void zkw(int S,int T,int n){
    int flow=0,cost=0;
    while(SPFA(S,T,n)){
        flag=true;
        while(flag){
            flag=false;
            dfs(S,T,1e9,flow,cost);
        }
    }
    cout<<-cost<<'\n';
}

int check(int a,int b){
    int t=a/b;
    int res=1;
    int num=0;
    int idx=0;
    if(sb.count(a)){
        idx=sb[a];
    }else{
        sb[a]=++cnt;
        idx=sb[a];
    }
    int idy=0;
    if(sb.count(b)){
        idy=sb[b];
    }else{
        sb[b]=++cnt;
        idy=sb[b];
    }
    for(int i=2;i*i<=t;i++){
        while(t%i==0){
            num++;
            t/=i;
        }
    }
    if(t>1){
        num++;
    }
   addEdge(idx,idy,500,-num);
   //cout<<a<<" "<<b<<" "<<idx<<" "<<idy<<" "<<num<<'\n';
    return num;
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    tot=1;
    memset(head,-1,sizeof head);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sb[a[i]]=++cnt;
    }
    for(int i=1;i<=n;i++){
        if(a[i]==1)continue;
        for(int j=1;j*j<=a[i];j++){
            if(a[i]%j==0){
                check(a[i],j);
                if(j==1)continue;
                if(a[i]/j!=j){
                    check(a[i],a[i]/j);
                }
            }
        }
    }
    int S=++cnt;
     for(int i=1;i<=n;i++){
        addEdge(S,sb[a[i]],1,0);
     }
     int T=++cnt;
     for(int i=1;i<=cnt-2;i++){
        addEdge(i,T,1,0);
    }
    zkw(S,T,cnt);
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 36272kb

input:

6 3
a?b??c
2 2 2
1 1 1
1 0 2

output:

1

result:

wrong answer 1st lines differ - expected: '3', found: '1'