case通过率为85.00%
请大家帮忙看看这是为什么不能通过呢?
我的思路是对每个进制先生成主串,然后判断主串是否包含子串。
#include<iostream> using namespace std; char sonstr[(int)1e6]; // 子串 char mainstr[(int)8e5]; // 主串 int _sc[16]; // 子串长度 int Len() { for (int i = 0; i < 8e5; i++) { if (!sonstr[i]) return i; } return 0; } // 进制转换 int System_change(char* tostr, int x, int to_system) { int size, pos = 0; while (x >= to_system) { _sc[pos++] = x % to_system; x = x / to_system; } _sc[pos++] = x; size = pos; int strpos = 0; while (pos--) { if(_sc[pos] < 10)tostr[strpos++] = _sc[pos] + 48; else tostr[strpos++] = _sc[pos] + 55; } return size; } // 字符串包含 bool Contains(char* main, char* son, int range) { range++; while (range--) { char* newmain = main + range; char* newson = son; while (*(newmain++) == *(newson++)) { if (!*newson)return true; } } return false; } int main() { int n; cin >> n; cin >> sonstr; int mainsize = 0; // 主串长度 int sonsize = Len(); // 子串长度 if (!sonsize) { cout << "no"; return 0; } for (int system = 2; system <= 16; system++) // 进制循环 { // 生成主串 for (int i = 1; i <= n; i++) { int len = System_change(mainstr + mainsize, i, system); mainsize += len; } // 是否包含子串 if (Contains(mainstr, sonstr, mainsize - sonsize)) { cout << "yes"; return 0; } mainsize = 0; } cout << "no"; return 0; }
全部评论
(0) 回帖