2017 10 9離線賽總結

2021-08-09 03:59:21 字數 1561 閱讀 8941

思路:一道很水的題目,隨便怎麼搞(向兩邊擴充套件或o(n)預處理)。然而我偏偏太過於自信,o(n)預處理時最後乙個區域的r忘補充了(一敲起水題來就管不住這雙手…)。

思路:一道十分有趣的dp,雖然dp很明顯,但需要找到其中的規律,結果是要字首和維護字首和…(欺負我讀書少…)卡了我超久,最後只寫了o(n^2),沒有用hash優化(o(n))。

思路:簡化題意,就是判兩條路徑是否相交。而假設兩條路徑相交,那麼以任意一條的任意端點為根,交點一定是另一條路徑的兩個端點的lca。

此時,就冒出了乙個神奇的貪心(正確性玄乎),將lca的深度從大到小排序,每個路徑經過就mark掉。

#include

#define rep(i,f,t) for(int i=(f),i##_end_=(t);i<=i##_end_;i++)

#define drep(i,f,t) for(int i=(f),i##_end_=(t);i>=i##_end_;i--)

#define n 100005

#define m 20

#define p 1000000007

#define inf 0x3f3f3f3f

#define ll long long

// ll mod

using

namespace

std;

int n,m;

int fa[m][n],dis[n];

bool mark[n];

vector

e[n];

struct node

}q[n];

//struct p_list

// }es[n];

// bool check()

// void dfs(int x,int f,int d)

// }

// void solve();

// sort(es+1,es+1+m);

// int now=1,i=1,ans=0;

// while(now<=dep)

// cout////

//}p_list;

struct p100

}void up(int &x,int step)

void dfs(int x,int f)

}void init()

sort(q+1,q+m+1);

}void solve()

cout

rep(i,1,m)scanf("%d%d",&q[i].from,&q[i].to);

// if(p_list.check())p_list.solve();

// else p100.solve();

p100.solve();

}int main()

小結:

最近幾場考得很不穩定,忽高忽低地,每次不是第1題沒ac就是第2題暴力打錯了,第3題不用說了,沒爆0就可以了…

這說明這自己的思維很不嚴謹呀!確實,第1、2題經常是沒對拍的,或者說有時候連暴力都不好寫…這又體現自己的dfs、全排列還不行呀。

2017 7 29 離線賽 總結

本著貪心的思想,我先斜著走到頂,然後直走到終點,顯然這是最優的,但是我忽視了斜著走的最後一步可以和直著走的第一步合併,我錯誤地把兩個過程分開了。假如我當時多找幾組資料來模擬說不定能找到這個錯誤,我也沒敲個暴力來對拍 因為暴力太長了 我得到的教訓是 不能肯定自己演算法的正確性是,不如敲個暴力對拍一下,...

離線賽20171006總結

這次考得還不錯,頗有些遺憾的是因為第一題我離正解已經很近了,可惜考試畢竟是考試,一開始的題目看錯沒看到相鄰的條件浪費了很多時間,到後來就沒有時間去寫正解了。這畢竟也是一種實力,不能說題目看錯失誤問題就不大。上次的考試兩個輸出只能模乙個沒看到導致少了70分。這種失誤還是太低階了,也太致命了。這種題目看...

2017 10 7離線賽總結

失分小結 估分 玄學 實際分數 300 收穫 寫題前仔細分析題目,好好思考 考試過程 第一題真的想不到,只好打個表,結果由於資料半天沒輸出來,心態 有前前後後折騰了半個小時 第二題先是打了個n n暴力,又調了半天,這時考試只剩下兩個小時 第三題思考了大約十分鐘,然後想到了正解,實現比較快,乙個小時就...