這場比賽賽後反應坑點很多,比如資料太弱,比如各種坑。。。。然而對自己的練習價值還是很大的
先分析每個題,再來分析比賽
a:水題:每個開根號判斷就好了
int main()
if (flag) puts("yes");
else puts("no");
} return 0;
}
b:題意:定義進製,問n個數,兩兩相加之後共會有多少個進製總數
腦洞數學題,拿個數舉例子的話,68823:
要找尾數3的進製,要找其他數的個位大於等於7的
要找尾數23的進製,要找其他數的個位大於等於77的
要找尾數823的進製,要找其他數的個位大於等於177的
要找尾數8823的進製,要找其他數的個位大於等於1177的
要找尾數68823的進製,要找其他數的個位大於等於31177的
現在的思路已經有了,把每個數的尾數全部截出來,然後跟其他的數的同樣長度的尾數進行比較,看看能不能進製。。
但是這樣的時間是o(n^2)的
但是,我們用最簡單的辦法減小複雜度!~二分!
所以,最終的方法為,每個數擷取同樣長度的數字,各個數字單獨從小到大查詢自己所需要的「補數」,如823找大於等於177的(但是有個細節,找的時候可能會找到「自己」,待會處理),然後累加即可
上**:(處理點為 ans - - 的**)
vectorg[20];
int x[maxn];
inline void in(int &x)
}int main()
} for(int i=1;i<=9;i++) sort(g[i].begin(),g[i].end());
ll ans=0;
for(int i=1;i<=n;i++)
} printf("%lld\n",ans/2);
} return 0;
}
c題:字串,給定a和b串,要求在b串中找到a串第一次出現的位置然後刪除,將其未刪除的左右兩部分合併之後繼續操作,問最後還剩下哪些字元
這個演算法的精髓就是next陣列,因為在暴力操作中一旦匹配失敗是退回到初始位置繼續,而next陣列的處理之後能夠退回到「」最有可能"再次匹配的地方(利用之前所有的匹配資訊),弄懂了這一點,這個題就好做
然後,很明顯,需要kmp_pre處理a串,然後把b串中的匹配字串刪除,未匹配的存在乙個新的字串中,仍然維護b在a中的next陣列
**如下(特別簡潔):其中pos陣列仍然代表失去匹配之後下個位置去哪兒找
void kmp_pre(char x,int m,int next)
} return i;
}char pat[n],src[n];
int main()
return 0;
}
d題:最小點覆蓋
弱用二分圖匹配水過,,,然而並不能正確的,但是弱弱在這貼個板子
int un,vn;
int g[maxn][maxn];
int linker[maxn];
bool used[maxn];
bool dfs(int u)
} return false;
}int hungary()
return res;
}int main()
un=vn=n;
printf("%d\n",hungary()/2);
} return 0;
}
vectoradjs[maxn];
int last[510];
bool mat[maxn][maxn], vis[maxn];
int n, m;
int res;
bool mustselect(int u)
void dfs(int u, int c) else
dfs(u + 1, c + t);
foreach(it, adjs[u]) if(last[*it] == u)
last[*it] = -1;}}
}int solve()
int main()
n = min(n, 30);
printf("%d\n", solve());
}return 0;
}
e題:完美數學題
首先可知,乙個任意的長為x寬為y的矩形,如果可以放入n*m的矩形中,那麼方案數為(n-x+1)(m-y+1)
現在開始分析:由於對稱性,簡化細節,保證n大於等於m(如果n那麼,對x和y的限制有三條,x小於等於n,y小於等於m,2(x+y)小於等於k,可知取min()
由於n和m的範圍限制,我們可以列舉一維再做考慮,不妨列舉x
則有x的範圍為1到min(n,k/2)
那麼y的範圍是1到min(k/2-x,m)
迴圈中不能對y迴圈,但是,發現!!y是從1開始連續的,把公式拆成(n-x+1)(m+1)-y(n-x+1)
y的變化是知道的!所以只需列舉x即可,y得到最大值就可以算出上述的值
int main()
void modify(int x,int val)
}int query(int x)
return res;
}void init(int n)
} memset(tree,0,sizeof(tree));
rmax[n+1]=0;
for(int i=n;i>0;i--) }}
int solve()
void add_edge(int u, int v)
int dis[maxv];
int solvea() }}
return dis[n];
}int cnt[maxv];
int solveb() }}
d += b;
if(viscnt == upper) break;
}return dis[n];
}int main()
if(a < b) printf("%d\n", solvea());
if(a == b) printf("%d\n", a);
if(a > b) printf("%d\n", solveb());
}}
(雖然比賽的時候各種水的姿勢都能過。。。然而,賽後學到方法為好)
j題:暴力列舉題
從(0,0)開始,根據題意,暴力找石頭看看會不會撞到,如果會,找乙個最近的提前轉彎
注意細節點:(1)最大值不夠大,在比較點的時候會wa(2)4種方向的最大最小不同,而且求最近
struct node
node[2000];
int main()
}if(t!=0) now.x=node[t].x-1;
} if(now.tow==1)
}if(t!=0) now.y=node[t].y-1;
} if(t==0){
cout<
今天,中國籃球又讓我找到了自己的興奮點!明天加油!
省賽選拔賽 個人賽第一場
rank 6,一共ac了6題,其中5道1y。感覺這場比賽打得還可以,能出的題都出了,就是一開始選題出現了問題,先去做了dp,導致很多水題出的晚了,時間上佔了劣勢,好在前5道題ac的題都是1y,沒有很多罰時。ac6題之後,看其他題都沒什麼思路,與學長們在知識儲量上的劣勢馬上表現出來了,學長們繼續打 出...
XDU 2017省賽選拔第一場
因為校賽很炸只過了3題,然後組隊參加省賽選拔的要求是大1隊存在4題或以上,大2隊存在5題或以上,所以自己並沒有組隊權,所以必須抱大腿了 打完的當天晚上就去和體育部的老鐵們聚餐去了,心情比較低迷吧,然後組隊什麼的沒去理。然後晚上問了幾個人發現原來已經組好隊的,這讓我內心很絕望。然後就拉了體育部乙個不打...
2015寒假集訓周賽第一場 F 題
description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。給定乙個包含n n 3000 個正整數的序列,每個數不超過5000,對...