2023年西北大學校賽題解

2021-07-27 22:51:56 字數 3583 閱讀 8569

這次其實打的不是很好,兩個小時a了七道題,但是第五題wa了42次,三個小時死磕,個人覺得並沒有任何問題,但是還是不知道為什麼錯哎。想法應該是一樣的,可能是細節問題吧。看了好久。感覺弱好弱,西交大佬都ak了。。。膜一發金牌爺。

第乙個要補的題就是 cf 740 a。之所以要說這個是因為當時校賽就沒做出來,然後這次也沒做出來。弱還是太弱。

主要思路:

分析:n對4取餘,可分為4種情況:(t = n % 4)(每個情況下考慮a,b,c的所有組合)

1、t == 0,則不必花錢買書。

2、t == 3,還需買1本,

(1)完全用a元買---------用a元買1本

(2)完全用c元買---------用3c元買9本(因為a可能很大,然後c很小)

(3)可以用b + c買-------用b + c元共買5本

(4)肯定不能完全用b元買,(因為b元買2本,無論怎麼買,總數都不會被4整除)

(5)此外肯定不能用a + b, a + c,a + b + c買,因為a元買1本即可達到目的,用a + b,a + c,a + b + c花的錢顯然比a多,而且沒必要買那麼多

3、t == 2,還需買2本,

(1)完全用a買-----------用2a元買2本

(2)完全用b買-----------用b元買2本

(3)完全用c買-----------用2c元買6本

(4)同理,沒必要用a + b,b + c, a + b + c買,因為b元買2本即可達到目的。也沒必要用a + c買,因為a + c買的是4本,不管怎麼買,總數都不會被4整除

4、t == 1,還需買3本,

(1)完全用a買-----------用3a元買3本

(2)完全用c買-----------用c元買3本

(3)用a + b買-----------用a + b買共買3本

(3)肯定不能完全用b元買,因為無論怎麼買,總數都不會被4整除

(4)同理,沒必要用a + c,b + c, a + b + c買,因為c元買3本即可達到目的。

#include#include#includeusing namespace std;

int main()

else if(s == 3) else if(s == 2) else if(s == 1)

printf("%i64d\n", ans);

}return 0;

}

第二題 是正式賽 e題;

怎麼說呢個人感覺不難,但是就是一直錯,這裡我把1當做up,0為down。

將當前的子串拆成前一半和後一半,如果所找的元素在後乙個半串中就遞迴到上乙個串中。否則就將flag取反然後遞迴上乙個串。直接到第乙個串就可以了。這裡我也不知道我的錯了,就貼上標程吧。

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

#define per(i,a,b) for(int (i) = (a);(i) >= (b);-- (i))

#define mem(a,b) memset((a),(b),sizeof((a)))

#define fin freopen("in.txt","r",stdin)

#define fout freopen("out.txt","w",stdout)

#define io ios_base::sync_with_stdio(0),cin.tie(0)

#define n 105

#define inf 0x3f3f3f3f

#define inff 0x3f3f3f3f3f3f3f

typedef long long ll;

const ll mod = 1e8+7;

const ll eps = 1e-12;

using namespace std;

int n;

ll p,dp[55];

void fuc()

}int dfs(int n, ll p)

int main()

return 0;

}

第三道題,就是也是乙個找規律題吧,但是當時一直磕上一道題,這道題就沒有太想。

i: 根據打表可以發現 1e6 以內的數最多迭代 12 次就可以結束。那麼我們可以將所有次數 12 以內的數字打表求出來。 然後在這個表裡面二分求解答案即可。 注意打表的技巧。 1、篩素數的時候可以把每個數的 f[i] 求得,用素數網的時候就順便把素數加起來。

sum[j

]+=i;

。 2、從小到大遍歷數字 2-1e6 的時候,可以求得 g[i] 。 i 為素數時 g[i]=1,否則 g[i]=g[f[i]]; (因為 f[i] <= i,且是從小到大遍歷的,所有比 i 小的 g[i] 都已經求得,遞推的思想)。

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

#define per(i,a,b) for(int (i) = (a);(i) >= (b);-- (i))

#define mem(a,b) memset((a),(b),sizeof((a)))

#define fin freopen("in.txt","r",stdin)

#define fout freopen("out.txt","w",stdout)

#define io ios_base::sync_with_stdio(0),cin.tie(0)

#define mid ((l+r)>>1)

#define ls (id<<1)

#define rs ((id<<1)|1)

#define n 1000000+5

#define inf 0x3f3f3f3f

#define inff 0x3f3f3f3f3f3f3f

typedef long long ll;

const ll mod = 1e8+7;

const ll eps = 1e-12;

using namespace std;

int t,a,b,k,sum[n],g[n];

bool isprime[n];

vector ans[20];

void fuc()}}

rep(i, 2, n-1)

}int main()

int l = lower_bound(ans[k].begin(), ans[k].end(), a)-ans[k].begin();

int r = upper_bound(ans[k].begin(), ans[k].end(), b)-ans[k].begin();

cout << r-l << endl;

}return 0;

}

k題是壓軸題。弱直接棄。。

長安大學校賽 2017

a 水 include using namespace std int a 10 int main int ans 0 while x printf d n ans return 0 b 貪心,每遇到乙個字元,將其移動到合理的地方。include using namespace std typede...

西北大學校賽B題 北境之都 三分

傳送門 題意 給定n座房子的高度,要求任意兩座房子的高度差在m以內,每個房子只能改變一次高度,將乙個房子的高度改變k公尺的花費是k 2萬元,求最低要花費多少萬元 思路 很明顯,將乙個房子的高度放在過高或者過低的都是不最優,而是中間的某個值,比如樣例就是45,所以我們可以三分一下最低高度x,然後x m...

湘潭大學校賽I

accepted 58 submit 349 time limit 5000 ms memory limit 65536 kb 作為一名即將畢業大學生,小明即將參加一系列的面試,每場面試都有乙個開始時間 si和乙個結束時間 ti。小明可以選擇參加面試或者放棄面試,但是遲到和早退是不允許的。每場面試對...