求助站外题
  • 板块学术版
  • 楼主Defoliation
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/11/21 11:57
  • 上次更新2023/10/27 02:06:25
查看原帖
求助站外题
638336
Defoliation楼主2022/11/21 11:57

rt

link

希望大佬能提供hack数据或正确性证明。


这是赛时瞎搞的做法。

#include<iostream>
using namespace std;
//nxt 后继,存的是下标
int t,n,cnt,f,a[105],nxt[105],vis[106];
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++){cin>>a[i];vis[i]=0;}
		nxt[n]=1;
		for(int i=1;i<n;i++) nxt[i]=i+1;
		f=1;
		//cout<<head[1]<<tail[1];		
		cnt=0;
		while(f==1){
			f=0;
			for(int i=1;i<=n;i++){
				//cout<<nxt[i]<<endl;
				if(a[i]!=a[nxt[nxt[i]]]&&vis[nxt[i]]==0){
					vis[nxt[i]]=1;
					nxt[i]=nxt[nxt[i]];
					f=1;
					cnt++;
					break;
				}
			}
		}
		//cout<<cnt<<endl;
		if(cnt==n) cout<<cnt<<endl;
		else cout<<cnt+(n-cnt)/2+1<<endl;		
	}
}

大致思路是只要一个数两边的数不同,那这个数就可以删,然后模拟这个过程。

但同机房的大佬从第一个开始判会wa,而我存的只有后继,因此是从第二个开始删的,就不会wa。

2022/11/21 11:57
加载中...