CF1545A

这篇博客探讨了两个C++代码实现,一个是时间复杂度为O(N^2)的TLE(Time Limit Exceeded)代码,另一个是优化后的O(N)代码。优化主要通过预处理数据并使用计数结构减少比较次数来实现,从而避免超时错误。这两个代码都在解决同一个问题,但AC(Accepted)代码展示了更高效的解决方案。

题目描述

TLE代码:
(O(N^2))

#include<bits/stdc++.h>
using namespace std;
int n,b[100005],pl;
bool v[100005];
struct node{
	int num;
	int x;
}a[100005];
bool cmp(node a,node b){
	return a.x<=b.x;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		pl=1;
		bool flag=1;
		memset(v,0,sizeof(v));
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i].x;
			b[i]=a[i].x;
			a[i].num=i;
		}
		sort(b+1,b+1+n);
		sort(a+1,a+1+n,cmp);
		int tl;
		for(int i=1;i<=n;i++){
			while(v[pl]==1&&pl<=n) pl++;
			if(pl>n){
				flag=0;
				break;
			}
			tl=pl;
			while(abs(tl-a[i].num)%2==1&&b[tl]==a[i].x)
				tl++;
			if(b[tl]==a[i].x&&abs(tl-a[i].num)%2==0){
				v[tl]=1;
			}
			else{
				flag=0;
				break;
			}
		}
		if(flag) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}

AC代码:
(O(N))

#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
bool v[100005];
int even[100005],odd[100005];
int main(){
	int t;
	cin>>t;
	while(t--){
		memset(even,0,sizeof(even));
		memset(odd,0,sizeof(odd));
		bool flag=1;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(i%2==1) even[a[i]]++;
			else odd[a[i]]++;
		}
		sort(a+1,a+1+n);
		for(int i=1;i<=n;i++){
			if(i%2==1){
				if(even[a[i]]) even[a[i]]--;
				else{
					flag=0;
					break;
				}
			}
			else{
				if(odd[a[i]]) odd[a[i]]--;
				else{
					flag=0;
					break;
				}
			}
		}
		if(flag) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}
