原创 判斷一個點與直線的相對位置

定義:平面上的三點P1(x1,y1),P2(x2,y2),P3(x3,y3) S(P1,P2,P3)= (x1-x3)* (y2-y3) - (y1-y3)*(x2-x3) 令矢量的起點爲A,終點爲B,判斷的點爲C, 如果

原创 賽後總結(Codeforces Round #399 Div. 1)

C.沒有什麼好說的直接計數排序即可 D.好好複習一下概率DP(白學了) 我們好好看看想想:對於每一天會隨機等概率產生一個魔法球:我們可以想到什麼 概率Dp沒錯吧: e[i][j]=e[i][j−1]∗i/n+e[i−1][j

原创 20170703練習賽比賽總結

C 思路 我們發現對於max直接暴力即可 可是對於最小值就沒有辦法了 我們可以二分黨派獲得的票數 可是,由於有5%的限制,直接二分不可行 此時我們可以思考一下終態: 一定會有一定數量(c) 的黨派有一定(x) 數量席位 想到這

原创 KMP

應用範圍 對於一個匹配串(S)和單個或多個母串(B)的問題 流程 先對匹配串造fail數組和AC自動機中的fail類似,即以失敗的節點爲右端點的 複雜度約爲O(n+m) void pre(){ fail[1]=0

原创 線段樹的合併

原理和思路 思路 我們常常會遇到一些問題對於每一個點都有它的一些信息 然後我們需要查詢一段區間 或者是樹上一個點的子樹信息 此時我們便可以通過線段樹的合併來解決這些問題 原理 我們通過把信息合併以後,利用合併後的線段樹來

原创 2017.05.14練習賽賽後總結

D 存在的問題 這題想歪了,已經分析出枚舉4個頂點後用G[x][y]計算卻在如何判斷重複邊的情況上面沒有理清思路 同時在該題卡了30分鐘後就有了消極的情緒,沒有專心思考導致思路不清晰 /* 如圖 枚舉一個沒有相同邊

原创 20170531練習賽比賽總結

A 比較明顯的斜率Dp題卻被這一題卡死了 反思 對於Dp的狀態轉移一定要仔細的思考,一定要寫出準確的表達式, 例如該題:dp[i]=dp[j]+∑ia=j(T[i]−T[a])∗P[a] 把表達式寫得越規範越清晰,成功發現

原创 CodeForces 768F Barrels and boxes

#include<bits/stdc++.h> using namespace std; const int N=2e5+5,P=1e9+7; int fac[N],ifac[N],inv[N],f,w,h; void pre()

原创 SRM 559 Div1 500 HatRack

/* 計算出每個節點對應子樹的方法相乘即可 */ #include<bits/stdc++.h> using namespace std; typedef long long ll; #define M 55 int

原创 SRM 562 Div1 500 CheckerFreeness

/* 通過枚舉一對黑點(l,r)。 我們可以計算出其他所有白點和他們的相對位置(用叉積表示) 我們把剩餘的白點以和直線(l,r)的左右位置分成兩部分 我們用pos表示在線段l -> r左側的點,

原创 一九八四

Tarjan算法 我們發現對於一些在圖上操作和查詢的問題,有時我們可以通過Tarjan來的實現。 這裏我們針對利用Tarjan解決有關圖的聯通的問題 思路 我們發現把一個圖轉換成一個樹的時候,點的聯通情況是不變的。 流程

原创 POJ 2151 Check the difficulty of problems

/* 我們很容易得到e[i][j]表示做了前i題A了j題的概率 於是我們可以用s[i][j]記錄e[m][(0~j)]的前綴和即表示第i隊的 A(0~j)題的概率 */ #include<stdio.h> #i

原创 20170606組隊賽比賽總結

B 思路 我們發現對於每個數只有 1<<10 種狀態,直接Dp 即可 沒有想該題(甩鍋) C 思路 同時由於題意,我們發現每個循環的上下界只會有一個被其他循環限制 很容易發現每個循環可以形成一個拓撲序(或者樹形的結構)

原创 [青蛙的約會 ]拓展歐幾里得解同餘方程

青蛙的約會 題目描述 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面爲止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也

原创 專題:關於搜索優化——A*和雙向廣搜

關於搜索的優化 搜索的問題可能在搜索的思路方面很難有(很難想到)什麼大的優化,其思路可能和水分的思路是大同小異的。 搜索的限制條件有兩個 空間:我們需要通過仔細的挖掘狀態的規律,量化狀態來壓縮內存。 時間:我們可以通過不同的搜索方式和