ssl提高組國慶模擬賽【2018.10.7】
阿新 • • 發佈:2018-12-14
前言
出現了!毒瘤摳題人BPM。 WHF大佬強勢串場
成績
正題
試卷【狀態壓縮】
字串數量【字首和】
排列【隨機卡常樹狀陣列】
T1 dfs ACcode
#include<cstdio>
#include<cstring>
#include<iostream>
#define MS 1024
#define N 1010
using namespace std;
int t,n,m,k,v[MS],a[N],ans,answer;
char c;
void dfs(int x,int s)
{
if(x>=m)
{
ans=0;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
{
v[a[i]&s]++;
ans+=i-v[a[i]&s];
}
if(ans>=k) answer++;
return;
}
dfs(x+1,s*2+1);
dfs(x+1,s*2);
}
int main()
{
scanf("%d",&t);
for(int ti=1;ti<=t;ti++)
{
answer=0;
memset(a,0,sizeof(a));
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>c;
a[i]=a[i]*2+(c=='A');
}
dfs(0,0);
printf("%d\n",answer);
}
}
T3 70code
#include<cstdio>
#include<cstring>
#define BPM (int(1e9)+7)
#define lobit(x) x&-x
using namespace std;
int t,n,a[1001],f[1001][1001],ans,c[1001];
void change(int x,int a)
{
while(x<=n)
{
(c[x]+=a)%=BPM;
x+=lobit(x);
}
}
int ask(int x)
{
int sum=0;
while(x)
{
(sum+=c[x])%=BPM;
x-=lobit(x);
}
return sum;
}
int main()
{
scanf("%d",&t);
for(int ti=1;ti<=t;ti++)
{
memset(f,0,sizeof(f));
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
f[1][i]=1;
printf("%d ",n);
for(int l=2;l<=n;l++)
{
memset(c,0,sizeof(c));
ans=0;
for(int i=1;i<=n;i++)
{
f[l][i]=ask(a[i]-1);
change(a[i],f[l-1][i]);
(ans+=f[l][i])%=BPM;
}
printf("%d",ans);
if(l!=n) printf(" ");
}
printf("\n");
}
}
尾聲
沒了