QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#417525#1833. DeletingHarry27182TL 1ms3756kbC++141.8kb2024-05-22 19:32:222024-05-22 19:32:22

Judging History

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

  • [2024-05-22 19:32:22]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:3756kb
  • [2024-05-22 19:32:22]
  • 提交

answer

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
int n,ok[4005][4005],x;pair<int,int>p[4000005];ull num[64];
struct Bitset
{
	ull val[75];
	int get(int x){return (val[x/64]>>(x&63))&1;}
	void upd(int x){val[x/64]^=(1llu<<(x&63));}
	int _Find_first()
	{
		for(int i=0;i<=n/64;i++)
		{
			if(!val[i])continue;
			return __builtin_ctz(val[i])+i*64;
		}
		return n+1;
	}
	int _Find_next(int x)
	{
		int p=x/64,q=x&63;
		if(val[p]&num[q])return __builtin_ctz(val[p]&num[q])+p*64;
		for(int i=p+1;i<=n/64;i++)
		{
			if(!val[i])continue;
			return __builtin_ctz(val[i])+i*64;
		}
		return n+1;
	}
}L[4005],R[4005],nL[4005],nR[4005];
Bitset operator &(Bitset x,Bitset y)
{
	Bitset res;
	for(int i=0;i<=n/64;i++)res.val[i]=x.val[i]&y.val[i];
	return res;
}
void insert(int l,int r)
{
	if(l-1>=1&&r+1<=n&&ok[l-1][r+1]&&!L[l-1].get(r+1))
	{
		L[l-1].upd(r+1);R[r+1].upd(l-1);nL[l-1].upd(r+1);nR[r+1].upd(l-1);
		insert(l-1,r+1);
	}
	Bitset now=R[l-1]&nR[r];
	for(int i=now._Find_first();i<=n;i=now._Find_next(i))
	{
		L[i].upd(r);R[r].upd(i);nL[i].upd(r);nR[r].upd(i);
		insert(i,r);
	}
	now=L[r+1]&nL[l];
	for(int i=now._Find_first();i<=n;i=now._Find_next(i))
	{
		L[l].upd(i);R[i].upd(l);nL[l].upd(i);nR[i].upd(l);
		insert(l,i);
	}
}
int solve(int l,int r)
{
	ok[l][r]=1;
	if(l+1==r||L[l+1].get(r-1))
	{
		L[l].upd(r);R[r].upd(l);nL[l].upd(r);nR[r].upd(l);
		insert(l,r);
	}
	return L[1].get(n);
}
int main()
{
	cin.tie(0)->sync_with_stdio(0);
	cin>>n;
	for(int i=0;i<64;i++)
	{
		for(int j=i+1;j<64;j++)num[i]|=(1ll<<j);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)nL[i].upd(j),nR[i].upd(j);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j+=2)cin>>x,p[x]={i,j};
	}
	for(int i=1;i<=(n/2)*(n/2);i++)
	{
		if(solve(p[i].first,p[i].second)){cout<<i;return 0;}
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3580kb

input:

2
1

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3680kb

input:

6
2 1 3
4 5
6 7
8
9

output:

6

result:

ok 1 number(s): "6"

Test #3:

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

input:

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

output:

14

result:

ok 1 number(s): "14"

Test #4:

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

input:

16
49 48 18 41 52 64 4 6
22 20 32 50 56 36 9
3 1 27 58 51 35 40
61 43 38 12 7 34
8 59 39 25 46 16
44 29 15 17 24
10 47 2 57 62
14 5 23 33
30 45 19 60
63 28 13
54 55 26
53 31
11 42
21
37

output:

30

result:

ok 1 number(s): "30"

Test #5:

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

input:

20
91 19 90 92 5 41 15 50 18 36
97 8 23 74 53 67 83 40 26
4 16 31 82 80 28 49 6 21
58 63 70 34 27 89 68 20
55 100 35 77 52 24 11 87
94 13 66 1 32 54 86
60 79 75 93 45 73 2
48 72 12 37 29 95
56 17 44 84 30 22
14 65 76 69 62
47 78 7 57 42
39 61 99 81
88 25 98 59
85 38 10
33 51 71
64 46
43 3
96
9

output:

54

result:

ok 1 number(s): "54"

Test #6:

score: -100
Time Limit Exceeded

input:

100
750 481 1065 911 1943 427 1633 45 1841 234 1376 1075 1603 1682 1581 1284 28 5 1567 1540 2409 1430 695 667 1246 392 1183 1090 594 1481 524 2023 354 778 584 827 1516 796 1675 1829 189 1688 706 1679 1483 1010 1209 1393 399 210
40 149 1040 351 1435 320 340 577 898 449 1896 224 2168 1456 1222 1216 19...

output:


result: