제출 #369932

#제출 시각아이디문제언어결과실행 시간메모리
369932azberjibiouNaan (JOI19_naan)C++17
29 / 100
539 ms262148 KiB
#include <bits/stdc++.h> #define gibon ios::sync_with_stdio(false); cin.tie(0); using namespace std; #define fir first #define sec second #define ll long long #define pii pair<int, int> const int mxN=2020; typedef struct frac{ ll ja, mo; }frac; int N, L; int V[mxN][mxN]; bool Chk[mxN]; vector <vector<int>> v; vector <int> tmp; frac ans[mxN]; int sum[mxN]; frac gop(frac a, frac b) { frac res={a.ja*b.ja, a.mo*b.mo}; if(res.mo<0) res.mo*=-1, res.ja*=-1; return res; } frac mnus(frac a, frac b) { frac res={a.ja*b.mo-a.mo*b.ja, a.mo*b.mo}; if(res.mo<0) res.mo*=-1, res.ja*=-1; return res; } frac pls(frac a, frac b) { frac res={a.ja*b.mo+a.mo*b.ja, a.mo*b.mo}; if(res.mo<0) res.mo*=-1, res.ja*=-1; return res; } bool cmp(frac a, frac b) { return mnus(a, b).ja<0; } bool ok(int idx, int pos, ll cur) { if(pos==N) { for(int i=0;i<N-1;i++) cout << ans[i].ja << " " << ans[i].mo << '\n'; for(int i=0;i<N;i++) cout << v[idx][i] << " "; return true; } frac now; if(pos==0) now={0, 1}; else now=ans[pos-1]; ll ncur=cur; frac tot={sum[v[idx][pos]], N}; while(ncur!=L && cmp(gop(mnus({ncur, 1}, now), {V[v[idx][pos]][ncur], 1}), tot)) { //printf("len=%d, %d\n", gop(mnus({ncur, 1}, now), {V[v[idx][pos]][ncur], 1}).ja, gop(mnus({ncur, 1}, now), {V[v[idx][pos]][ncur], 1}).mo); tot=mnus(tot, gop(mnus({ncur, 1}, now), {V[v[idx][pos]][ncur], 1})); now={ncur, 1}; ncur++; } if(ncur==L && cmp(gop(mnus({ncur, 1}, now), {V[v[idx][pos]][ncur], 1}), tot)) return false; else { ans[pos]=pls(now, {tot.ja, tot.mo*V[v[idx][pos]][ncur]}); //printf("ans[%d]=%d, %d\n", pos, ans[pos].ja, ans[pos].mo); if(ok(idx, pos+1, ncur)) return true; } return false; } void jag(int pos) { if(pos==N+1) { v.push_back(tmp); return; } for(int i=1;i<=N;i++) { if(Chk[i]) continue; Chk[i]=true; tmp.push_back(i); jag(pos+1); tmp.pop_back(); Chk[i]=false; } } int main() { gibon cin >> N >> L; for(int i=1;i<=N;i++) for(int j=1;j<=L;j++) cin >> V[i][j]; for(int i=1;i<=N;i++) for(int j=1;j<=L;j++) sum[i]+=V[i][j]; jag(1); for(int i=0;i<v.size();i++) { //printf("i=%d\n", i); //for(int j=0;j<N;j++) printf("%d ", v[i][j]); //printf("\n"); if(ok(i, 0, 1)) return 0; } cout << -1212; }

컴파일 시 표준 에러 (stderr) 메시지

naan.cpp: In function 'int main()':
naan.cpp:95:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(int i=0;i<v.size();i++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...