www求助对了两个点
查看原帖
www求助对了两个点
824941
bsjsaikou10楼主2023/9/26 14:50
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 5e5 + 5;
typedef struct Card{
    int v = 1;
    friend bool operator < (Card a,Card b){
        return a.v > b.v;
    }
}Card;
Card card[MAXN];
int c[MAXN],f[MAXN];
int T,n,m,k,cnt,cnt2,cnt3;
int main(){
    scanf("%d",&T);
    while(T--){
        int ans = 0;
        cnt = 0,cnt2 = 0,cnt3 = 0;
        for(int i = 1; i <= n; i++){
            f[i] = 1;
        }
        scanf("%d%d%d",&n,&m,&k);
        int l = 1;
        for(int i = 1; i <= n; i++){
            scanf("%d",&c[i]);
        }
        for(int i = 1; i <= n; i++){
            int j = i;
            while(j <= n && !(c[i] ^ c[j])){
                j++;
            }
            f[++cnt] = j - i;
            i = j - 1;
        }
        l = 1;
        for(int i = 1; i <= cnt; i++){
            if(!(f[i] % 2)){
                cnt3++;
            }
            card[++cnt2].v = f[i];
            l = i;
        }
        int cmd = 0;
        for(int i = 1; i <= cnt2; i++){
        	if(card[i].v & 1){
        		if(m - cmd <= 0){
                	break;
            	}
            	if(!(card[i].v ^ 1)){
            		ans++;
				}
            	if(card[i].v > 2 && k > 2){
                	if(m - cmd - ((card[i].v - 1) >> 1) < 0){
                	    continue;
                	}
                	ans += card[i].v;
                	cmd += ((card[i].v - 1) >> 1);
            	}
            	else{
                	continue;
            	}
			}
			else{
				if(m - cmd <= 0){
          	      break;
         	   	}
         	   	if(!(card[i].v ^ 1)){
            		ans++;
				}
            	if(card[i].v > 2 && k > 2){
                	if(m - cmd - ((card[i].v - 1) >> 1) < 0){
                    	continue;
                	}
                	ans += card[i].v - 1;
                	cmd += ((card[i].v - 1) >> 1);
            	}
            	else{
                	continue;
            	}
			}
		}
		if(cmd < m){
			if(cnt3 <= (m - cmd)){
				ans += cnt3;
			}
			else{
				ans += (m - cmd);
			}
		}
    	printf("%d\n",ans);
    }
}

2023/9/26 14:50
加载中...