• 牛客练习赛13


    题解:出现了最多次数的只可能是4或者7

     1 #pragma warning(disable:4996)
     2 #include<queue>
     3 #include<cstdio>
     4 #include<bitset>
     5 #include<cstring>
     6 #include<iostream>
     7 #include<algorithm>
     8 using namespace std;
     9 
    10 int cnt1, cnt2, len;
    11 
    12 int main()
    13 {
    14     char s[100];
    15     scanf("%s", s);
    16     len = strlen(s);
    17     cnt1 = cnt2 = 0;
    18     for (int i = 0; i < len; i++) {
    19         if (s[i] == '4') cnt1++;
    20         if (s[i] == '7') cnt2++;
    21     }
    22     if (cnt1 == 0 && cnt2 == 0) printf("-1
    ");
    23     else if (cnt1 >= cnt2) printf("4
    ");
    24     else printf("7
    ");
    25 }

    题解:先构造出在1e10范围内的幸运数,然后分段讨论。

     1 #pragma warning(disable:4996)
     2 #include<queue>
     3 #include<cstdio>
     4 #include<bitset>
     5 #include<cstring>
     6 #include<iostream>
     7 #include<algorithm>
     8 using namespace std;
     9 typedef long long ll;
    10 
    11 const int maxn = 2000;
    12 
    13 ll cnt = 0;
    14 ll a[maxn];
    15 
    16 void DFS(ll x, int d) {
    17     a[cnt++] = x;
    18     if (d == 9) return;
    19     DFS(x * 10 + 4, d + 1);
    20     DFS(x * 10 + 7, d + 1);
    21 }
    22 
    23 void Inite() {
    24     DFS(0, 0);
    25     sort(a, a + cnt);
    26     a[cnt++] = 4444444444;
    27 }
    28 
    29 int main()
    30 {
    31     Inite();
    32     ll l, r;
    33     while (scanf("%lld%lld", &l, &r)!=EOF) {
    34         ll ans = 0, pos = 0;
    35         while (l <= r) {
    36             while (a[pos] < l) pos++;
    37             ans += (min(a[pos], r) - l + 1)*a[pos];
    38             l = a[pos] + 1;
    39         }
    40         printf("%lld
    ", ans);
    41     }
    42 }

    题解:注意到两种情况,447,4在偶数的位置上。477,4在奇数的位置上。剩下的直接改就行。

     1 #pragma warning(disable:4996)
     2 #include<queue>
     3 #include<cstdio>
     4 #include<bitset>
     5 #include<cstring>
     6 #include<iostream>
     7 #include<algorithm>
     8 using namespace std;
     9 
    10 const int maxn = 1e5 + 5;
    11 
    12 int n, k;
    13 char s[maxn];
    14 
    15 int main()
    16 {
    17     while (scanf("%d%d", &n, &k) != EOF) {
    18         scanf("%s", s + 1);
    19         int l = strlen(s+1);
    20         for (int i = 1; i < l; i++) {
    21             if (s[i] == '4' && s[i + 1] == '7') {
    22                 //if (i == 1) { s[i + 1] = '4'; k--; continue; }
    23                 if (i & 1) {
    24                     if (i + 1 != l && s[i + 2] == '7') {
    25                         if (k & 1) s[i + 1] = '4';
    26                         break;
    27                     }
    28                     else s[i + 1] = '4';
    29                 }
    30                 else {
    31                     if (i - 1 != 0 && s[i - 1] == '4') {
    32                         if ((k & 1)) s[i] = '7';
    33                         break;
    34                     }
    35                     else s[i] = '7';
    36                 }
    37                 k--;
    38             }
    39         }
    40         printf("%s
    ", s + 1);
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    _status()函数
    _clear87()函数
    _clear87()函数
    _clear87()函数
    _clear87()函数
    南邮NOJ1009 2的n次方
    南邮NOJ2063 突发奇想的茂凯
    南邮NOJ2063 突发奇想的茂凯
    【HDOJ】1297 Children’s Queue
    【HDOJ】2103 Family planning
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/8593432.html
Copyright © 2020-2023  润新知