没有故意压行的最短代码

梁乃元  •  20天前


先读题

传送门

1. 输入

很简单,就不讲了

	int n ;
	cin >> n ;
	for ( int i = 1 ; i <= n ; i ++ )
	{
		cin >> num ;
		a [i] = a [i - 1] + num - 1 ; // a [i] 表示从第1个人到第i个人中编号为2的人数
	}

2. 处理

枚举i的位置 若最小步数小于将第1 - i个人的编号改为1,将第(i+1) - n个人的编号改为2,则更新最小步数

	minx = n ;
	for ( int i = 0 ; i <= n ; i ++ )
	{
		if ( minx > a [i] + n - i - ( a [n] - a [i] ) )
		{
			minx = a [i] + n - i - ( a [n] - a [i] ) ;
		}
	}

若全部都是2(a[n]=n)

if ( n == a [n] )
	{
		minx = 0 ;
	}

3. 输出

直接输出即可

	cout << minx << endl ;

AC纪录放上

END

抄代码可耻,抄袭题解更可耻!


评论: