QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#53656#4887. Fast BridgesKING_UT#TL 1754ms8572kbC++203.3kb2022-10-05 17:24:492022-10-05 17:24:52

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-05 17:24:52]
  • 评测
  • 测评结果:TL
  • 用时:1754ms
  • 内存:8572kb
  • [2022-10-05 17:24:49]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

using ll=long long;
using uint=unsigned;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define zero(x) memset(x,0,sizeof(x))
#define bg begin()
#define ed end()
#define all(x) x.bg,x.ed
#define si(x) int(x.size())
#define pb push_back
#define eb emplace_back
template<class t>using vc=vector<t>;

template<class t>ostream&operator<<(ostream&os,const vc<t>&vs){
	os<<"{";
	for(auto e:vs)os<<e<<",";
	return os<<"}";
}

template<class t,class u>bool chmax(t&a,u b){
	if(a<b){a=b;return true;}
	else return false;
}

template<class t>void mkuni(vc<t>&vs){
	sort(all(vs));
	vs.erase(unique(all(vs)),vs.ed);
}

template<class t>int lwb(const vc<t>&vs,t a){
	return lower_bound(all(vs),a)-vs.bg;
}

const uint mod=998244353;
struct mint{
	uint v;
	mint(ll vv=0){s(vv%mod+mod);}
	mint&s(uint vv){
		v=vv<mod?vv:vv-mod;
		return *this;
	}
	mint operator-()const{return mint()-*this;}
	mint&operator+=(const mint&r){return s(v+r.v);}
	mint&operator-=(const mint&r){return s(v+mod-r.v);}
	mint&operator*=(const mint&r){v=(unsigned ll)v*r.v%mod;return *this;}
	mint&operator/=(const mint&r){return *this*=r.inv();}
	mint operator+(const mint&r)const{return mint(*this)+=r;}
	mint operator-(const mint&r)const{return mint(*this)-=r;}
	mint operator*(const mint&r)const{return mint(*this)*=r;}
	mint operator/(const mint&r)const{return mint(*this)/=r;}
	mint pow(ll n)const{
		if(n<0)return inv().pow(-n);
		mint res(1),x(*this);
		while(n){
			if(n&1)res*=x;
			x*=x;
			n>>=1;
		}
		return res;
	}
	mint inv()const{return pow(mod-2);}
};

ostream& operator<<(ostream&os,mint v){
	return os<<v.v;
}

#define a first
#define b second

using vi=vc<int>;
using pi=pair<int,int>;
using ppi=pair<pi,pi>;

const int inf=INT_MAX/2-100;

const int nmax=505;
int dp[nmax*2][nmax];
int memo[nmax][nmax];
struct Lower{
	pi a[nmax];
	int s;
	void clear(){s=0;}
	void add(int x,int y){
		while(s>0&&a[s-1].b<=y)s--;
		a[s++]=pi(x,y);
	}
	ll area(){
		ll pre=-1,res=0;
		rep(i,s){
			auto [x,y]=a[i];
			res+=(x-pre)*(y+1);
			pre=x;
		}
		return res;
	}
} unko[nmax];

void slv(){
	int n,k;cin>>n>>k;
	vc<ppi> qss[2];
	rep(i,n){
		int a,b,c,d;cin>>a>>b>>c>>d;
		a--;b--;c--;d--;
		if(a>c){
			swap(a,c);
			swap(b,d);
		}
		int j=0;
		if(d<b){
			j=1;
			d=k-1-d;
			b=k-1-b;
		}
		qss[j].eb(pi(a,b),pi(c,d));
	}
	mint org=mint(k+1)*k*(k-1)/6*k*k*2;
	mint ans=0;
	
	rep(step,2){
		auto qs=qss[step];
		int q=si(qs);
		sort(all(qs));
		
		vi xs{k},ys{k};
		for(auto [u,v]:qs){
			xs.pb(u.a);ys.pb(u.b);
			xs.pb(v.a);ys.pb(v.b);
		}
		mkuni(xs);
		mkuni(ys);
		
		rep(y,si(ys)-1)rep(i,q)dp[y][i]=-inf;
		rep(x,si(xs)-1){
			rep(y,si(ys)-1){
				if(y)rep(i,q)chmax(dp[y][i],dp[y-1][i]);
				rep(j,q){
					if(qs[j].b==pi(xs[x],ys[y])){
						chmax(dp[y][j],0);
						rep(i,q)chmax(dp[y][i],memo[j][i]+1);
					}
				}
				rep(j,q){
					if(qs[j].a==pi(xs[x],ys[y])){
						rep(i,q)memo[j][i]=dp[y][i];
					}
				}
				rep(j,q){
					if(dp[y][j]>=0){
						unko[dp[y][j]].add(qs[j].a.a,qs[j].a.b);
					}
				}
				mint tot=0;
				rep(j,q){
					tot+=unko[j].area();
					unko[j].clear();
				}
				ans+=tot*(xs[x+1]-xs[x])*(ys[y+1]-ys[y]);
			}
		}
	}
	
	cout<<org-ans<<endl;
}

