5 27 考試修改 總結

2022-05-31 06:30:08 字數 4829 閱讀 1454

這是乙個悲傷的故事

上午寫manacher的時候往裡面加#號,然後統計有效字元的個數

然後我就開始模擬,乙個長度為6的串我都能數錯有多少個有效字元

我把2個字元數成了3個!然後暴力就掛掉了5分。。

為什麼這幾天的暴力總是會掛掉,真是奇怪(看來是最近自己內心不太穩了

(大概是被那個夢嚇得吧qaq)

今天又a了兩道題目,感覺天天都是兩道正解+掛掉的暴力qaq

先放題解吧

第一題是之前數字dp坑掉的題目,然後今天嘗試著寫了寫,感覺不是很難

但是並不是用數字dp做的

先考慮加密的情況,我們只需要統計每一位0,1出現的次數就可以了

然後這個隨便搞一搞就能搞出來

考慮不加密的情況,不難發現如果從某一位開始不貼上界的話,那麼後面都可以通過^變成1

然後分情況討論這一位上界是0和這一位上界是1就可以了,模擬一下小資料就可以寫出來了

寫完之後以為題目的1e-5是絕對誤差,然後就開始瘋狂調精度

最後差不多差距1e-2,然後發現題目說的是相對誤差qaq 浪費了好長時間

得到了一些奇怪的調精度的方法,譬如輸出long double的時候強制轉成double會損失些精度

我們可以先用long long輸出整數字,然後轉double輸出小數字

#include#include#include#include#include#include#define eps 1e-8

using namespace std;

typedef long long ll;

ll n;

double k;

long double p;

long double p1,p2;

long double a,b,c;

int num[72],len=0;

ll f[72][2];

ll suf[72];

void check(ll n)

while(n)num[++len]=(n&1),n>>=1;

}bool judge()

int main()

f[i][1]+=suf[i-1];

}else f[i][0]+=suf[i-1];

}for(int i=1;i<=len;++i)

p=p1*p+p2*(1.0-p);

tmp=(ll)(p);

printf("%lld.",tmp);

p-=tmp;p*=1e10;

printf("%010.0lf\n",(double)(p));

return 0;

}

第二題是bzoj的原題,久仰大名但是從來沒寫過

今天一看發現是絲薄題,五分鐘就秒掉了

然後寫了大概20min左右拍上了,卡了卡常數就沒有管

首先我們考慮b是a的祖先,那麼b有多少個很容易算,滿足條件的c就是a的子樹大小-1

之後考慮a是b的祖先,我們先思考一下如果沒有k的限制,這樣的話類似haoi2015 t1化一下式子算貢獻就可以了

具體是這樣的:每個點x作為c對a的答案貢獻是(dep[x]-dep[a]-1)

因為dep[a]+1和子樹大小都是常數,我們只需要用線段樹統計子樹dep的和就可以了

考慮k的限制,不難發現實際上是給這個題目加了一維深度,即統計貢獻的x在dep的某個區間裡,其餘的不在這個區間的x的貢獻都是k

把線段樹換成可持久化線段樹就可以了

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=300010;

int n,m,u,v,now,k;

int h[maxn],cnt=0;

struct edgeg[maxn<<1];

int pos[maxn],ed[maxn],tot=0;

int dep[maxn],siz[maxn];

int tmp[maxn];

int rt[maxn],sum=0;

struct seg_treet[11000010];

bool cmp(const int &x,const int &y)

void add(int x,int y)

void read(int &num)

void get_dfs(int u,int f)ed[u]=tot;return;

}void build(int &o,int l,int r)

void upd(int &o,int l,int r,int p,int v)

int mid=(l+r)>>1;

if(p<=mid)upd(t[o].l,l,mid,p,v);

else upd(t[o].r,mid+1,r,p,v);

t[o].v=t[t[o].l].v+t[t[o].r].v;

t[o].s=t[t[o].l].s+t[t[o].r].s;

}int ask_v(int o,int l,int r,int x,int y)

ll ask_s(int a,int b,int l,int r,int x,int y)

int main()

}while(m--)

return 0;

}

第三題考場上犯逗,暴力掛掉了5分qaq

首先如果存在乙個串是回文串,答案是inf

之後我們考慮乙個回文子串要滿足什麼條件可以擴充套件,顯然這個回文子串要有一側碰到邊界

那麼對於這個串就會剩下右半部分或者左半部分

我們拿別的串去拼剩下的部分就可以了

