답안 #643136

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
643136 2022-09-21T09:21:54 Z TimDee Password (RMI18_password) C++17
10 / 100
6 ms 336 KB
#include <bits/stdc++.h>
using namespace std;

int query(string s);

string guess(int n, int c) {

  if (c==2) {
    string A(n,'a'), B(n,'b');
    int a=query(A),b=query(B);
    string ans;
    int added=0;
    for (int i=a; i>=0; --i) {
      string s;
      for (int j=0; j<i; ++j) s+='a';
      for (int j=i; j<n; ++j) s+='b';
      int x=query(s);
      for (int j=0; j<x-added-i; ++j) ans+='b';
      ans+='a';
      added=x-i;
    }
    ans.pop_back();
    reverse(ans.begin(), ans.end());
    return ans;
  }
  if (c==3) {
    string A(n,'a'), B(n,'b'), C(n,'c');
    int a=query(A),b=query(B),c=query(C);
    string ans;
    int addedb=0,addedc=0;
    for (int i=a; i>=0; --i) {
      string s;
      for (int j=0; j<i; ++j) s+='a';
      for (int j=i; j<n; ++j) s+='b';
      int x=query(s)-i-addedb;
      s.clear();
      for (int j=0; j<i; ++j) s+='a';
      for (int j=i; j<n; ++j) s+='c';
      int y=query(s)-i-addedc;
      
      string tmp(i,'a');
      int added=0;
      cout<<x<<' '<<y<<'\n';
    if (y) {
      for (int j=x; j>=0; --j) {
        string s=tmp;
        for (int k=0; k<j; ++k) s+='b';
        for (int k=0; k<y; ++k) s+='c';
        int v=query(s)-i-j-added;
        for (int k=0; k<v; ++k) {
          ans+='c'; addedc++; added++;
        }
        ans+='b';
        addedb++;
      } 
      if (ans.size()) {ans.pop_back(); --addedb;}
    }
      else for(int k=0; k<x; ++k) {ans+='b'; addedb++;}
      
      ans.push_back('a');
    }
    if (ans.size()) ans.pop_back();
    reverse(ans.begin(), ans.end());
    return ans;
  }

  if (n<=c && c<=26) {
    string ans(n,'.');
    for (char i='a'; i<'a'+c; ++i) {
      int x=0;
      for (char j='a'; j<'a'+c; ++j) {
        if (j==i) continue;
        string s;
        s+=i; s+=j;
        int q=query(s);
        x+=q-1;
      }
      if (x<0) continue;
      ans[n-1-x]=i;
    }
    int paiu=1;
    for (auto x:ans) paiu&=x!='.';
    if (paiu) return ans;
  }
}

Compilation message

password.cpp: In function 'std::string guess(int, int)':
password.cpp:10:20: warning: unused variable 'b' [-Wunused-variable]
   10 |     int a=query(A),b=query(B);
      |                    ^
password.cpp:28:20: warning: unused variable 'b' [-Wunused-variable]
   28 |     int a=query(A),b=query(B),c=query(C);
      |                    ^
password.cpp:28:31: warning: unused variable 'c' [-Wunused-variable]
   28 |     int a=query(A),b=query(B),c=query(C);
      |                               ^
password.cpp:85:1: warning: control reaches end of non-void function [-Wreturn-type]
   85 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 208 KB Guessed the password with 211 queries.
2 Correct 6 ms 292 KB Guessed the password with 507 queries.
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 208 KB Guessed the password with 28 queries.
2 Runtime error 1 ms 208 KB Execution killed with signal 13
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 336 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 208 KB Guessed the password with 211 queries.
2 Correct 6 ms 292 KB Guessed the password with 507 queries.
3 Correct 1 ms 208 KB Guessed the password with 28 queries.
4 Runtime error 1 ms 208 KB Execution killed with signal 13
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 208 KB Guessed the password with 211 queries.
2 Correct 6 ms 292 KB Guessed the password with 507 queries.
3 Correct 1 ms 208 KB Guessed the password with 28 queries.
4 Runtime error 1 ms 208 KB Execution killed with signal 13
5 Halted 0 ms 0 KB -