problem a
不會排序?對不起,我無可奉告。
problem b
每個人操作的過程可以這麼描述:遇到第乙個0之前,將路上所有的1變成0,並將第乙個0變成1,不難發現這其實相當於二進位制的加一操作。共m次操作則相當於把m轉為二進位制然後輸出末n位。
#include
using
namespace
std;
typedef
long
long ll;
int a[65];
int main()
for (int i=n;i>=1;i--) printf("%d",a[i]);
}
problem c
首先不難設計出平方級的演算法:i列舉n,j列舉t,然後直接累加即可。如果畫個圖就可以發現,j多次掃瞄過了同一點,所以可以將i與j的父子關係轉為兄弟關係,用單調隊優化。
#include
using namespace std;
const int maxn=1000000+5;
intm[maxn],t[maxn],q[maxn];
int main()
printf(" %d",ans);
}}
problem d
裸的威佐夫博弈。
我們用(ak,bk)(ak ≤ bk , k = 0,1,2,…,n)表示兩堆物品的數量並稱其為局勢,如果甲面對(0,0),那麼甲已經輸了,這種局勢我們稱為必敗局勢。前幾個必敗局勢是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。可以看出,a0 = b0 = 0,ak是未在前面出現過的最小自然數,而 bk = ak + k。
必敗局勢有3條神奇的性質:
1、任何自然數都包含在乙個且僅有乙個必敗局勢中。
證明:由於ak是未在前面出現過的最小自然數,所以有ak > ak-1 ,而 bk= ak + k > ak-1 + k-1 = bk-1 > ak-1 ,所以性質1成立。
2、任意操作都可以將必敗局勢改為非必敗局勢。
證明:若只改變必敗局勢(ak,bk)的某乙個分量,那麼另乙個分量不可能在其他必敗局勢中,所以必然是非必敗局勢。如果使(ak,bk)的兩個分量同時減少,則由於其差不變,且不可能是其他必敗局勢的差,因此也是非必敗局勢。
3、採用適當的方法,可以將非必敗局勢變為必敗局勢。
可以想到,兩個人如果都採用正確操作,那麼面對非必敗局勢先拿者必勝;反之則後拿者取勝。
如何判斷乙個局勢是否必敗呢?我們有乙個公式:ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,…,n 方括號表示取整函式)。
具體做法:對於局勢(x , y),判斷 x ?= ((y-x)*(sqrt(5)+1)) / 2 向下取整。
#include
#include
using
namespace
std;
int main()
特長生模擬 採藥
題目大意 凡凡要去採藥,他採的藥不僅要求揹包的總空間v能放得下所採的藥,還要求藥草的總質量不能超過凡凡所能承受的範圍m。現在給出n種珍惜的藥材,對於每個藥材凡凡都會精準地目測出其質量a i 體積b i 和價值c i 求凡凡所能採到的藥材的最大價值。注意 每種藥材只有乙個。30 資料,所有藥草質量a ...
5 14特長生模擬 朋友
mxy 即將前往新世界。在前往新世界的過程中,ta 遇見了兩種人。一種是只和lowb 做朋友,即當且僅當自己 的能力值大於對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力 值小於對方時他們會成為朋友。現在告訴你兩種人的能力值。請你計算一共有多少對友好關係。排序 二分,因為排好序了,...
5 14特長生模擬 門票
mxy 正要經過新世界的大門。現在有很多人在門口排隊,每個人將會被發到乙個有效的通行密碼作為門票。乙個有 效的密碼由l 3 l 15 個小寫字母 a z 組成,至少有乙個母音 a e i o 或 u 和兩個子音 除去母音以外的音節 並且是按字母表順序出現的 例如,abc 是有效的,而 bac 不是 ...