算法设计与编程 问题解决日志 知识点:思维

51 阅读2分钟

赛氪OJ-专注于算法竞赛的在线评测系统 (saikr.com)

思路

首先我们需要对这些题目和需要解决题目的用时做一个映射:

keykey值存题目类型(A类,B类……),valuevalue存题目花时(A对应1,B对应2……Z对应26)

然后我们在做题的时候有两种选择:

1.题做一半去做其他题,最后再切回来继续做,直到把题做完为止(也可能没做完)

2.一直把这道题做完为止再做下一道题。

拿题目B举例(题目B需要花时2分钟): image.png

不管是哪种做题方式,我们最终只需要看 小理 对当前题目的花时 是否等于映射表里面的value值 ,就可以判断出当前题目是否做完,其实也就是判断题目出现的次数是否等于。

朴素代码如下:

#include<bits/stdc++.h>
using namespace std;
int t,n,ans;
int haxi[500];
 char s[500];
void sovel()
{
	cin>>n;
	
     scanf("%s", s);
	
	for(int i=0;i<n;i++)
	{
	if(s[i]=='A')haxi[1]++;
	if(s[i]=='B')haxi[2]++;
	if(s[i]=='C')haxi[3]++;
	if(s[i]=='D')haxi[4]++;
	if(s[i]=='E')haxi[5]++;
	if(s[i]=='F')haxi[6]++;
	if(s[i]=='G')haxi[7]++;
	if(s[i]=='H')haxi[8]++;
	if(s[i]=='I')haxi[9]++;
	if(s[i]=='J')haxi[10]++;
	if(s[i]=='K')haxi[11]++;
	if(s[i]=='L')haxi[12]++;	
	if(s[i]=='M')haxi[13]++;
	if(s[i]=='N')haxi[14]++;
	if(s[i]=='O')haxi[15]++;
	if(s[i]=='P')haxi[16]++;
	if(s[i]=='Q')haxi[17]++;
	if(s[i]=='R')haxi[18]++;
	if(s[i]=='S')haxi[19]++;
	if(s[i]=='T')haxi[20]++;
	if(s[i]=='U')haxi[21]++;
	if(s[i]=='V')haxi[22]++;
	if(s[i]=='W')haxi[23]++;
	if(s[i]=='X')haxi[24]++;
	if(s[i]=='Y')haxi[25]++;
	if(s[i]=='Z')haxi[26]++;	
	}
	
	for(int i=1;i<=26;i++)
	{
		if(haxi[i]>=i)ans++;
	}
	
		cout<<ans<<endl;
		ans=0;
	  memset(haxi, 0, sizeof(haxi));
}
int main()
{
	cin>>t;
	while(t--)
	{
		sovel();
	}
	return 0;
}