제출 #1238677

#제출 시각아이디문제언어결과실행 시간메모리
1238677matisitoMosaic (IOI24_mosaic)C++20
53 / 100
318 ms74040 KiB
#include "mosaic.h" #include <iostream> #include <iomanip> #include <string> #include <math.h> #include <algorithm> #include <cstring> #include <numeric> #include <vector> #include <bitset> #include <map> #include <set> #include <queue> #include <deque> #include <stack> #include <unordered_map> #include <unordered_set> #include <cassert> using namespace std; #define dbg(x) cerr<<#x<<": "<<x<<"\n"; /* ValeNotta lover */ vector<long long> mosaic(vector<int> X, vector<int> Y, vector<int> T, vector<int> B, vector<int> L, vector<int> R) { int n=(int)X.size(); vector<vector<long long>>dp(n+1); for(int i=0 ; i<=n ; i++) dp[0].push_back(0); for(int i=1 ; i<=n ; i++){ dp[i].push_back(0); for(int j=1 ; j<=n ; j++){ if(i==1) dp[i].push_back(X[j-1]); else if(j==1) dp[i].push_back(Y[i-1]); else{ if(i>=11 && j>=11) break; if(dp[i-1][j]==0 && dp[i][j-1]==0) dp[i].push_back(1); else dp[i].push_back(0); } // dbg(dp[i].back()) } } set<int>cast; for(int i=1 ; i<=n ; i++){ for(int j=1 ; j<=n ; j++){ if(i>=11 && j>=11) break; if(i>=4 && j>=4){ if(dp[i][j]==1) cast.insert(i-j); } // cout<<dp[i][j]<<" "; dp[i][j]+=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]; } // cout<<"\n"; } // cout<<"\n\n"; vector<long long>pref; pref.push_back(0); for(int i=1-n ; i<=n-1 ; i++){ if(cast.find(i)!=cast.end()) pref.push_back(pref.back()+1); else pref.push_back(pref.back()); } int N=(int)T.size(); vector<long long>ans(N, 0); for(int i=0 ; i<N ; i++){ T[i]++; B[i]++; L[i]++; R[i]++; if(R[i]<=10 || B[i]<=10){ ans[i]=dp[B[i]][R[i]]-dp[T[i]-1][R[i]]-dp[B[i]][L[i]-1]+dp[T[i]-1][L[i]-1]; }else{ if(L[i]<=10){ ans[i]=dp[B[i]][10]-dp[T[i]-1][10]-dp[B[i]][L[i]-1]+dp[T[i]-1][L[i]-1]; L[i]=11; } int r=T[i]-L[i], l=T[i]-R[i]; // dbg(r) // dbg(l) ans[i]+=pref[r+n]-pref[l+n-1]; } } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...