问题描述
我正在尝试去年第 1A 轮的 codejam 问题
#include <bits/stdc++.h>
using namespace std;
#define range(t) for (int i = 0; i < t; i++)
#define rangeG(i,t) for (i = 0; i < t; i++)
#define printVec(vec) \
for (auto c : vec) \
{ \
cout << c << endl; \
}
vector<string> separate(string s)
{
vector<string> result;
range(s.size())
{
if (s[i] == '*')
{
string temp = s.substr(0,i + 1);
if (temp.size() > 1)
{
result.push_back(temp);
}
s = s.substr(i,s.size());
i = 0;
}
else if (i == (s.size() - 1))
{
string temp = s.substr(0,i + 1);
result.push_back(temp);
s = s.substr(i,s.size());
}
}
return result;
}
void removeAsterisk(string &s)
{
s.erase(remove(s.begin(),s.end(),'*'),s.end());
}
bool setStart(string s,string &start)
{
bool possible = 1;
removeAsterisk(s);
range(min(s.size(),start.size()))
{
if (s[i] != start[i])
{
possible = 0;
}
}
if (possible)
{
if (s.size() >= start.size())
{
start = s;
}
}
return possible;
}
bool setEnd(string s,string &end)
{
bool possible = 1;
removeAsterisk(s);
range(min(s.size(),end.size()))
{
if (s[s.size() - 1 - i] != end[end.size() - 1 - i])
{
possible = 0;
}
}
if (possible)
{
if (s.size() >= end.size())
{
end = s;
}
}
return possible;
}
void solve()
{
int n;
cin >> n;
vector<string> allS;
bool possible = 1;
string start = "";
string end = "";
string middle = "";
string result = "";
while (n--)
{
string str;
cin >> str;
if (count(str.begin(),str.end(),'*') == 0)
{
result = str;
}
vector<string> temp = separate(str);
for (string s : temp)
{
if (s[0] != '*')
{
possible = setStart(s,start);
}
if (s[s.size() - 1] != '*')
{
possible = setEnd(s,end);
}
if (possible && count(s.begin(),'*') == 0)
{
result = s;
break;
}
if (s[0] == '*' && s[s.size() - 1] == '*')
{
removeAsterisk(s);
middle += s;
}
}
}
if (possible)
{
if (result.size() == 0)
{
result = start + middle + end;
}
cout << result << "\n";
}
else
{
cout << "*\n";
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 0;
cin >> t;
range(t)
{
cout << "Case #" << i + 1 << ": ";
solve();
}
return 0;
}
这对我来说似乎是正确的,我已经对许多示例进行了多次测试,但是它在测试集 1 中丢失了(正好是一个 *(星号)字符,并且始终是字符串的第一个字符)。谁能告诉我出了什么问题? 您可以考虑排名第一的代码 here (它具有所有解决方案,仅检查“模式匹配”任务)寻求帮助。我知道错误答案是一种边缘情况,如果它通过了测试集 1,那么它将通过其他测试集。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)