C. System Testing(思维)

本文探讨了一种系统测试场景下,如何通过模拟每秒处理多个方案的过程,计算出达到特定进度时的有趣方案数量。有趣方案是指当进度达到某个百分比时,恰好有方案处理到对应测试点的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

给出n个解决方案,一个方案要通过ai个测试点,可以同时处理k个方案,问有趣的方案个数。
有趣的方案:当前的进度d=[100*m/n] (四舍五入取整),m是已经测试完的方案,如果此时恰好有一个方案处理到第d个测试点,则该方案为有趣的方案。

思路:

观察数据可以看到ai<=150,我们可以暴力枚举秒,每秒来模拟。记录一下当前处理的k个任务,以及每个任务处理到第几个测试点。每秒判断一个这k个任务是否有满足条件的就行了。注意一个方案只能算一次,不要重复算。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>pii;
typedef vector<int>vi;

#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define fi first
#define se second
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" " ;
#define pb(x) push_back(x)
#define per(i,a,b) for(int i=(b)-1;i>=(a);--i)
const int N=2e5+5;
int a[N],b[N],c[N],vis[N];
int main()
{
	int n,k;
	cin>>n>>k;
	rep(i,1,n+1)
		cin>>a[i]; 
	rep(i,1,k+1)
		b[i]=a[i];
	int task=0,cur=k+1,ans=0;
	while(task<n){
		int q=task*100.0/n+0.5;
		for(int i=1;i<=k;++i){
			if(!b[i])continue;
			c[i]++;
			if(c[i]==q&&!vis[i])ans++,vis[i]=1;
			if(c[i]>=b[i]){
				task++;
				vis[i]=0;
				c[i]=0;
				b[i]=a[cur];
				cur++;
			}
		}
		
	}
	cout<<ans<<endl;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值