2014 BUPT 新生排位賽04

2021-06-22 23:00:58 字數 2826 閱讀 9301

a  大家一起點外賣

思路:水題,注意負數的情況,注意long long 就能過了。

code:

#include#include#include#include#include#include#define inf 100000005

#define eps 1e-9

using namespace std;

const int max_n=500005;

const int max_m=2000005;

int a[max_n],n,m;

int ma,mb;

int used[max_m],flag;

int abc(int a)

void solve()

}if(flag==false)

printf("%d %d\n",ma,mb);

return ;

}int main()

return 0;

}

b 田田的公司

思路:裸的並查集,比賽時候沒有注意到long long 到最後也沒過。

code:

#include#include#include#include#include#include#define inf 100000005

#define eps 1e-9

using namespace std;

const int max_n=100005;

const int max_m=2000005;

int par[max_n];

int high[max_n];

long long value[max_n];

void init(int n)

}int find(int x)

void unite(int x,int y)

return 0;

}

d 崔逗逗給你信心

思路: 我感覺這是一道比較好的題,多個步驟換換相扣。

(1)根據式子x^(2x)^(3x)可得,x^2x=3x     =>    x^2x=x+2x。2乘以x相當於將x二進位制表示的最高位上加1的位置上放乙個1,所以想要使等式成立就必須,x的二進位制表示不能有相鄰的1,因為如果有相鄰的1,則做加法的時候高位上會產生乙個1,而異或的話原來是1的位置將全部變成零。

(2)根據第一步的結論,我們需要做的就是判斷小於n的數中有多少個相鄰位置上不含一的數。我們以a[n]表示1~n位的二進位制數中有多少相鄰位上沒有一的數。可以得到乙個斐波那契數列就是 a[n]=a[n-1]+a[n-2]。預處理出這個數列再將每個帶待求的n處理成二進位制 ,從最高位向最低位掃,對於每個二進位制位為1的位i,如果其後面的位也是一就可以則res+=a[i]跳出;如果後面的位是0則res+=a[i-1],再繼續判斷其他位。

(3) 其中還有很多的細節地方,賽後我也是改了好久才過了這道題。

code:

#include #include #include #include#include #include #include #include #define inf 999999999

#define eps 1e-9

using namespace std;

const int max_m=200;

const int max_n=100005;

const int p=1000000009;

int a[100];

int bit[100];

int convert(long long n,int tt)

return cnt;

}int main()

if(bit[i]) res=(res+a[i-1])%p;

}if(bit[1]&&!flag) res++;

if(x==1) res++;

else res++;

printf("%d\n",res);

}}

e焦級長搭積木

思路:用dp的方法可以很快的求出來總步數,dp[i][j][k]=dp[i-k][j-1][k-1]+dp[i-k][j-1][k+1]  其中dp[i][j][k] 表示乙個i個積木搭成j層最底層k個的總數量。

之後就是求第k個排序,在這個地方卡了一下一直想不到比較好的方法,去看了一下菊苣們的題解知道了,就是對於每個位置判斷k和dp[n][h][m]的關係,前dp[n-m][h-1][m-1] 種序列對應的操作室將上一次層的數量-1,第dp[n-m][h-1][m-1]+1到dp[n-m][h-1][m+1]種序列對應的操作是上一層的數量+1,這樣我們不斷的更新跟新就能更新出第k種序列了。

code:

#include #include #include #include#include #include #include #include #define inf -1000000000

#define eps 1e-9

using namespace std;

const int max_n=545;

const int max_h=65;

const int max_m=20;

long long dp[max_n][max_h][max_m];

int n,m,h;

long long nn;

void solve()

}printf("%lld\n",dp[n][h][m]);

}void output(int n,int h,int m,long long k)

}return 0;

}

2014 BUPT 新生排位賽01

a 學姐的桌面 鏈結 思路 水題,有乙個坑就是怎麼輸出 這個字元,當時沒注意到自己的程式沒打這個字元直接交了上去wa了一次。code include include include include include define inf 10000 using namespace std const ...

2014 BUPT 新生排位賽05

a 平方的平均值 思路 超級大水題了,我都無語了,要注意到xi可能取負數,然後就沒什麼問題了,比賽的時候沒有注意到乙個int轉long long 先上wa的 include include include include include include define inf 10000000000 ...

2014 BUPT 新生排位賽09

a diffsum 大致題意 給你乙個數列,取出任意兩項求其差的絕對值,求所有組合的絕對值的和。思路 剛開始寫了乙個暴力列舉的方法,想水一水試試,結果意料之中的tle了,其複雜度是n 2,之後想了乙個nlogn的方法就是先對陣列進行排序 降序 在求出第一項和其他所有項的組合,之後的項的組合其實和前面...