A Birthday
http://codeforces.com/contest/1068/problem/A
题意:
有n种硬币,m个人。m个人要给Ivan送硬币,每个人送的硬币都要互不相同但数量一样。Ivan现在已经有k种了,具体哪k种不知道。现在要求朋友们送的硬币至少有l种是IVan没有的。
思路:
刚开始想的是l/m取上整。后来发现题意是不知道Ivan有的是哪几种,为了保证一定至少l种的话,就需要(l+k)/m取上整。
不可能的情况是人数乘每个人送的硬币数超过n。
用longlong
1 #include <bits/stdc++.h> 2 #define inf 0x3f3f3f3f 3 using namespace std; 4 5 long long n, m, l, k; 6 int main() 7 { 8 while(scanf("%I64d%I64d%I64d%I64d", &n, &m, &k, &l) != EOF){ 9 long long cnt; 10 if((l + k) % m == 0){ 11 cnt = (l + k) / m; 12 } 13 else { 14 cnt = (l + k) / m + 1; 15 } 16 if(cnt * m > n){ 17 printf("-1\n"); 18 } 19 else{ 20 printf("%I64d\n", cnt); 21 22 } 23 24 } 25 return 0; 26 }