首页 > 代码库 > Educational Codeforces Round 21 Problem A - C

Educational Codeforces Round 21 Problem A - C

Problem A Lucky Year

 

题目传送门[here]

  题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少。

  这个幸运的数不是最高位的数字都是零,于是只跟最高位有关,只保留最高位,然后加一求差就是答案。

Code

技术分享
 1 /** 2  * Codeforces 3  * Problem#808A 4  * Accepted 5  * Time:15ms 6  * Memory:0k 7  */ 8 #include<iostream> 9 #include<cstdio>10 #include<ctime>11 #include<cctype>12 #include<cstring>13 #include<cstdlib>14 #include<fstream>15 #include<sstream>16 #include<algorithm>17 #include<map>18 #include<set>19 #include<stack>20 #include<queue>21 #include<vector>22 #include<stack>23 using namespace std;24 typedef bool boolean;25 #define inf 0xfffffff26 #define smin(a, b) a = min(a, b)27 #define smax(a, b) a = max(a, b)28 #define max3(a, b, c) max(a, max(b, c))29 #define min3(a, b, c) min(a, min(b, c))30 template<typename T>31 inline boolean readInteger(T& u){32     char x;33     int aFlag = 1;34     while(!isdigit((x = getchar())) && x != - && x != -1);35     if(x == -1) {36         ungetc(x, stdin);37         return false;38     }39     if(x == -){40         x = getchar();41         aFlag = -1;42     }43     for(u = x - 0; isdigit((x = getchar())); u = (u << 1) + (u << 3) + x - 0);44     ungetc(x, stdin);45     u *= aFlag;46     return true;47 }48 49 int power[10];50 51 int n;52 int bits = 0;53 54 inline void init() {55     power[0] = 1;56     for(int i = 1; i <= 10; i++)57         power[i] = power[i - 1] * 10;58 }59 60 inline void solve() {61     readInteger(n);62     while(power[bits] <= n)    bits++;63     int high = n - n % power[bits - 1];64     int next = high + power[bits - 1];65     printf("%d\n", next - n);66 }67 68 int main() {69     init();70     solve();71     return 0;72 }
Problem A

Problem B Average Sleep Time

题目传送门[here]

  题目大意是说,给出n个数ai和k,再得到n - k + 1个新数,第i个新数为技术分享,再求这几个新数的平均数。

  有两种方法,第一种是前缀和暴力乱搞。第二种是特殊处理两段的数被求和的次数,中间的都是k,然后就可以求和了,然后就可以求平均数。

  我呢,用的第一种方法,因为懒。

Code

技术分享
 1 /** 2  * Codeforces 3  * Problem#808B 4  * Accepted 5  * Time:30ms 6  * Memory:2400k 7  */ 8 #include<iostream> 9 #include<cstdio>10 #include<ctime>11 #include<cctype>12 #include<cstring>13 #include<cstdlib>14 #include<fstream>15 #include<sstream>16 #include<algorithm>17 #include<map>18 #include<set>19 #include<stack>20 #include<queue>21 #include<vector>22 #include<stack>23 using namespace std;24 typedef bool boolean;25 #define inf 0xfffffff26 #define smin(a, b) a = min(a, b)27 #define smax(a, b) a = max(a, b)28 #define max3(a, b, c) max(a, max(b, c))29 #define min3(a, b, c) min(a, min(b, c))30 template<typename T>31 inline boolean readInteger(T& u){32     char x;33     int aFlag = 1;34     while(!isdigit((x = getchar())) && x != - && x != -1);35     if(x == -1) {36         ungetc(x, stdin);37         return false;38     }39     if(x == -){40         x = getchar();41         aFlag = -1;42     }43     for(u = x - 0; isdigit((x = getchar())); u = (u << 1) + (u << 3) + x - 0);44     ungetc(x, stdin);45     u *= aFlag;46     return true;47 }48 49 #define LL long long50 51 int n, k;52 LL *sum;53 int* a;54 double w;55 56 inline void init() {57     readInteger(n);58     readInteger(k);59     w = n - k + 1;60     sum = new LL[(const int)(n + 1)];61     a = new int[(const int)(n + 1)];62     sum[0] = 0;63     for(int i = 1; i <= n; i++) {64         readInteger(a[i]);65         sum[i] = sum[i - 1] + a[i];66     }67 }68 69 LL s = 0;70 double avg = 0.0;71 72 inline void solve() {73     for(int i = k; i <= n; i++) {74         s += sum[i] - sum[i - k];75     }76     avg = s / w;77     printf("%.9lf", avg);78 }79 80 int main() {81     init();82     solve();83     return 0;84 }
