这样写为什么不对,求 Hack
查看原帖
这样写为什么不对,求 Hack
741244
Eason_cyx大愚若智楼主2023/12/25 09:06
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[300005];
int con[300005];
signed main() {
	int n; cin >> n;
	for(int i = 1;i <= n;i++) {
		scanf("%01lld",&a[i]);
	}
	int cur = 0,minn = 0x7fffffff,now = 0;
	for(int i = 1;i <= n;i++) {
		if(a[i] == 1) {
			now++;
		}
		else {
			if(now == 0) continue;
			minn = min(minn,now);
			con[++cur] = now;
			now = 0;
		}
	}
	if(now) {
		minn = min(minn,now);
		con[++cur] = now;
	}
//	for(int i = 1;i <= cur;i++) cout << con[i] << " \n"[i == cur];
	if(cur == 1) {
		cout << (con[1]%2?1:2) << endl; 
		return 0;
	}
	int night_num = 0x7fffffff;
	for(int i = 2;i <= cur-1;i++) {
		night_num = min(night_num,((con[i]-(con[i]%2?1:2))/2));
	}
	if(a[1]) {
		night_num = min(night_num,con[1] - 1);
	}
	else night_num = min(night_num,((con[1]-(con[1]%2?1:2))/2));
	if(a[n]) {
		night_num = min(night_num,con[cur]-1);
	}
	else night_num = min(night_num,((con[cur]-(con[cur]%2?1:2))/2));
	int ans = 0;
	for(int i = 1;i <= cur;i++) {
		if(i == 1 && a[1] == 1) {
			if((con[i] - night_num*2) > 0) ans += min(con[i] - night_num,con[i] - night_num*2);
			else ans += con[i] - night_num;
		}
		else if(i == cur && a[n] == 1) {
			if((con[i] - night_num*2) > 0) ans += min(con[i] - night_num,con[i] - night_num*2);
			else ans += con[i] - night_num;
		}
		else ans += (con[i] - night_num*2);
	}
	cout << ans << endl;
	return 0;
}
2023/12/25 09:06
加载中...