2720 - 全民打怪兽
Time Limit : 1 秒
Memory Limit : 128 MB
最近爱上了“全民打怪兽”这个游戏,在这个游戏中有一个怪兽合成系统,当两个相同星级且都是满级强化到了5的怪兽可以合成一个高星级的1级强化为0的怪兽。 怪兽强化系统比较麻烦,所以我们都是用相同星级的强化,这样强化几率是100%。现在我想要合成一个n星级的宝宝,并且我身上有一些不同星级不同强化的宝宝,请问,我最少还需要多少一星的宝宝才可以合成成功(假设合成后自动变成满级)。
Input
多组输入。每组输入一个n(n<=10)表示想要合成的星级,接下来n-1行,每行一开始输入一个数mi(mi<=100)表示该星级(从1星开始)宝宝的个数,接下来输入mi个数,表示这些宝宝的强化等级(<=5)。
Output
每组数据输出一行,表示还需要的一星宝宝。
Examples
Input Format
3 2 5 5 2 4 5
Output Format
0
Solution C++
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; #define INF 100001 int bb[11],a[11][1001]; int main() { int n,aa,temp; while(scanf("%d",&n)!=EOF) { if(n==0)printf("0\n"); else{ long long k=10; long long ans; memset(a,0,sizeof(a)); for(int i=1;i<n;i++) { scanf("%d",&bb[i]); for(int j=101-bb[i];j<101;j++) { scanf("%d",&a[i][j]); a[i][j]+=1; } for(int jj=0;jj<=100;jj++) { for (int ii=0;ii<100-jj;ii++) if (a[i][ii]>a[i][ii+1]) { temp=a[i][ii]; a[i][ii]=a[i][ii+1]; a[i][ii+1]=temp; } } k*=10; } long long t=1; for(int i=n-1;i>0;i--) { ans=0; for(int j=100;j>100-t*2 && j>0;j--) { ans+=a[i][j]; } if(bb[i]>=t*2) { t=t*12-ans-(bb[i]-t*2); } else { t=t*12-ans; } } if(t<0)printf("0\n"); else printf("%lld\n",t); } } return 0; }