提出 #34046642


ソースコード 拡げる

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
 
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef long double ld; 
typedef pair<ld,ld> state;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
const int DEBUG=0;
int a[222222];
int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	for(int cc=1;;cc++)
	{
		int n; 
		if(DEBUG) n=100;
		else cin>>n;
		vi vec;
		
		if(DEBUG)
		{
			for(int i=0;i<2*n;i++) vec.pb(i);
			random_shuffle(vec.begin(),vec.end());
			for(int i=0;i<2*n;i++) a[i]=vec[i];		
		}
		else
		{
			for(int i=0;i<2*n;i++) cin>>a[i];
		}
		vi ans;
		for(int i=1;i+1<2*n;i+=2) //a[i-1],a[i],a[i+1]
		{
			if(i%2==1) //max
			{
				if(a[i]==max(a[i],max(a[i-1],a[i+1]))) continue;
				if(a[i-1]>a[i+1])
				{
					swap(a[i-1],a[i]); ans.pb(i-1);
				}
				else
				{
					swap(a[i+1],a[i]); ans.pb(i);
				}
			}
			else //min
			{
				if(a[i]==min(a[i],min(a[i-1],a[i+1]))) continue;
				if(a[i-1]<a[i+1])
				{
					swap(a[i-1],a[i]); ans.pb(i-1);
				}
				else
				{
					swap(a[i+1],a[i]); ans.pb(i);
				}
			}
		}
		for(int i=2;i+1<2*n;i+=2) //a[i-1],a[i],a[i+1]
		{
			if(i%2==1) //max
			{
				if(a[i]==max(a[i],max(a[i-1],a[i+1]))) continue;
				if(a[i-1]>a[i+1])
				{
					swap(a[i-1],a[i]); ans.pb(i-1);
				}
				else
				{
					swap(a[i+1],a[i]); ans.pb(i);
				}
			}
			else //min
			{
				if(a[i]==min(a[i],min(a[i-1],a[i+1]))) continue;
				if(a[i-1]<a[i+1])
				{
					swap(a[i-1],a[i]); ans.pb(i-1);
				}
				else
				{
					swap(a[i+1],a[i]); ans.pb(i);
				}
			}
		}
		//check last 2
		if(a[2*n-2]>a[2*n-1]) 
		{
			swap(a[2*n-2],a[2*n-1]); ans.pb(2*n-2);
		}
		for(int i=0;i+1<2*n;i++)
		{
			if(i%2==0) assert(a[i]<a[i+1]);
			else assert(a[i]>a[i+1]);
		}
		assert(int(ans.size())<=n);
		if(!DEBUG)
		{
			cout<<ans.size()<<'\n';
			for(auto x:ans)
			{
				cout<<x+1<<' ';
			}
			cout<<'\n';
			return 0;
		}
		cerr<<"Case #"<<cc<<" complete\n";
	}
}

提出情報

提出日時
問題 A - Make it Zigzag
ユーザ zscoder
言語 C++ (GCC 9.2.1)
得点 400
コード長 2326 Byte
結果 AC
実行時間 33 ms
メモリ 4596 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 2
AC × 23
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt
All 00-sample-001.txt, 00-sample-002.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 13 ms 3388 KiB
00-sample-002.txt AC 2 ms 3588 KiB
01-001.txt AC 2 ms 3492 KiB
01-002.txt AC 2 ms 3556 KiB
01-003.txt AC 3 ms 3492 KiB
01-004.txt AC 2 ms 3556 KiB
01-005.txt AC 2 ms 3404 KiB
01-006.txt AC 2 ms 3504 KiB
01-007.txt AC 26 ms 4276 KiB
01-008.txt AC 13 ms 3880 KiB
01-009.txt AC 26 ms 4220 KiB
01-010.txt AC 10 ms 3644 KiB
01-011.txt AC 22 ms 4236 KiB
01-012.txt AC 27 ms 4308 KiB
01-013.txt AC 31 ms 4396 KiB
01-014.txt AC 30 ms 4596 KiB
01-015.txt AC 26 ms 4444 KiB
01-016.txt AC 32 ms 4528 KiB
01-017.txt AC 32 ms 4588 KiB
01-018.txt AC 33 ms 4576 KiB
01-019.txt AC 29 ms 4592 KiB
01-020.txt AC 24 ms 4216 KiB
01-021.txt AC 31 ms 4440 KiB