省選模擬15

2022-09-21 12:15:09 字數 2768 閱讀 1153

關於這次考試如此爛,就是只有暴力分,只能說是啥也不會

考試的時候只有\(\mathcal\)的暴力,只能過掉沒問號的第乙個點

發現可以由前面的數字得到關於當前球的顏色的乙個函式

於是我們可以線性判斷乙個序列是否合法,然後考慮在這個基礎上dp

然而我們一般想的是直接把判斷是否合法變成當前狀態的方案數就行了

但是寫著寫著就發現,好像方案數記的不是序列個數,而是序列個數乘上操作的方案數

我們開始考慮如何去掉操作的方案數,然後失敗了......

但是我們發現,乙個序列會對應好多的合法方案,但是在你判斷是否合法的那個狀態中只對應了乙個狀態

所以我們將判斷是否合法的那個狀態全部壓縮到dp中,也就是dp套dp

這樣的話,乙個序列只會唯一對應乙個狀態

ac_code

#includeusing namespace std;

#define int long long

#define fo(i,x,y) for(int i=(x);i<=(y);i++)

#define fu(i,x,y) for(int i=(x);i>=(y);i--)

int read()

while(isdigit(ch))

return s*t;

}const int mod=998244353;

void mo(int &x)

const int n=1e5+5;

int t,n,lim,xl[n],ans;

char ch[n];

int f[n][2][2][2][2];

int dp[2][2][2];

void sol(int i,int p,int q,int l,int r,int o,int x)

mo(f[i+2][dp[1][0][0]][dp[1][0][1]][dp[1][1][0]][dp[1][1][1]]+=f[i][p][q][l][r]);

}signed main()

while(isdigit(ch))

return s*t;

}const int n=2e5+5;

int n,m,ans,lim;

struct ee[n*2];

int head[n],rp;

void add_edg(int x,int y)

int dep[n],mdp[n],mxd,tid,id,md,zd,rt;

void dfs_a(int x,int ff)

}bool ifzj[n];int f[n],g[n];

void dfs_b(int x,int ff)if(dep[x]-1==(mxd-1)>>1&&ifzj[x])zd=x;

}void dfs_zd(int x,int ff,int r)

}void dfs_dp(int x,int ff)

}int siz[n],son[n],top[n],fa[n];

void dfs_fi(int x,int ff)

}int dfn[n],dfm[n],cnt,idf[n];

void dfs_se(int x,int ff)dfm[x]=cnt;

}struct xds

void pushdown(int x)

void build(int x,int l,int r,int tp)

void ins(int x,int l,int r,int ql,int qr)

if(tag[x])pushdown(x);

int mid=l+r>>1;

if(ql<=mid)ins(ls,l,mid,ql,qr);

if(qr>mid)ins(rs,mid+1,r,ql,qr);

pushup(x);return ;

} int query(int x,int l,int r,int ql,int qr)

#undef ls

#undef rs

}xdsf,xdsg;

int lca(int x,int y)

while(isdigit(ch))

return s*t;

}const int n=2e3+5;

const int m=6e3+5;

const int inf=0x3f3f3f3f;

int n,m,s=8e3+1,t=8e3+2,lim,ans,sum;

struct ee[(m*3+n)*2];

int head[n+m],hea[n+m],rp=1;

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

int ji[n],je[n+m],dis[n+m];

bool bfs()

} return false;

}int dfs(int x,int in)

return in-rest;

}void sol(int id)

} }sum-=e[ji[id]^1].val;

e[ji[id]].val=e[ji[id]^1].val=0;

while(bfs())sum+=dfs(s,inf);

if(m-sum-lim>-lim)ans=true;

}signed main()

fo(i,1,n)memcpy(hea,head,sizeof(head));

fo(i,1,n)

if(ans)printf("yes");

else printf("no");

return 0;

}

考試 省選15

感覺做了個csp模擬地說。t1這個題比較難。首先發現對於乙個數來說 我們貪心的剪掉所有位上最大的哪乙個是對的。具體證明見課件,這裡略過。設 dp mx len w 為當前是第len位,len以前的位上的最大值為mx,當前位為w的答案,然後再記錄乙個餘數即可。轉移的時候從高向低剪掉這一位,最終使得這一...

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...

省選模擬96

容易發現當 k 3 時無解。然後容易證明當 k 3 時,只有 m 3 才是有解的。然後直接做不好做,考慮欽定然後容斥出合法方案。對於 k 3 列舉乙個點,然後計算另乙個的方案數。其他情況類似,欽定滿足條件的角,然後容斥。然後對於每乙個 o n 的式子用組合恒等式大力化簡就可以做到 o 1 了。考慮每...