signed main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(10);
	
	slv();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 5ms
memory: 7240kb

input:

2 2
1 1 2 2
1 2 2 1

output:

6

result:

ok answer is '6'

Test #2:

score: 0
Accepted
time: 3ms
memory: 7168kb

input:

0 1000000000

output:

916520226

result:

ok answer is '916520226'

Test #3:

score: 0
Accepted
time: 3ms
memory: 7044kb

input:

5 5
1 1 3 3
3 3 5 1
3 3 4 5
3 3 5 4
1 5 3 3

output:

946

result:

ok answer is '946'

Test #4:

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

input:

200 5
1 1 4 2
2 5 4 4
2 3 4 2
2 4 3 5
1 4 4 2
2 5 4 2
1 2 4 4
1 2 2 4
1 4 5 1
3 4 5 1
4 2 5 1
2 2 5 4
3 2 5 1
3 1 5 2
4 2 5 3
1 3 5 1
3 4 4 5
2 2 4 3
2 3 5 4
1 4 5 3
2 2 3 1
2 5 3 3
1 1 5 3
4 4 5 5
1 3 4 4
4 3 5 1
2 3 3 4
3 4 4 2
1 4 4 5
2 1 4 4
1 3 5 2
1 1 3 3
1 5 3 1
1 1 3 5
1 4 3 5
4 5 5 4
1 1 4 ...

output:

708

result:

ok answer is '708'

Test #5:

score: 0
Accepted
time: 4ms
memory: 7040kb

input:

500 10
5 6 7 10
1 3 8 10
3 3 4 9
2 10 10 2
9 4 10 10
5 4 7 8
7 1 10 7
3 1 7 10
5 2 8 9
6 3 7 10
3 10 7 9
4 9 5 1
2 5 3 3
7 10 8 2
7 7 9 8
6 6 8 3
5 10 8 8
1 1 5 5
3 3 10 5
5 5 7 6
3 8 4 7
6 7 7 5
7 3 10 9
5 3 9 4
4 6 10 5
1 5 9 10
5 6 9 7
3 10 10 3
1 2 5 7
4 6 5 1
3 1 8 5
5 8 8 9
1 8 4 3
6 4 7 10
7 ...

output:

27373

result:

ok answer is '27373'

Test #6:

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

input:

500 30
3 13 20 29
14 5 16 25
2 29 9 15
23 30 24 9
1 18 24 28
4 16 5 2
3 29 30 25
4 8 24 19
8 26 10 24
20 14 26 25
15 8 25 25
5 13 18 28
3 30 29 10
14 26 25 11
11 19 16 4
9 4 29 30
15 10 16 8
2 29 12 2
11 22 20 28
4 10 28 1
24 17 30 1
8 26 27 9
15 25 30 14
16 20 24 17
9 23 12 13
9 16 25 28
2 15 8 16
...

output:

7717993

result:

ok answer is '7717993'

Test #7:

score: 0
Accepted
time: 23ms
memory: 7632kb

input:

500 100
25 55 55 43
14 22 84 5
57 7 79 15
63 9 86 23
22 3 53 97
2 22 64 65
32 52 66 30
76 37 79 22
46 100 76 22
21 78 78 44
29 41 92 55
43 14 46 3
14 97 42 1
16 7 35 64
15 27 29 3
11 92 92 70
4 13 66 2
3 38 55 82
41 94 83 44
52 90 100 82
6 100 99 70
18 38 24 22
74 17 98 20
17 94 44 82
33 97 48 19
12...

output:

291628571

result:

ok answer is '291628571'

Test #8:

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

input:

500 8
2 4 8 2
3 7 5 4
2 6 8 1
4 8 5 5
6 6 7 5
2 6 5 5
1 6 8 5
6 5 7 3
4 8 5 7
5 7 6 5
1 6 4 5
2 3 4 2
2 8 8 6
3 8 4 3
5 6 7 2
7 8 8 3
1 8 4 7
1 6 6 1
1 8 7 1
1 4 3 3
2 3 3 1
1 4 5 1
1 8 5 4
7 7 8 5
2 7 4 1
3 7 4 3
2 3 5 1
3 7 8 1
4 7 5 5
6 6 8 3
2 7 5 1
2 5 4 3
5 4 8 2
4 5 8 3
2 3 4 1
2 8 3 2
5 6 8 ...

