CCF-20180903 요소 선택기
CCF-20180903 요소 선택기
제목: html 문서에 대응하는 요소의 위치를 찾아낸다.분석: 문자열 문제 시뮬레이션, CCF 고전 문제.코드:이 문제는 80점밖에 못 받았는데 아직도 버그를 찾고 있어요.
#include
using namespace std;
const int MAXN = 111;
struct Item //html
{
int dot;
string text;
string id;
} item[MAXN];
int fa[MAXN]; //
struct Option //
{
int len, id;
string op[11];
} option[MAXN];
string arr[MAXN];
vector<int> vi[MAXN]; //
int main ()
{
int n, m;
cin >> n >> m;
getchar();
for (int i = 0; i < n; i++)
{
getline(cin, arr[i]);
}
//solve
// HTML
memset (fa, -1, sizeof (fa));
for (int i = 0; i < n; i++)
{
int dot = 0;
string tmp = "";
string tmpid = "";
bool flag = true;
for (int j = 0; j < arr[i].length (); j++)
{
if (arr[i][j] == '.')
{
dot++;
continue;
}
if (arr[i][j] == ' ')
{
flag = false;
continue;
}
if (flag)
tmp += arr[i][j];
else
tmpid += arr[i][j];
}
item[i].text = tmp;
item[i].id = tmpid;
item[i].dot = dot;
for (int k = 0; k < item[i].text.length(); k++)
{
if (isupper(item[i].text[k])) item[i].text[k] = tolower(item[i].text[k]);
}
for (int j = i; j >= 0; j--)
{
if (item[i].dot == item[j].dot + 2)
{
fa[i] = j;
break;
}
}
}
/*
for (int i = 0; i < n; i++)
{
cout <
//
for (int i = 0; i < m; i++)
{
int sz = 0;
string s;
getline (cin, s);
string tmp = "";
for (int j = 0; j < s.length (); j++)
{
if (s[j] == ' ')
{
option[i].op[sz] = tmp;
sz++;
tmp = "";
} else
{
tmp += s[j];
}
}
option[i].op[sz] = tmp;
option[i].len = sz;
option[i].id = i;
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j <= option[i].len; j++)
{
if (option[i].op[j][0] != '#')
{
for (int k = 0; k < option[i].op[j].length(); k++)
{
if (isupper(option[i].op[j][k])) option[i].op[j][k] = tolower(option[i].op[j][k]);
}
}
}
}
/*
for (int i = 0; i < m; i++)
{
for (int j = 0; j <= option[i].len; j++)
{
cout << option[i].op[j] << " ";
}
cout << endl;
}
*/
//
for (int k = 0; k < m; k++){
int sz = option[k].len;
for (int i = 0; i < n; i++)
{
int j1, j2;
for (j1 = i, j2 = sz; j1 != -1&&j2 >= 0; j1 = fa[j1], j2--)
{
// cout <
if (option[k].op[j2].compare(item[j1].text) == 0 || option[k].op[j2].compare(item[j1].id) == 0)
{
}
else
{
break;
}
}
if (j2 == -1)
{
vi[k].push_back(i + 1);
}
}
}
for (int i = 0; i < m; i++)
{
cout << vi[i].size();
for (int j = 0; j < vi[i].size(); ++j)
{
cout << " " << vi[i][j];
}
cout << endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
파이톤으로 바둑판 게임'뱅크스'가의 멈추기 쉬운 곳을 계산했어요.연말연시 보드게임'뱅크스'를 하며 멈추기 쉬운 집이 눈에 띄는 데 관심을 두고 시뮬레이션을 해 주차의 편의성을 계산했다. 환경은 아이폰의 파이토후니스타에서 진행된다. 출전: 결과만 알고 싶은 사람을 위해 먼저 실행 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.