QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#250320 | #7687. Randias Permutation Task | XHYMathematics | WA | 0ms | 3620kb | C++23 | 2.1kb | 2023-11-13 03:45:08 | 2023-11-13 03:45:09 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr ll N=180,X=INT_MAX-18,Y=INT_MAX;
struct xhash
{
size_t operator()(const vector<int>&a)const
{
size_t h;
ll f,i,n=a.size();
for(i=0;i<n;i++)
{
h=(h*X+a[i])%Y;
}
return h*time(0)%Y;
}
};
vector<int>a[N],sk;
unordered_set<vector<int>,xhash>ans;
vector<int>c;
ll n,m;
bool f;
inline vector<int>solveans()
{
ll k=c.size(),i,j;
vector<int> ans=a[c[k-1]];
for(i=k-2;i>=0;i--)
{
for(j=0;j<n;j++)ans[j]=a[c[i]][ans[j]-1];
}
return ans;
}
inline void dfs(ll x,ll cnt)
{
if(cnt)ans.insert(solveans());
if(cnt>=m)return;
ll i;
for(i=x;i<m;i++)
{
c.push_back(i);
dfs(i+1,cnt+1);
c.pop_back();
}
}
inline vector<int> operator^(const vector<int> &a,const vector<int> &b)
{
ll n=a.size(),i;
vector<int> c;
c.resize(n);
for(i=0;i<n;i++)c[i]=a[b[i]-1];
return c;
}
inline unordered_set<vector<int>,xhash>solve(ll l,ll r)
{
if(r-l<=1)
{
if(a[l]!=sk)return {a[l]};
else
{
f=1;
return {};
}
}
ll mid=(l+r)>>1;
unordered_set<vector<int>,xhash>res,al,ar;
vector<int>s;
al=solve(l,mid),ar=solve(mid,r);
for(auto&&i:al)res.insert(i);
for(auto&&i:ar)res.insert(i);
for(auto&&i:al)
{
for(auto&&j:ar)
{
s=i^j;
if(s!=sk)res.insert(s);
else f=1;
s=j^i;
if(s!=sk)res.insert(s);
else f=1;
}
}
return res;
}
int main()
{
ll i,j;
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>m;
for(i=0;i<m;i++)
{
a[i].resize(n);
for(j=0;j<n;j++)cin>>a[i][j];
}
if(m<=20)
{
dfs(0,0);
cout<<ans.size()<<'\n';
}
else
{
sk.resize(n);
iota(sk.begin(),sk.end(),1);
ll sum=solve(0,m).size();
cout<<sum+f<<'\n';
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3620kb
input:
5 4 1 2 3 4 5 5 1 3 4 2 3 4 1 5 2 5 2 4 1 3
output:
14
result:
wrong answer 1st numbers differ - expected: '8', found: '14'