考慮用圖論模型來描述這個概念,我們對於每乙個位置用兩個點分別表示剩下左邊和剩下右邊

用邊來表示可拼接的轉移

我們新建乙個節點源點向每個碰到邊界的回文子串的另乙個邊界點建邊

注意空串也是乙個回文串,所以也要額外建邊

之後我們考慮串與串之間的轉移情況,設a表示有回文子串的串,b表示另乙個用來拼接的串

分類討論如下:

1、拼接後都不碰到邊界,顯然不可在擴充套件,為了方便統計答案我們向匯點建邊

2、拼接後a碰邊界,b不碰,a的點向b的對應點建邊

3、拼接後a不碰邊界,b碰邊界,a的點向a中匹配b之後的點建邊,表示還可以繼續匹配

4、都碰邊界,a和b形成了乙個回文串,答案為inf

之後我們得到了乙個圖,對於這個圖由於每條邊都表示乙個可行的轉移

即如果這個圖有環那麼答案為inf

否則從s求最長路即為答案

至於判斷是否可拼接用字串相關的資料結構隨便就搞定了

本來想自己寫寫練練碼力,結果寫完之後發現一堆邊界搞錯,下標搞混的問題

這真是乙個悲傷的故事

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=200010;

int n,m,h[maxn],cnt,blo;

int bin[20],lgl[maxn];

int len[maxn],slen[maxn];

int l[maxn],r[maxn];

int sa[maxn],rk[maxn],height[maxn];

int st[20][maxn];

int wa[maxn],wb[maxn],wv[maxn],tmp[maxn];

int s[maxn];

struct edgeg[30000010];

void add_edge(int x,int y,int z)

void get_sa(int *r, int n, int m)

}void get_height(int *r,int n)

int ask(int a,int x,int b,int y)

int s,t,tmp;

ll dis[maxn];

int deg[maxn],q[maxn];

bool vis[maxn],in[maxn];

bool check(int u)return in[u]=0;

}int get_id(int x,int y)

void add(int a,int x,int b,int y,int w)

char str[maxn];

int main()

} for(int j=2;j<=len[i];++j)

} add(0,0,i,1,0);

add(0,0,i,-len[i],0);

for(int j=1;j<=len[i];++j)

if(wf>0)add(i,j,-1,0,wf);

if(wr>0)add(i,-j,-1,0,wr);

} }if(!flag||check(s)||vis[tmp])ans=-1;

else

} }if(ans==-1)printf("infinity\n");

else printf("%lld\n",ans);

return 0;

}

考試總結:

1、第三題的5分丟的太可惜,如果考試的時候在認真一點就好了

2、看題不仔細導致因為相對誤差的事情浪費了大概乙個半小時左右

3、最近由於題目比較簡單,很容易想出正解

養成了想不出正解就不是很想寫題的壞毛病,於是心態不穩,暴力就總是會出問題

從明天開始不管怎麼樣,都要認真對待每一道題目,哪怕是暴力也要寫的優美,爭取能拿到最高的分數

還有兩個月啦,加油!

(兩個月換三個月,貌似很值?

坑掉的東西:字串專項訓練

6 15 考試修改 總結

昨天考崩了qaq 幾乎寫全了暴力分,然而並沒有什麼卵用 因為只要a掉一道題就比我分高了,比我分高的也至少a掉了一道題qaq 感覺到一絲淡淡的憂桑 貌似thusc最後聽講課的那些人幾乎都a了兩題 看來我的thusc果然只是rp好啊 第一題顯然選色數最少的顏色,設顏色數為m 考慮存在某個點的方案數,設這...

5 31 考試修改 總結

qaq 迷 卡常數的一天 qaq 第一題裸的多重揹包,果斷寫單調佇列 20min拍上,分析時間複雜度o t n m 感覺根本不虛 然後就被卡常數了,然後出題人喪心病狂把我卡成了60分 評測機太渣渣了qaq話說改成3s我就a了啊qaq 不過貌似就算a了 我還是rank4 單調佇列的做法就不再說了 然後...

5 27 女生賽總結

好的吧,真的是有史以來第一次出去比賽 好像大家都也還是給予厚望的,女生賽。前面過了兩個其實還好吧 最後卡,卡到兩三個題後來還是出不來了。我們刻意避開了 打鐵關 但是還是打鐵了qaq,zj說dp的方程明明都寫對了啊。他們t了那是因為暴力,這種錯法我還是第一次見啊。去之前自己還帶了自己列印的1 3部落格...