CIV5... 문명하셨습니다 KimJJ 십수번의 시도 끝에 평범한 nCr문제가 맞는 거 아닌가 도대체 무엇이 문제란 말인가 하며 좌절하기에 이르렀습니다 아래는 코드입니다. orz #include<iostream> #include<vector> #include<algorithm> #include<utility> using namespace std; typedef unsigned int uint; vector< pair<pair<int, int>, int> > Data; vector< pair<int, uint> > ans; inline int min(int a,int b){return a>b?b:a;} inline int sgn(int a){return a<0?-1:a==0?0:1;} int main(){ vector<uint> bino; int T; cin >> T; int num=0; int max_x=0; while(T--){ int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; const int a=x1 - x2; const int b=y1 - y2; int y, x; if(sgn(a) * sgn(b) >= 0){ y = abs(a) + abs(b); x = abs(b); } else{ if(abs(a) >= abs(b)){ y = abs(a); x = abs(b); } else{ y = abs(b); x = abs(a+b); } } // cout << y << " " << x << endl; Data.push_back(make_pair(make_pair(y,x), num++)); } sort(Data.begin(), Data.end()); int i, j, di, last = 0x7fffffff; bino.push_back(1u); for(i=di=0; di < Data.size() ;++i){ j=bino.size()-2; j=min(j, last); //cout << j << "\n"; for(;j>=1;--j){ bino[j] += bino[j-1]; if(bino[j] > 0x7fffffffu) last = j-1; } while(di < Data.size() && Data[di].first.first == i){ ans.push_back(make_pair(Data[di].second, bino[ Data[di].first.second ])); ++di; } bino.push_back(1u); } sort(ans.begin(), ans.end()); for(i=0;i<ans.size();++i){ cout << ans[i].second << endl; } return 0; } 11년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
KimJJ
십수번의 시도 끝에
평범한 nCr문제가 맞는 거 아닌가
도대체 무엇이 문제란 말인가 하며
좌절하기에 이르렀습니다
아래는 코드입니다.
orz
11년 전