output:

9321

result:

ok answer is '9321'

Test #9:

score: 0
Accepted
time: 431ms
memory: 7624kb

input:

500 1000000000
228604634 522874974 789854111 585676486
340802063 175643637 661594207 749079321
490078806 844144515 583746323 707696611
833939453 901516824 867397264 848066012
553537526 886003963 679012061 187030606
351500555 847099665 751201742 855105070
169763646 729114554 248951243 211939611
17040...

output:

230090667

result:

ok answer is '230090667'

Test #10:

score: 0
Accepted
time: 1725ms
memory: 8572kb

input:

500 1000000000
536804949 618264275 757262973 133194920
206604343 420304040 244005624 331707206
64548973 877773848 685024560 565782395
13572244 271309598 835979107 128627415
128103153 561746493 703898577 9276472
209282309 997406956 216339996 279878227
386095652 999498735 908610032 582414132
232191790...

output:

404991176

result:

ok answer is '404991176'

Test #11:

score: 0
Accepted
time: 1740ms
memory: 8572kb

input:

500 1000000000
435165109 887707979 541968631 834720917
43164344 595179931 731392283 541750474
51147932 885859385 525997101 813310992
581745995 569929983 666239343 349298365
720599913 330436249 751561895 84593980
254142704 924477087 706739688 760929039
282091849 414650019 853811117 121534462
21407507...

output:

174105246

result:

ok answer is '174105246'

Test #12:

score: 0
Accepted
time: 1738ms
memory: 8552kb

input:

500 1000000000
334968963 60182667 683993047 330063742
372714145 727060351 391638535 972082352
15288009 443033033 549932294 626507494
551292358 201286324 844192128 989162325
138957062 834473180 233314539 840742618
774917762 293038146 784290713 868100668
88362426 108423246 90763875 635080794
197409326...

output:

819654628

result:

ok answer is '819654628'

Test #13:

score: 0
Accepted
time: 1754ms
memory: 8572kb

input:

500 1000000000
407797655 600906761 451028876 557753318
739109786 505834673 914488662 267694229
21613693 815099602 741520301 86754775
749426136 864500481 989644055 760004108
97929570 281277866 645537954 194083134
386298407 900097354 590149576 876589970
225981751 604462892 313700311 201620926
13512935...

output:

704804476

result:

ok answer is '704804476'

Test #14:

score: 0
Accepted
time: 426ms
memory: 8220kb

input:

500 1000000000
136588729 322381152 198423052 586895024
146201252 78771798 320963978 33171878
103014217 582579333 112482565 472327049
363500012 171569343 779799989 210605961
916348434 897403875 958218658 848653603
81959275 288412262 293263271 877464982
155884974 409342051 490632310 353856648
42868173...

output:

701057894

result:

ok answer is '701057894'

Test #15:

score: 0
Accepted
time: 454ms
memory: 8184kb

input:

500 1000000000
70732466 818210159 101241592 180120566
551559764 430141447 558477026 919623562
842854549 898003264 988655980 690377539
365038538 842566580 988616538 612555368
119137999 522482797 776356145 341894154
134943863 753491473 621956497 857574689
860979233 313689040 912231580 819779431
253383...

output:

849305849

result:

ok answer is '849305849'

Test #16:

score: 0
Accepted
time: 437ms
memory: 7604kb

input:

500 1000000000
76067493 226360208 588463712 997370258
247139391 228988779 876938260 628658287
173490201 249999131 402004522 332729284
73514885 82656638 357464837 702514607
288650085 526722777 582817141 741491871
859774917 73498480 878952996 868608989
248586909 115745356 485233299 599896403
302539166...

output:

980753674

result:

ok answer is '980753674'

Test #17:

score: 0
Accepted
time: 571ms
memory: 8024kb

input:

500 919069957
742507159 740217847 742778031 741238898
320301045 312370945 321929532 313537690
344928356 347275650 349920032 348402734
128430402 156747983 128702472 159673979
89940237 122339622 90602165 123930504
638094551 604903042 638437986 606101004
118489244 152414022 121260981 154139858
41785067...

output:

347610358

result:

ok answer is '347610358'

Test #18:

score: -100
Time Limit Exceeded

input:

500 975373400
777474465 198550754 778099765 197445181
19790862 954672658 20856536 953636596
827980256 147778510 829125529 145266113
619221505 350128003 619713737 347384388
495799407 482522585 498152766 482508636
228703 974561916 1215128 974398280
950927762 28239912 951166074 26737006
102318845 88350...

output:


result: