제출 #1279889

#제출 시각아이디문제언어결과실행 시간메모리
1279889banme선물 (IOI25_souvenirs)C++20
100 / 100
16 ms8256 KiB
#include "souvenirs.h" #include <utility> #include <vector> #include<bits/stdc++.h> using namespace std; long long solved[1000]; long long equations [1000][1000]; long long br[1000]; void update(long long N){ for(int i=1;i<N;i++){ if(equations[N][i]==1){ equations[0][i] -= solved[N]; } } } long long neweq (long long i,long long nums){ if(nums==1){ return equations[0][i]-1; }else{ return equations[0][i]/nums; } } void solve(int N,long long P0){ if(N==1){return;} while(equations[N][N]!=1){ int i = N; while(equations[i][i]!=1){ i=i-1; } int nums =0; for(int j=i;j<=N;j++){ if(equations[j][i]==1){ nums++; } } long long x; pair<vector<int>,long long> s; if(i!=0){ s = transaction(neweq(i,nums)); x = neweq(i,nums); }else{ s = transaction(P0-1); x = P0-1; } //cout<<x<<" amogus "<<nums<<endl; long long newe=s.first[0]+1; equations[0][newe] = x - s.second; for(int t = 0;t<s.first.size();t++){ equations[s.first[t]+1][newe] = 1; br[s.first[t]]++; if(s.first[t] >= N) { equations[0][newe]-=solved[s.first[t]+1]; } } } /*for(int i = 1; i <= N; i++) { for(int j = 0; j <= N; j++) { cout << equations[j][i] << " "; } cout << endl; } cout<<endl;*/ solved[N] = equations[0][N]; update(N); solve(N-1,P0); } void buy_souvenirs(int N, long long P0) { for(int i=0;i<1000;i++){ solved[i]=0; br[i]=0; for(int j=0;j<1000;j++){ equations[i][j]=0; } } equations[0][0] = 1; solve(N,P0); for(int i=0;i<N;i++){ for(int j =0;j<i-br[i];j++){ transaction(solved[i+1]); } } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...