找規律可以發現,只有$表示式的話,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 發起的,評估專案管理人員知識技能是否具有高品質的資格認證考試。個人覺得...