社区讨论

求助,玄关,拜谢(40pts)

P3718[AHOI2017初中组] alter参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lyqn1fzz
此快照首次捕获于
2024/07/18 10:14
2 年前
此快照最后确认于
2024/07/18 11:01
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

inline long long read();//kuai du

bool check(int k,int n);//mid=1

bool cmp(int x,int y);//sort sheng xu

int on[100005],off[100005];

int main()
{
	int n,k;
	n=read();
	k=read();
	string p;
//	int cnt=0;
    cin>>p;
    if(check(k,n))
    {
    	cout<<1;
    	return 0;
    }
    int mid=1;
    int cnt=1;
	char o;
    for(int i=1;i<=n;i++)
    {
    	if(o!=p[i])
    	{
    		cnt++;
    	}
    	if(p[i]=='N')
    	{
    		on[cnt]++;
    	}
    	if(p[i]=='F')
    	{
    		off[cnt]++;
    	}
    	o=p[i];
    }
    
    sort(on+1,on+cnt+1,cmp);
    
    sort(off+1,off+cnt+1,cmp);
    
    int num=0;
    for(int i=0;i<=n;i++)
    {
    	if(on[i]>0)
    	{
    		num++;
    	}
    	if(off[i]>0)
    	{
    		num++;
    	}
    }
//    cout<<num;
    for(int i=1;i<=n;i++)
    {
    	if(num/mid>k)
    	{
    		mid++;
    	}
    	else
    	{
    		cout<<mid;
    		return 0;
    	}
    }
	return 0;
}

bool check(int k,int n)
{
	string p;
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
       if(p[i]!=p[i-1])
       {
       	cnt=cnt;
       }
       else
       {
       	cnt++;
       }
    }
    if(cnt<=k)
    {
    	return 1;
    }
    else
    {
    	return 0;
    }
}

inline long long read()
{
	char cc=getchar();
	long long f=1;
	long long ans=0;
	while(cc<'0' or cc>'9')
	{
		if(cc=='-')
		{
			f=-1;
		}
		cc=getchar();
	}
	while(cc>='0' and cc<='9')
	{
		ans=(ans*10)+(cc-'0');
		cc=getchar();
	}
	return f*ans;
}

bool cmp(int x,int y)
{
	return x>y;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...