赛氪OJ-专注于算法竞赛的在线评测系统 (saikr.com)
思路
首先我们需要对这些题目和需要解决题目的用时做一个映射:
值存题目类型(A类,B类……),存题目花时(A对应1,B对应2……Z对应26)
然后我们在做题的时候有两种选择:
1.题做一半去做其他题,最后再切回来继续做,直到把题做完为止(也可能没做完)
2.一直把这道题做完为止再做下一道题。
拿题目B举例(题目B需要花时2分钟):
不管是哪种做题方式,我们最终只需要看 小理 对当前题目的花时 是否等于映射表里面的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;
}