QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#290212 | #7967. 二进制 | daydream# | ML | 0ms | 3884kb | C++20 | 1.8kb | 2023-12-24 16:11:01 | 2023-12-24 16:11:02 |
Judging History
answer
#include<bits/stdc++.h>
#define db double
#define LL long long
#define pb push_back
#define eb emplace_back
#define pli pair<LL,int>
#define pii pair<int,int>
#define fr first
#define sc second
#define mp make_pair
using namespace std;
const int dx[]={0,1,0,-1,1,1,-1,-1},
dy[]={1,0,-1,0,1,-1,1,-1};
struct BIT
{
int n;
vector<int> tr;
BIT(int N)
{
tr.resize((n=N)+10);
}
void upd(int i) {for(;i<=n;i+=(i&-i)) tr[i]++;}
int qry(int i) {int res=0; for(;i;i-=(i&-i)) res+=tr[i]; return res;}
};
int n;
void solve()
{
cin>>n;
string s;cin>>s;s=" "+s;
vector<int> a(n+1),f(n+1),ex(n+1,1),nxt(n+2),pre(n+1),cnt(n*2+1);
vector<set<int>> pos(n*2+1);
nxt[n+1]=n+1;
for(int i=1;i<=n;++i) a[i]=s[i]-'0',nxt[i]=i+1,pre[i]=i-1;
BIT T(n);
for(int k=1,x=1;x<=n;++k,x<<=1)
{
for(int i=1;i<=n;++i)
if(ex[i])
{
f[i]=0;
for(int p=i,j=1;j<=k&&p<=n;++j,p=nxt[p]) f[i]=f[i]<<1|a[p];
cnt[f[i]]++;pos[f[i]].insert(i);
// cout<<a[i];
}
// cout<<'\n';
int S=(1<<k)-1;
for(int i=x;i<=n&&i<(x<<1);++i)
{
// cout<<cnt[7]<<'\n';
if(!cnt[i])
{
cout<<"-1 0\n";
continue;
}
int P=*pos[i].begin(),p=P;
cout<<p-T.qry(p)<<' '<<cnt[i]<<'\n';
for(int j=1;j<=k;++j,p=nxt[p])
{
ex[p]=0;
T.upd(p);
cnt[f[p]]--;
pos[f[p]].erase(p);
}
nxt[pre[P]]=p;pre[p]=pre[P];
p=P;
for(int j=1;j<k;++j) p=pre[p];
if(!p) p=nxt[p];
int x=0,ps=p;
for(int j=1;j<k;++j,ps=nxt[ps]) x=x<<1|a[ps];
for(int j=1;j<k;++j,p=nxt[p],ps=nxt[ps])
{
cnt[f[p]]--;pos[f[p]].erase(p);
if(ps<=n)
{
x=((x<<1)&S)|a[ps];
f[p]=x;
cnt[f[p]]++;pos[f[p]].insert(p);
}
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int TT=1;
// cin>>TT;
for(;TT;--TT) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3884kb
input:
20 01001101101101110010
output:
2 11 5 5 4 5 11 1 4 2 7 1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0
result:
ok 20 lines
Test #2:
score: -100
Memory Limit Exceeded
input:
1000000 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
1 1000000 -1 0 1 999998 -1 0 -1 0 -1 0 1 999995 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 1 999991 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 1 999986 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0...