codeforces Round#377

codeforces Round#377


表示还是只会水题:虽然这次做出了三题,但是前三题都是思维题吧,到了D题就不会了,还好吧,昨晚涨了100多分;
A. Buy a Shovel


题意:有若干个单位是10 的和一个单位是m的硬币,然后为刚好买多少个n才能使得不用找零;
思路:枚举,当n * i 是10的倍数或者 % 10 == m 的时候跳出;



#include using namespace std; typedef long long ll; const int maxn = 100000 + 10; int main() { ll n,m; while( ~ scanf("%I64d%I64d",&n,&m) ) { for(ll i = 1; i



B. Cormen — The Best Friend Of a Man

题意:输入一个n,m; 然后要使得大小为n的数组所有相邻的两个数之和大于等于m;求使得原来的数组实现这个功能要至少增加多少个单位,并输出;
思路:直接暴力,看两个相邻的两个数之和是否大于等于m,不是的就对后面的进行变化



#include using namespace std; typedef long long ll; const int maxn = 100000 + 10; int a[maxn]; int main() { ll n,m; while( ~ scanf("%I64d%I64d",&n,&m) ) { for(int i = 1; i <= n ; i ++) { scanf("%d",&a[i]); } ll ans = 0; for(int i = 2; i <= n ; i ++) { if(a[i] + a[i - 1] < m) { ans += m - a[i] - a[i - 1]; a[i] = m - a[i - 1]; } } cout << ans << endl; for(int i = 1; i <= n ; i ++) { if(i < n) cout << a[i] <<" "; else cout << a[i] << endl; } } return 0; }


C. Sanatorium



题意:输入的是早餐,中餐,晚餐的数量,可以在任意时间来或者离开,然后求出它他最少误了多少餐?
思路:列举所有正常的情况:1,0,0;0,1,0 ;0,0,1;1,1,0;1,0,1; 0,1,1; 1,1,1;

所以对于所有的早餐,中餐,晚餐,所有的情况都是一样的,所以先对他们进行一个从小到大的排序,再对两个小的补数进行了;



#include using namespace std; typedef long long ll; const int maxn = 100000 + 10; int a[maxn]; int main() { ll n,m,k; while( ~ scanf("%I64d%I64d%I64d",&n,&m,&k) ) { if(m == n && m == k) cout << 0 << endl; else { ll c = max(n,max(m,k)),a = min(n,min(m,k)), b = n + m + k - a - c; if(a == b || b == c) { if(a == b) cout << 2*c - a - b - 2 << endl; else cout << b - a - 1 << endl; } else cout << 2 * c - a - b- 2<< endl; } } return 0; }
























【codeforces Round#377】

    推荐阅读