QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#97688#6320. Parallel Processing (Hard)whatever#WA 2ms3776kbC++144.1kb2023-04-17 22:18:402023-04-17 22:18:42

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-17 22:18:42]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3776kb
  • [2023-04-17 22:18:40]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
vector<vector<vector<int> > > ans;
void op(vector<vector<int> > v)
{
/*	bitset<2005> A,B,C,D;
	A=(s[v[0][1]]^s[v[0][2]]);
	B=(s[v[1][1]]^s[v[1][2]]);
	C=(s[v[2][1]]^s[v[2][2]]);
	D=(s[v[3][1]]^s[v[3][2]]);
	s[v[0][0]]=A;
	s[v[1][0]]=B;
	s[v[2][0]]=C;
	s[v[3][0]]=D;*/
	ans.push_back(v);
}
int N;
vector<vector<vector<int> > > solve(int n)
{
	ans.clear();
//	bitset<2005> s[2005];
	int fa[2005]={},cnt[2005]={};
	for(int i=1;i<=n;i++) fa[i]=i-1,cnt[i-1]=1;
	if(n<=16)
	{
		for(int i=1;i<=n;i++)
		{
			vector<vector<int> > v;
			bitset<2005> qwq;
			qwq.reset();
			int C=4;
			for(int j=1;j<=n;j++)
			{
				if(fa[j]!=0&&cnt[j]&&!qwq[fa[j]]&&fa[fa[j]]==0)
				{
					v.push_back({j,fa[j],j});
					--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
					--C;
				}
				if(!C) break;
			}
			for(int j=1;j<=n;j++)
			{
				if(fa[j]!=0&&cnt[j]&&!qwq[fa[j]])
				{
					v.push_back({j,fa[j],j});
					--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
					--C;
				}
				if(!C) break;
			}
			for(int j=1;j<=n;j++)
			{
				if(fa[j]!=0&&!qwq[fa[j]]&&fa[fa[j]]==0)
				{
					v.push_back({j,fa[j],j});
					--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
					--C;
				}
				if(!C) break;
			}
			for(int j=1;j<=n;j++)
			{
				if(fa[j]!=0&&!qwq[fa[j]])
				{
					v.push_back({j,fa[j],j});
					--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
					--C;
				}
				if(!C) break;
			}
			if(v.size()==0) break;
			while(v.size()<4) v.insert(v.begin(),{v.back()[0],2000,2000});
			op(v);
		}
	}
	else for(int i=1;i<=n;i++)
	{
		vector<vector<int> > v;
		bitset<2005> qwq;
		qwq.reset();
		int C=4;
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&cnt[j]&&!qwq[fa[j]]&&fa[fa[j]]==0)
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&!qwq[fa[j]]&&fa[fa[j]]==0)
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&cnt[j]&&!qwq[fa[j]])
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&!qwq[fa[j]])
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		if(v.size()==0) break;
		while(v.size()<4) v.insert(v.begin(),{v.back()[0],2000,2000});
		op(v);
	}
	return ans;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	cin >> n;
//	for(int i=1;i<=n;i++) s[i][i]=1;
//	for(int i=1;i<=n;i++) fa[i]=i-1,cnt[i-1]=1;
/*	for(int i=1;i<=n;i++)
	{
		vector<vector<int> > v;
		bitset<2005> qwq;
		qwq.reset();
		int C=4;
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&cnt[j]&&!qwq[fa[j]])
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&fa[fa[j]]==0&&!qwq[fa[j]])
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]];
				--C;
			}
			if(!C) break;
		}
		for(int j=1;j<=n;j++)
		{
			if(fa[j]!=0&&!qwq[fa[j]])
			{
				v.push_back({j,fa[j],j});
				--cnt[fa[j]],++cnt[fa[fa[j]]],fa[j]=fa[fa[j]],qwq[j]=1;
				--C;
			}
			if(!C) break;
		}
		if(v.size()==0) break;
		while(v.size()<4) v.push_back({2,1,2});
		op(v);
	}*/
	vector<vector<vector<int> > > qwq;
	for(int i=0;i<=10000;i++) qwq.push_back({{}});
	for(int i=n;i<=n+4;i++)
	{
		vector<vector<vector<int> > > xx=solve(i);
		if(xx.size()<qwq.size()) qwq=xx;
	}
	ans=qwq;
	cout << ans.size() << "\n";
	for(auto t:ans)
	{
		for(auto y:t)
		{
			for(auto x:y) cout << min(n,x) << " ";
			cout << "\n";
		}
	}
/*	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout << s[i][j];
		}
		cout << "\n";
	}*/
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3724kb

input:

17

output:

7
2 1 2 
4 3 4 
6 5 6 
8 7 8 
4 2 4 
3 2 3 
8 6 8 
10 9 10 
6 4 6 
8 4 8 
5 4 5 
11 10 11 
11 8 11 
7 6 7 
9 8 9 
10 8 10 
16 17 17 
12 11 12 
14 13 14 
16 15 16 
17 17 17 
14 12 14 
13 12 13 
17 16 17 
17 17 17 
15 14 15 
16 14 16 
17 14 17 

result:

ok AC

Test #2:

score: 0
Accepted
time: 0ms
memory: 3720kb

input:

18

output:

7
2 1 2 
4 3 4 
6 5 6 
8 7 8 
4 2 4 
3 2 3 
8 6 8 
10 9 10 
6 4 6 
8 4 8 
5 4 5 
11 10 11 
11 8 11 
7 6 7 
9 8 9 
10 8 10 
12 11 12 
14 13 14 
16 15 16 
18 17 18 
14 12 14 
13 12 13 
17 16 17 
18 16 18 
15 14 15 
16 14 16 
17 14 17 
18 14 18 

result:

ok AC

Test #3:

score: 0
Accepted
time: 2ms
memory: 3776kb

input:

19

output:

8
2 1 2 
4 3 4 
6 5 6 
8 7 8 
4 2 4 
3 2 3 
8 6 8 
10 9 10 
6 4 6 
8 4 8 
5 4 5 
11 10 11 
11 8 11 
7 6 7 
9 8 9 
10 8 10 
12 11 12 
14 13 14 
16 15 16 
18 17 18 
14 12 14 
13 12 13 
18 16 18 
17 16 17 
18 14 18 
15 14 15 
16 14 16 
17 14 17 
19 19 19 
19 19 19 
19 19 19 
19 18 19 

result:

ok AC

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 3724kb

input:

20

output:

8
2 1 2 
4 3 4 
6 5 6 
8 7 8 
4 2 4 
3 2 3 
8 6 8 
10 9 10 
6 4 6 
8 4 8 
5 4 5 
11 10 11 
11 8 11 
7 6 7 
9 8 9 
10 8 10 
12 11 12 
14 13 14 
16 15 16 
18 17 18 
14 12 14 
13 12 13 
18 16 18 
20 19 20 
16 14 16 
18 14 18 
15 14 15 
20 20 20 
17 16 17 
19 18 19 
20 18 20 
20 18 20 

result:

wrong answer A[20] is not (1, …, 20)