第二次周賽題解

2021-10-05 08:05:01 字數 3469 閱讀 8018

位址

a 組成三位數

列舉第乙個數,第二個數第三個數根據關係算出來,然後判斷是否合法就行了。

#include

#define rep(i, a, b) for(int i = a; i <= b; ++i)

using

namespace std;

int vis[10]

=;bool

fun(

int n)

return

true;}

bool

check

(int a,

int b,

int c)

intmain()

}return0;

}

這是牛思琦的全排列做法

// 

/*簽到題,沒什麼好說的。

不過第一次看到這道題的時候確實挺開心的,

因為以前了解了next_permutation和prev_permutation函式後

一直沒機會用,哈哈哈哈

*/#include

using

namespace std;

const

int n=

1e6+10;

int a[9]

=,cnt;

intmain()

while

(next_permutation

(a,a+9)

);return0;

}

b new year candles

這就是個數學題,每b根用過的能合成一根新的,模擬一下就可以了。

#include

using

namespace std;

intmain()

cout << cnt;

return0;

}

**c 均分紙牌 **

這題我不會,諾姐原話:這題不是看一眼就出來了???膜拜大佬

題目中求的是最快多少次,那麼你完全可以假定為最好情況,既每個大於平均數的數左邊比他小的數剛好和大於平均數部分相等。因為如果大於平均數部分比左邊欠的少的話,可以先通過右邊更多的給他一部分。所以每個數最多只會加一次。

#include

#define rep(i,a,b) for(int i=a;i<=b;++i)

using

namespace std;

intmain()

, sum =0;

scanf

("%d"

,&n)

;rep

(i,1

, n)

sum /

= n;

int tot =

0, cnt =0;

rep(i,

1, n-1)

} cout << cnt;

return0;

}

**d 質因數分解 **

注意判斷質數時候到 i * i 就可以了,否則會超時。

#include

#define rep(i, a, b) for(int i = a; i <= b; ++i)

using

namespace std;

bool

isprime

(int n)

for(

int i =

3; i * i <= n; i +=2

)return n>1;

}int

main()

}return0;

}

第二種方法,不是通解。

首先,題目中告訴我們了n是兩個質數的乘積。而我們知道兩個質數的最大公約數是1,即n只有這兩個質數為因子(1除外),那麼我們可以直接一遍遍歷遇到能整除的就是答案了。

#include

#define rep(i, a, b) for(int i = a; i <= b; ++i)

using

namespace std;

intmain()

}return0;

}

**e jury size **

如果你看懂題目了的話,這就是乙個貪心。用map,可能因為有上一年的會是負數。

當然用陣列也可以,只不過你要初始化的時候先加乙個比ti大的數字。題目中100及以上都可以。

#include

using

namespace std;

int date=

;int

fun(

int m)

return res;

}int

main()

} cout << res << endl;

return0;

}

**f regular bracket sequence **

判斷有多少個合法括號序列,那麼首先一種思路就是用棧模擬一下。

#include

using

namespace std;

intmain()

}}cout << ans;

return0;

}

還可以對空間進行優化,因為只有左右括號,所以我們可以用乙個變數記錄某種括號數量。o(1)空間複雜度

#include

#define rep(i, a, b) for(int i = a; i <= b; ++i)

using

namespace std;

const

int maxn =

1e6;

char s[maxn]

;int

main()

}printf

("%d"

, ans)

;return0;

}

**g 合併果子 **

首先乙個思路就是每次選最小的兩個合併,那麼整體肯定是最優的。

如果用兩重for時間複雜度很高。用優先佇列可以優化到o(nlogn)。

和這題 修理牧場 思路完全一樣

#include

#include

#define rep(i,a,b) for(int i=a;i<=b;++i)

using

namespace std;

intmain()

int sum =0;

while

(q.size()

!=1)printf

("%d"

, sum)

;return0;

}

第二次周賽題解

e題,不懂的看新生訓練題解 includeint main return 0 d題,乙個預處理就ok includeint a 1000005 int main int t scanf d t while t return 0 c題,打表找下規律,會發現是以1 1 2 0 2 2 1 0為迴圈 in...

第二次周賽B

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0sample input 21 2 3 6sample ou...

第二次周賽Problem C

在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數.例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下圖 輸入資料由多行組成,每行包含乙個整數n,表示該測試例項的長方形方格的規格是2 n 0題解 列出1 1,2 2,3 3,4 5,5 8可以看出a n a n 1...