Problem B

Problem C Tea Party

题目传送门[here]

  语文不好,题目大意就不给了(显然是太懒了),去看原题吧,看不懂扔给谷歌机翻。

  首先呢给每人达到最低要求的茶叶量,这时判一下是否合法。(然后跳过一个if吧)。

  接着很容易想到一个符合题意的贪心,给茶杯最大的人加尽可能多的茶叶(能加满就加满),如果还有剩的,就给茶杯第二大的人加....

  这个显然是合法,不会出现让顾客不满意的情况。

Code

技术分享
  1 /**  2  * Codeforces  3  * Problem#808C  4  * Accepted  5  * Time:15ms  6  * Memory:0k  7  */  8 #include<iostream>  9 #include<cstdio> 10 #include<ctime> 11 #include<cctype> 12 #include<cstring> 13 #include<cstdlib> 14 #include<fstream> 15 #include<sstream> 16 #include<algorithm> 17 #include<map> 18 #include<set> 19 #include<stack> 20 #include<queue> 21 #include<vector> 22 #include<stack> 23 using namespace std; 24 typedef bool boolean; 25 #define inf 0xfffffff 26 #define smin(a, b) a = min(a, b) 27 #define smax(a, b) a = max(a, b) 28 #define max3(a, b, c) max(a, max(b, c)) 29 #define min3(a, b, c) min(a, min(b, c)) 30 template<typename T> 31 inline boolean readInteger(T& u){ 32     char x; 33     int aFlag = 1; 34     while(!isdigit((x = getchar())) && x != - && x != -1); 35     if(x == -1) { 36         ungetc(x, stdin); 37         return false; 38     } 39     if(x == -){ 40         x = getchar(); 41         aFlag = -1; 42     } 43     for(u = x - 0; isdigit((x = getchar())); u = (u << 1) + (u << 3) + x - 0); 44     ungetc(x, stdin); 45     u *= aFlag; 46     return true; 47 } 48  49 typedef class Teacup { 50     public: 51         int val; 52         int pos; 53          54         Teacup(int val = 0, int pos = 0):val(val), pos(pos) {        } 55          56         boolean operator < (Teacup b) const { 57             if(val != b.val)    return val > b.val; 58             return pos < b.pos; 59         } 60 }Teacup; 61  62 int n; 63 int w; 64 int *a; 65 int s = 0; 66 int *b; 67 Teacup* tc; 68  69 inline void init() { 70     readInteger(n); 71     readInteger(w); 72     a = new int[(const int)(n + 1)]; 73     b = new int[(const int)(n + 1)]; 74     for(int i = 1; i <= n; i++) { 75         readInteger(a[i]); 76         b[i] = (a[i] + 1) / 2; 77         s += b[i]; 78     } 79 } 80  81 inline void solve() { 82     if(s > w) { 83         puts("-1"); 84         return; 85     } 86     w -= s; 87     tc = new Teacup[(const int)(n + 1)]; 88     for(int i = 1; i <= n; i++) 89         tc[i] = Teacup(a[i], i); 90     sort(tc + 1, tc + n + 1); 91     int i = 0; 92     while(w) { 93         i++; 94         int delta = min(w, tc[i].val - b[tc[i].pos]); 95         b[tc[i].pos] += delta; 96         w -= delta; 97     } 98     for(int i = 1; i <= n; i++) { 99         printf("%d ", b[i]);100     }101 }102 103 int main() {104     init();105     solve();106     return 0;107 }
Problem C

Educational Codeforces Round 21 Problem A - C