社区讨论
萌新球条(0pts)全wa
P7618[COCI 2011/2012 #2] FUNKCIJA参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mlrh02wx
- 此快照首次捕获于
- 2026/02/18 11:26 昨天
- 此快照最后确认于
- 2026/02/18 23:20 18 小时前
CPP
#include <bits/stdc++.h>
using namespace std;
long long dp[27][100005],f[27][100005],sum[27][100005],n,vis[27],a[27][2],b[27],du[27],tt[27],ans=1,mod=1e9+7;
vector<int> e[27];
void dfs(int x,int fa){
bool t=0;
for (int i=1;i<=100000;i++){
f[x][i]=1;
}
for (int y:e[x]){
t=1;
dfs(y,x);
}
for (int i=1;i<=100000;i++){
sum[x][i]=(sum[x][i-1]+f[x][i])%mod;
}
tt[fa]=1;
for (int i=1;i<=100000;i++){
long long start=0,end=0;
if (b[x]==1){
start=i;
end=a[x][0];
}
else if (b[x]==2){
start=a[x][0];
end=i;
}
else{
start=a[x][0];
end=a[x][1];
}
if (start<=end){
dp[x][i]=(sum[x][end]-sum[x][start-1]+mod)%mod;
f[fa][i]=(f[fa][i]*dp[x][i])%mod;
}
else{
f[fa][i]=0;
}
}
vis[x]=1;
return ;
}
int main(){
cin>>n;
string s;
getline(cin,s);
for (int i=1;i<=n;i++){
string s;
getline(cin,s);
s=" "+s;
int pos=1;
if (s[pos]>='a' && s[pos]<='z'){
b[i]=1;
e[s[pos]-'a'+1].push_back(i);
pos=3;
du[i]++;
for (int j=pos;j<s.size();j++){
a[i][0]=a[i][0]*10+(s[j]^48);
}
}
else{
for (;s[pos]!=' ';pos++){
a[i][0]=a[i][0]*10+(s[pos]^48);
}
pos++;
if (s[pos]>='a' && s[pos]<='z'){
e[s[pos]-'a'+1].push_back(i);
du[i]++;
b[i]=2;
}
else{
for (;pos<s.size();pos++){
a[i][1]=a[i][1]*10+(s[pos]^48);
}
}
}
}
for (int i=1;i<=n;i++){
if (!du[i] && !vis[i]){
dfs(i,0);
ans=(ans*dp[i][1])%mod;
}
}
printf("%lld",ans);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...