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的方法就是先對陣列進行排序 降序 在求出第一項和其他所有項的組合,之後的項的組合其實和前面...