UOJ Easy Round 2 簡要題解

2021-07-02 15:46:51 字數 3225 閱讀 1119

找規律可以發現,只有$表示式的話,fork()會產生3臺手機,fork()$fork()會產生4臺手機,fork()$fork()$fork會產生5臺手機……依次類推。

那麼我們可以用|把若干個連續的$塊分割開,每個長度為

x 的$塊會產生x−

1個結果為0的表示式,

1 個結果為1的表示式,那麼我們可以從右邊往左邊遞推,假設共to

t個$塊,可以得到f[

i]=[

i,to

t]段$塊產生的手機個數,容易得到dp方程: f[

i]=(

num[

i]−1

)f[i

+1]+

1,nu

m[i]

=第i段

連續的$

的長度

#include 

#include

#include

#include

#include

#define maxn 410000

#define mod 998244353

using

namespace

std;

typedef

long

long

int ll;

ll total=0;

int ans[maxn],n;

char s[maxn],op[maxn];

char ch[10];

ll stack[maxn];

int top=0;

ll f[maxn];

int main()

for(int j=1;jscanf("%s",ch);

if(ch[0]=='&')

op[j]='&';

else op[j]='|';

}int h=1,t=1;

ll tmp=2;

while(hif(op[t]=='&') tmp++,t++;

else

}stack[++top]=tmp;

f[top]=stack[top];

for(int i=top-1;i>=1;i--)

f[i]=(f[i+1]*(stack[i]-1)%mod+1)%mod;

printf("%lld\n",f[1]);

return

0;}

蒟蒻太弱,只會做40分的。。。。

前10分可以通過爆枚序列

b 的全排列得到。

之後30分可以列舉

i的謠言終結者b[

i],然後求出

i 的影響係數,容易發現這就是乙個二分圖最小/最大權匹配問題,對於點

i而言,將它的入點與所有的j(

j≠i)

的出點連邊,邊權為

j 作為b[

i]的情況下

i 的影響係數,然後做費用流或km,然後通過殘餘網路可以找出可行解。

#include 

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int n,a[1000];

namespace bruteforce

}void dfs(int pos)

if(!flag) return;

if(sumfor(int i=1;i<=n;i++)

ansmin[i]=b[i];

}if(sum>maxans)

return;

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

if(!used[i]&&i!=pos)

}void solve()

}namespace km

edges[maxe*2];

int head[maxv],ncount=1;

void addedge(int u,int v,int w,int c)

void add(int u,int v,int w,int c)

int q[maxe*2],dist[maxv],pre[maxv];

bool inqueue[maxv];

bool spfa_max()}}

}return pre[t]!=-1;

}int mcmf_max()

cost+=flow*dist[t];

}return cost;

}bool spfa_min()}}

}return pre[t]!=-1;

}int mcmf_min()

cost+=flow*dist[t];

}return cost;

}bool vis[maxv];

int b[maxv];

int sum=0;

void calc(int s,int x,int fa)

}void solve_min()

for(int i=1;i<=n;i++)

add(s,i,0,1),add(i+n,t,0,1);

int ans=mcmf_min();

for(int i=2;i<=ncount-4*n;i+=2)

if(!edges[i].cap)

b[edges[i].u]=edges[i].v-n;

printf("%d\n",ans);

for(int i=1;i<=n;i++) printf("%d ",b[i]);

printf("\n");

}void solve_max()

for(int i=1;i<=n;i++)

add(s,i,0,1),add(i+n,t,0,1);

int ans=mcmf_max();

for(int i=2;i<=ncount-4*n;i+=2)

if(!edges[i].cap)

b[edges[i].u]=edges[i].v-n;

printf("%d\n",ans);

for(int i=1;i<=n;i++) printf("%d ",b[i]);

printf("\n");

}void solve()

}int main()

else

return

0;}

struts2簡要概述二

值棧 valuestack 是 struts2 的資料中轉站 棧中自動儲存了當前action物件和其他相關物件 包括常用的 web物件的引用,如 request session 等 也可以手動儲存自己的資料物件,同時也可以 隨時隨地 將物件從值棧取出或操作 通過ognl表示式 值棧 valuesta...

Android MI2S和PCM簡要介紹

大部分高通平台提供四組mi2s mi2s和i2s,個人理解為m可以多通路,如雙mic訊號在codec內mix後輸入 其中分為兩組引腳,每組引腳對應內部選擇器,分為兩組mi2s引腳。而pcm和i2s使用引腳相同,但是很多配置不同,後面說到dapm會提到dai link和fe,be的區別。第一組i2s為...

專案管理相關認證簡要介紹(2) PMP

今天是專案管理相關認證簡要介紹的第二篇,我們今天一起來看下pmp。pmp全稱project management professional,是美國專案管理協會 project management institute 簡稱pmi 發起的,評估專案管理人員知識技能是否具有高品質的資格認證考試。個人覺得...