08091090e3bbf8f290fea21018b84520082a150a0d636f6d70726573735f747970651204677a69702a6f0a0f696d2d696e7465726e616c5f657874125c696e7465726e616c5f7372633a707573687365727665727c66697273745f7265715f6d733a313735333638393836363234327c7773735f6d73675f747970653a727c777264735f763a373533323034303632313739363632333638392a4c0a09696d2d637572736f72123f742d313735333638393837303633365f722d373533323034303633383937363439343839385f642d373533323034303633383937363439313532305f752d312a170a06696d2d6e6f77120d313735333638393837303633362a2b0a0e696d2d6c6976655f637572736f721219642d373533323034303633383937363439313532305f752d31320270623a036d736742d4161f8b08000000000000ffec9a7b7013d7f5c7b92b475e2f068bfdfd26f138b4554cd2a14c057b7757fbd04ca648b2fcc22ff0dbed7459497765d97a7957966c01897935bc0294a484d0a40111087593066832a50e844c92495a920c34339de96468dab87e419836439336d3e68f8e64636c22a716b6876422f3cf7257f79e73cf3df733e7bbf7129fde4dfc7f2372ba642d5c89fc4ea456224d933d88fcc3ddc49b39a9df19e27f3bf3c63b1fbcf55a6bfe91fd57ae1ef8e7f9d75a2960db9e43dce50d44649fd72db5a36e29e4935da835e8732395cc5b47593a35a46e300e3d7974a0ef47050b899c254e4149fe19f7ea0adfc6f1f9642e91bd44b03bf8e262e35e5d2f388d132fe2f8c8d39bdfec0786e32ff7e714e8041a1a0105cad713b1d67038a45956ac0841b8dc1dececf606425ed77257d0bf428e223f5a0129aa0b52d4e8ff4c72440ecbea8a705033b902263912365114344bb2cc389d9442238818918102c532664ea4298a15594571a2e56d21e4f99ea206fdf73314c7733c6418b6173c48b48c9b674cd1d118dde485d7ef5931f666450045a5c4f4258f2abb91e44311e493225082e6e5a180e78170c81731059d6dcbbd7ed983f20d4623056c77e7e715de35f2f09191deedc3cf6d1fee7b069a87fb9e19dcb973f817874e8185f81ac34380d641c66cc104ba0fbc05a8bc83c039f78ec5814c344f08fe34ac2497400ac9dd6366e82e099a2528a6b2916bcca5c0ab8020f0423d9185cf23e76dc2e69dc2709a62055ee4b96b185f59cb462bdaac36abd56af57bca430ee82bf787b972bbd256c3aea9a90e205f7767737199adbe21c275589992e640b942559ed0e9aee86ef7caedcd02f1ac441a9fcf2a199d478d3f026b9a5bcdb515abca820d5dad50345756b7d1b1ba36c564adaeeef0b8aac5baca8a70793bbf9ae90e173556fb5a24a6542befa20276b1c5edb896b50723b663b89edc82cde5ec88efa7b7ea690d4e7e7b7adda6116212e84b410d68dafb5b6c1bd0bd0246703283910c463218c960244d8ce4ff555f03f6814c61932152864819227d098874106419e995d829f07fc442140823550a7b4352b83b8448409d02f7100bfc9a47d25a83d1d14643f2476a30e8970241d52ffbf2c7b51bf1ea32821c9377255e257c5df81d5e461c2652bd316c3f7ef052ef64d967dcfdfe13afeb296081577ed3f3e1f367ae1efac9d5a77ffce19e2dc6ab4f1eb87af805cbe59e8dc32f3d3e70faa5a17dcf19e1c0e9dec1137b06cf6d1e3cb7d9f6ab1ca2702c36d2e846f27895b0a4a1805bf28f9a94220c691a27ece59e8d830ff5ad83162dac7a039e0deb684b32c41b8ceb98eb6d49fe2a8a22bb103427f8dba3c7e793a38d820bf14928f7822b7710c377e0bb3fba7478b7aee0ced4be9fc20828d05060594aa06fda9da572757d972fe86c926abbeaab9164aaa82cd7dc7e566e445068d67c147297349415d542b9f98a6ef6b2979fcbec4d35f834b2979f94bd8b6eca5e7e3220a608f53833aadbed6284738442be00dfd4467734445b3d9c2244638d8da6605b7b4b95b7b686f2d56bc15883afb6ddddaddaeb5c5aabd5df55aab2111eaac1b960c65739ea24d0177e0307e44ddba225677c1f163e82e179e7c1c318b103235ad39b158f1496e7cd82cc32660626ca0cc43979c1499939b75b66d18db9a948f3c69085355bd824ee084f5a6b73eb86c8efa633c6b2ec250ccfdacd74e19d29828675c1a603d74042521a2ee88c6029a080e542de18470cd75ebf34a09f8a26e57fd2119bc04c6a3baf891220e3a2282805830ebeacaa532c2db26a4ac4eab6361587ac62c05a62153d317b24b63aa634ca8e94351eb1f18613ccedf261422068ee36394156ceaa8d5e9001cef50afe63ccc0d398d96cd1313cdd07ded5518b0e8261f035094f1c7c0088a6b4a69a868e98438942de3b9d4e530999592996925226b39132f5d26dac974a41d3ce84aa89bd81139f02e2877354a824bc4f1442d25c955c6306d22e806c769bdd419179a3726bbc4e5c7a4127801ad004d68256b009dc2820e32087c8820c640dffd2c7014ee8cc346578243b0eb2098ce30cfbb37bc1d7318cbc9db75b99bf0070021bc12f629fe4f6633762d68fe913e14d3e0cee7f62e8d978e2e1dce6c11dc7fb31fdd096a7464ec4471f8636fe3cf1f0e8f343bb36267a9d796468f7ae44cbaebe81b387fa31fdc8cb3f1dd9792cd1f26c7ce4dcee7e4c3fbced6472e49cd19107ce1e3aa1d3bdaac38ce0bc6e01318fcc5962b79b45b39de3ded3113841ea077fb96bf8e5ddefe916e23692e0860f6eb97ce467232ffe3ad17006903923c7360eed3839b4e3e47bba45f8b62c3277e0745fc246dfa3437b5e48b40d6793b997f73d35bcede440dfee81b387121de304995314ec1c3af0fcc0d943ef66fd1b4c58a1d9cf8028728688b5739902090b69e780205a19debe0d64ed0359c66faed41d043271efe46f1e6155ee1effdc110e4a72c0d51a54c9447aaca3361418889c2536a638f967dcab5b090abf8503f273ad13f45c2f38a6273f03849c5e349c324208d2c8059d8cd9a5d032afd0324db945483921e36653317d6d5a2b7a0b166e047c3a9d97652fb13276d66e5f0ae89c719095bf0d889ab41c4d2e8953d690947402a69afaeaf4a23b8d21c9c55ff4e365d94b8a8b8ba1c3d604d65ecc8bb144628245f662b6d85a9033fab2b8b8b870f17df72c7534d5adb11abd8130c7de0f294ea4048a11a1407f6713983fda8d4bfcdb062ee8e220ed7d99de2adecabe4cdf42da69321aca11003e02601bf6d696733d5b998398515658274bb1ac53e659869669179215d989585e802ec12c3afb302c1ffc1103f9e35f428957164f717fe6c9c5c49fa7be3f73fad2e7efcf1c9ec931d3408a63a68b38f10e8ebff3f743f1e31f3f7e87e1c4fef31b5fc40a30076b04e50f121b66fc19400ab6a3dad5256c4d5d89b57655a9d565b555046d7cb5b5c85665ad7554b7782a90525636d7474dcc171d582cb8a9d2632608d55c9c37e4d218a42d98d9dc07ce036ac12c1e344ded561cac9d057d4849301532a79267f3055a644581131886bb86554cd4677229acb136d5b5b9ecdd76aea8224cd95b6a61342a2293d8616f6b6bee76a80df60eae224a1545f85581ae12b67e4dacb1a6bcceddd5e1adb675cdeef9d32d2e67522e610e765c1a553126b710e9eca8f605237639b4cad651e165d774fb3b4b42ee352e9bec63630d6af7aa88d4240503554c59997d15d358d45e158c5091d55502aa9f0b69946a72b3268d520d3e0d69c44c9246534738c5bd9a0c5e3278c9e025839759c2cbd87d9b4c21942155865419527d8949351bf770c63420f18fa924e4c5c5c4475349c89e63070efcfe7312f2d44cc8f9490a727e8013efe3f891a317ff73f4935d7ac3a6d7af1dc50bf2acfeeea1c7b68e1cde35f4d8d1c1738f19b149d7166fe14477fcdaa28b631541410254dc820b428615585e842c7223a7e8a2dcae2910fac084b49c59ea4cbde70af241e19d933262024117e14780e1b32a3a0b0e9c7ec8a2831cd3077e07283019a373e45a1c4844e3cc4f05a574288a9b790a3290edbe09a1b5aa3fd6e656db6dbe8eea705b9bc7148d547abb9a50b0426a712224377ba58610b29687cce5a86c55bb565c176d8c4942a352e7f3db6a043189d0dbbc9c4982de9ce43770ca855b9c36734c105dedae5044f584ddab6b5dfe686cb5c35fe7a9f7ba1c6a7d6399cd15d2827c45586a55b8ce4811c57b9a3badc82bb628dab5ac9d18b13581d31e6c2e273ae1a47846a84e05d3fba6d5eb7f873a85a6ccf026c39b0c6f32bc992bdee4f7274566a654caa02b83ae0cbabe4ae89ab9ea1c978da4296c82bc99e10451e029966724d5c49b199a62298e11449e6345561005c96d8252a7091ab71f3ed7b39559f6036f62c480ec9334d56509756aad1a5223485daf78552d2ca9a843f26b96eb03b30ccbd2eba39a2625fc4ab86451d74755b726452cd78dd19017398e4efc7e655e29f82f000000ffff010000ffffbfcf2bfb91400000 告诉我解析出来的结果
07-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值