QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#611900 | #7932. AND-OR closure | ATM12345 | WA | 27ms | 13004kb | C++17 | 1.2kb | 2024-10-04 23:53:30 | 2024-10-04 23:53:30 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
#define Ma 1000005
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pb push_back
#define all(x) x.begin(),x.end()
#define N 40
#define Ne 20
using namespace std;
ll n;
ll a[Ma];
ll col[N],nocol[N];
ll ans=0;
ll cnt[1<<Ne];
ll lowbit(ll x)
{
return x&(-x);
}
void sol()
{
cin>>n;
vector <ll> v;
ll all=(1ll<<N)-1;
ll mi=all,ma=0;
for (ll i=1;i<=n;i++){
ll x;
cin>>x;
for (ll j=0;j<N;j++)
for (ll k=0;k<N;k++)
if ((x>>j&1)&&!(x>>k&1))
col[j]|=(1ll<<k),nocol[k]|=(1ll<<j);
mi&=x,ma|=x;
}
/*for (ll i=0;i<N;i++)// ok size
col[i]^=all,nocol[i]^=all;*/
for (ll i=0;i<(1ll<<Ne);i++)// pre
{
if ((ma|i)!=ma)
continue;
cnt[i]=1;
//printf("i=%lld\n",i);
for (ll j=i,x=0;x<N;x++)
{
if (!(j>>x&1))
continue;
ll ne=j&col[x];
cnt[i]+=cnt[ne];
j&=nocol[x];
}
}
for (ll i=0;i<(1ll<<Ne);i++)
{
ll ne=all,be=(i<<Ne)+all;
for (ll j=Ne;j<N;j++)
if (i>>j&1)
be&=col[j]^(1ll<<j);
else
be&=nocol[j];
if ((be&(i<<Ne))==(i<<Ne))
ans+=cnt[be%(1ll<<Ne)];
}
printf("%lld\n",ans);
}
int main()
{
IOS
ll tt=1;
//cin>>tt;
while (tt--)
sol();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 6ms
memory: 5868kb
input:
4 0 1 3 5
output:
5
result:
ok 1 number(s): "5"
Test #2:
score: 0
Accepted
time: 6ms
memory: 5796kb
input:
5 0 1 2 3 4
output:
8
result:
ok 1 number(s): "8"
Test #3:
score: -100
Wrong Answer
time: 27ms
memory: 13004kb
input:
49 1097363587067 1096810445814 275012137504 1096739142630 1096809921522 1087071335264 829364908576 949625500192 1087142638448 1096200190829 1097292808175 1095750860656 1087144145776 1097346808827 1095734082416 1096755396578 829230678048 1095663303524 1087072842592 1096216444777 949623992864 10962714...
output:
1
result:
wrong answer 1st numbers differ - expected: '52', found: '1'