【心得體會】11.16-11.22
tips
1、最大的迴文素數是9989899。
2、注意資料範圍,陣列不能開太大也不能太開小。(RE警告!)有時候不一定是給的資料的大小,要計算實際資料大小。
3、對於奇怪的WA錯誤,要注意輸出格式(末尾空格),有些OJ沒有PE的錯誤。
改進之處
1、除了訓練賽和USCAO系列,題量難度不夠,根據隊伍內部情況,下週開始加大圖論方面的學習,以補足隊伍中的圖論短板。
2、賽後補題存在拖延現象,原因:1、要補的題目學不會,補不了。2、補題花費時間不夠多。
3、連結串列指標方面掌握不熟練,可以找一部分題目進行訓練。
4、USCAO系列還是需要花時間去做一做的。
5、對於答題注意事項,每週心得會寫,但是主要還是在另外一個部落格裡面更新。
本週題單
USCAO系列
USACO Training 1.5.1 Number Triangles
數字金字塔,經典入門dp
USACO Training 1.5.2 Prime Palindromes
判迴文質數,這題RE好幾發,最後發現對迴文素數的估計不準確,陣列開太大了。(雖然本地編譯和洛谷能過,但是這一點還是需要值得注意一下吧,畢竟不知道什麼時候評測機卡
USACO Training 1.5.3 Superprime Rib
簡單二分+素數吧,比較簡單的一道題
USACO Training 1.5.4 Checker Challenge
n皇后問題,用傳統回溯法做的,有時間把位運算補上。
總結
以上題目是1.5的內容,都是比較簡單的題,但是在一些出鍋的細節上,也學到了一些東西把。有時間補1.4。
CF系列
本週算是打了兩場CF
一場是週日的div2
題解連結:https://www.cnblogs.com/Shayndel/p/13998829.html
一場是週四的EDU
題解連結:https://www.cnblogs.com/Shayndel/p/14017152.html
訓練賽
CCCC訓練第三場
本來是想針對這場比賽也寫個題解,但是本週有點沒時間了,就大概統計一下吧,除了最後幾道題,其餘算手速水題了。
7-1 求整數均值
從題目得知,是一道水題,算平均值
7-2 矩陣運算
矩陣除副對角線、最後一列和最後一行以外的所有元素之和
7-3 Hello World!
輸出Hello World!
7-4 考試座位號
對應每個需要查詢的試機座位號碼,在一行中輸出對應考生的准考證號和考試座位號碼
7-5 求1到N的和
題意同標題
7-6 谷歌的招聘
輸出 N 中最早出現的 K 位連續數字所組成的素數
特別的是用到了stoi()函式
7-7 整數算術運算
輸出兩個數的加減乘除取餘
7-8 西安距離
哈密頓距離,輸出兩個座標絕對值的和
7-9 Maximum Subsequence Sum
經典最大公共子序列
7-10 列車廂排程
棧模擬
7-12 二叉搜尋樹的2層結點統計
搜尋+連結串列
7-13 暢通工程之區域性最小花費問題
克魯斯卡爾最小生成樹
7-15 湊零錢
簡單dfs
總結
這套題難度相對來說較為簡單,三個小時,15道題,我過了13道。但是從這套題上發現,我在指標連結串列運用方面比較欠缺(雖然對比賽而言其實用不太到)但也發現是我自己的一個短板所在吧。
華東師範
這套題不太好做,週五的時候身體不舒服,狀態也不太行。過了BA之後就罰坐了
B. 輾轉相除法
https://acm.ecnu.edu.cn/contest/340/problem/B/
找一個數據,是所給程式碼的反例。由題意我們可以得到 30 70 105 這個反例。(但是我還是想了很久很久,30分鐘簽到)
A. 選擇題
https://acm.ecnu.edu.cn/contest/340/problem/A/
看了一年的中文題目,思路:每個年份肯定是有一些是正確答案有一些是錯誤答案,那麼這個年份能出的題就確定了,只要然後哪些人可以作為答案也是確定的
組合數搞一下就行了,一個年能出的題數是C錯誤答案取3*正確答案,對於一個年份,找到第一個大於等於當前重要年,找到第一個在這之後出生的人
程式碼:
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define ull unsigned long long
#define Mid ((l + r) >> 1)
#define lson (rt << 1)
#define rson (rt << 1 | 1)
using namespace std;
const int mod = 114514;
int read(){
char c; int num, f = 1;
while(c = getchar(),!isdigit(c)) if(c == '-') f = -1; num = c - '0';
while(c = getchar(), isdigit(c)) num = num * 10 + c - '0';;
return f * num;
}
int n, m, a[100009], b[100009], d[100009];
main()
{
n = read(); m = read();
for(int i = 1; i <= n; i++)a[i] = read();
for(int i = 1; i <= n; i++)b[i] = read();
for(int i = 1; i <= m; i++)d[i] = read();
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + n);
sort(d + 1, d + 1 + m);
int fans = 0;
for(int i = 1; i <= m; i++){
int l, r, p1, p2;
ll ans;
l = 1; r = n;
while(l <= r){
if(b[Mid] > d[i]) r = Mid - 1;
else l = Mid + 1;
}
p1 = r;
//n - p1個錯誤選項
//p1個正確選項
l = 1; r = n;
while(l <= r){
if(a[Mid] >= d[i]) r = Mid - 1;
else l = Mid + 1;
}
p2 = r;
//p2個正確人
if(n - p1 < 3)continue;
if(p1 < 1) continue;
ans = (n - p1) * (n - p1 - 1) * (n - p1 - 2) / 3 / 2;
ans %= mod;
ans = ans * (p1) % mod * (p2) % mod;
fans = (fans + ans) % mod;
}
printf("%lld\n", fans);
return 0;
}
WA了一發,這題告訴我,不開ll見祖宗。