2 条题解

  • 1
    @ 2026-5-20 12:31:35

    本篇题解有误,经阎帝检查发现35行少一个t++t++,一下是正确代码

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 10;
    int a[N];
    map<int, int> mp;
    int check(int x) {
        if (x == 0) return 1;
        int d = 0; while (x > 0) x /= 10, d++;
        return d;
    }
    
    int main() {
        int n, m; scanf("%d%d", &n, &m);
        if (n % m == 0) { printf("%d.0", n / m); return 0; }
        
        printf("%d.", n / m);
        int t = check(n / m) + 1;
        n %= m;
    
        int len = 0;
        while (!mp[n] && n) {
            mp[n] = len + 1;
            a[++len] = n * 10 / m;
            n = n * 10 % m;
        }
        
        if (n == 0) {
            for (int i = 1; i <= len; i++) {
                printf("%d", a[i]);
                if ((i + t) % 76 == 0) printf("\n");
            }
        } else {
            int p = mp[n];
            for (int i = 1; i <= len; i++) {
                if (i == p) printf("("),t++;
                printf("%d", a[i]);
                if ((i + t) % 76 == 0) printf("\n");
            }
            printf(")\n");
        }
        return 0;
    }
    
    
    • -1
      @ 2025-10-8 16:55:00
      #include <bits/stdc++.h>
      using namespace std;
      const int N = 1e5 + 10;
      int a[N];
      unordered_map<int, int> mp;
      
      int check(int x) {
          if (x == 0) return 1;
          int d = 0; while (x > 0) x /= 10, d++;
          return d;
      }
      
      int main() {
          int n, m; scanf("%d%d", &n, &m);
          if (n % m == 0) { printf("%d.0", n / m); return 0; }
          
          printf("%d.", n / m);
          int t = check(n / m) + 1;
          n %= m;
      
          int len = 0;
          while (!mp[n] && n) {
              mp[n] = len + 1;
              a[++len] = n * 10 / m;
              n = n * 10 % m;
          }
          
          if (n == 0) {
              for (int i = 1; i <= len; i++) {
                  printf("%d", a[i]);
                  if ((i + t) % 76 == 0) printf("\n");
              }
          } else {
              int p = mp[n];
              for (int i = 1; i <= len; i++) {
                  if (i == p) printf("(");
                  printf("%d", a[i]);
                  if ((i + t) % 76 == 0) printf("\n");
              }
              printf(")\n");
          }
          return 0;
      }
      
    • 1

    【模拟】[USACO2.4] 分数化小数 Fractions to

    信息

    ID
    1016
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    76
    已通过
    31
    上传者