QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#221881#7606. Digital Nimucup-team180#ML 0ms0kbC++171.4kb2023-10-21 14:57:502023-10-21 14:57:51

Judging History

你现在查看的是最新测评结果

  • [2023-10-21 14:57:51]
  • 评测
  • 测评结果:ML
  • 用时:0ms
  • 内存:0kb
  • [2023-10-21 14:57:50]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int B = 10;
const int MAX = 100000;
int digit_sum(int x){
  int ans = 0;
  while (x > 0){
    ans += x % B;
    x /= B;
  }
  return ans;
}
int main(){
  vector<vector<vector<int>>> dp(18, vector<vector<int>>(163, vector<int>(1 << 17, 0)));
  for (int i = 0; i < 163; i++){
    for (int j = 0; j < (1 << 17); j++){
      int j2 = (j << 1) & ((1 << 17) - 1);
      for (int k = 0; k < (i + 1) / 10; k++){
        if ((j >> k & 1) == 0){
          j2 |= 1;
        }
      }
      dp[1][i][j] = j2;
    }
  }
  for (int i = 2; i < 18; i++){
    for (int j = 0; j < 163 - 9; j++){
      for (int k = 0; k < 17; k++){
        int p = j;
        for (int l = 0; l < 10; l++){
          p = dp[i - 1][j + l][p];
        }
        dp[i][j][k] = p;
      }
    }
  }
  int t;
  cin >> t;
  for (int i = 0; i < t; i++){
    long long n;
    cin >> n;
    if (n % 10 != 0){
      cout << "Algosia" << endl;
    } else {
      string s = to_string(n);
      int L = s.size();
      int dsum = 0, p = (1 << 17) - 2;
      for (int j = L - 1; j >= 1; j--){
        int d = s[L - 1 - j] - '0';
        for (int k = 0; k < d; k++){
          p = dp[j][dsum][p];
          dsum++;
        }
      }
      if ((p & 1) == 0){
        cout << "Bajtek" << endl;
      } else {
        cout << "Algosia" << endl;
      }
    }
  }
}

详细

Test #1:

score: 0
Memory Limit Exceeded

input:

4
1
10
42
190

output:

Algosia
Bajtek
Algosia
Algosia

result: