SGU 127: Telephone directory

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=127

题目大意:

      一个同学要做一本电话簿,电话号码有四个数字组成,开头不含0和8,封面和说明用了2页,每页不能超过K个号码,每个新号码为第一个数字的要另起一页,每个号码按照递增顺序。给你n个号码,问最少需要用多少页纸。

解题思路:

     因为页码只跟每个开头数字的号码数量有关,比如1开头的号码有7个,每页最大号码数是5,那么1开头的号码要用2页,每个数字开头的都算出来,然后加上2页封面和说明就是答案。

解题代码:

#include<iostream>
#include<cstring>
using namespace std;
int s[10];
int main(){
	int k,n;
	while(cin>>k>>n){
		int t;
		memset(s,0,sizeof(s));
		while(n--){
			cin>>t;
			s[t/1000]++;
		}
		int sum=0;
		for(int i=1;i<10;i++){
			if(s[i]%k)
				sum+=s[i]/k+1;
			else
				sum+=s[i]/k;
		}
		sum+=2;
		cout<<sum<<endl;
	}
}

扩展知识:http://www.a0598.com/lifetool/main/areacode.htm