吐槽:
1. 這場比賽完全是敗給網絡了....
2. 結果和代碼明天再說
3. 三天沒寫題解了... 說明這三天我什么都沒做... 好好放松了一下~~
upt : 漲10pt... rank500+ sucks... 500pt寫好了
250pt
求A,B(1<=A,B<=4,000,000,000,000)之間所有數的XOR
分析:
還是考慮求0到A和0到B之間的所有數的XOR...
結論的話可以自己推一推, 不難發現f(2^n-1)一定是0.
根據這個重要結論我們可以直接推出結果了... 其實打表找下規律也是可以的額...
但是因為網絡卡,我白白浪費了15min不能提交.... 125pt....
1 long long cal(long long x){
2 if(x%4==0) return x;
3 if(x%4==1) return 1;
4 if(x%4==2) return x+1;
5 if(x%4==3) return 0;
6 }
7 class EllysXors{
8 public :long long getXor(long long L, long long R){
9 return cal(R)^cal(L-1);
10 }
11 };
12
500pt
在一個橫坐標軸上有若干個垂直的線段.每個線段之間的距離為width[i],現在讓你從最左線段的左下角運動到最右線段的右上角.
線段之間的運行速度為speed[i],在線段上垂直運動的速度為walk.線段之間只能從整數坐標點運動到整數坐標點, 每個線段的高度都是一個定值length.
請問最快多久可以到達目的地
分析:
和"黑書"上釣魚那道題是同一個模型...
在每個線段之間,至少是要水平運動距離width[i]了. 但是豎直方向上應該運動多少呢?
如果豎直方向上的一個單位選擇在線段之間運動,那么每向上運動一格,時間就是三角形斜邊差除以speed[i]. 否則就是1/walk.
這樣的話,我們每次選取最小那個就好了... 應該非常好寫... 但是我被網卡到最后... 嗚嗚嗚...
1 #include<iostream>
2 #include<vector>
3 #include<queue>
4 #include<cmath>
5 using namespace std;
6 double L[55];
7 class EllysRivers{
8 public :
9 double getMin(int len,int w,vector <int> width, vector <int> speed){
10 vector <double> W,S;
11 int n = width.size();
12 for(int i=0; i<n ; i++){
13 W.push_back(width[i]);
14 S.push_back(speed[i]);
15 }
16 priority_queue < pair <double , int> ,vector <pair <double, int> >, greater <pair<double,int> > > Q;
17 Q.push( make_pair(1.0/w,n) );
18 double ans = 0;
19 for(int i=0; i<n ;i++){
20 L[i] = 0;
21 Q.push(make_pair((sqrt(W[i]*W[i] + 1) - W[i]) / S[i] , i ));
22 ans += W[i]/S[i];
23 }
24 for(int j=0; j< len;j++){
25 double u = Q.top().first;
26 int id = Q.top().second;
27 ans += u;
28 if(id == n) {
29 continue;
30 }
31 Q.pop();
32 L[id] += 1.0;
33 double t = ( sqrt((L[id]+1)*(L[id]+1) + W[id]*W[id]) - sqrt(L[id]*L[id]+W[id]*W[id]) )/S[id];
34 Q.push(make_pair(t,id));
35 }
36 return ans;
37 }
38 };
39
posted on 2012-05-20 01:59
西月弦 閱讀(398)
評論(0) 編輯 收藏 引用 所屬分類:
比賽感言