這次其實打的不是很好,兩個小時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。 2、從小到大遍歷數字 2-1e6 的時候,可以求得 g[i] 。 i 為素數時 g[i]=1,否則 g[i]=g[f[i]]; (因為 f[i] <= i,且是從小到大遍歷的,所有比 i 小的 g[i] 都已經求得,遞推的思想)。]+=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。小明可以選擇參加面試或者放棄面試,但是遲到和早退是不允許的。每場面試對...