lightoj 1148 Mad Counting(数学水题)

lightoj 1148 Mad Counting

链接http://lightoj.com/volume_showproblem.php?problem=1148

题意:民意调查,每一名公民都有盟友,问最少人数。

思路:考察的知识点有两个:第一是整数相乘取上整;第二是容器大小(ps:不能算一个知识点,只能算一个坑点)。

做题思路:排序,如果被调查的人有相同盟友人数(n)的个数(cnt)大于这个数+1,即:(cnt > n+1), 容器已满,只能新开辟一个容器来装盟友。

代码

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #define N 51
 5 using namespace std;
 6 
 7 int a[N];
 8 
 9 int main()
10 {
11     int t, ic = 1, n, i;
12     scanf("%d", &t);
13     while(t--)
14     {
15         scanf("%d", &n);
16         for(i = 0; i < n; i++)
17             scanf("%d", a+i);
18         sort(a, a+n);
19         int k , ans = 0, cnt = 0;
20         for(i = 0; i < n; i++)
21         {
22             if(i == 0 || a[i] == a[i-1]) cnt++;
23             else
24             {
25                 k = (cnt+a[i-1]) / (a[i-1]+1); //+1 是因为加上自己人数,分子加上a[i-1]是因为取上整
26                 ans += k*(a[i-1]+1);
27                 cnt = 0;
28             }
29         }
30         ans += (cnt+a[n-1]) / (a[n-1]+1) * (a[n-1]+1);  //最后一组没有参加for循环的计算,这里单独算 
31         printf("Case %d: %d\n", ic++, ans);
32     }
33     return 0;
34 }

 

转载于:https://www.cnblogs.com/Duahanlang/p/3409179.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值