| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:输入格式的疑问,为什么这样错了?大神们请指教In Reply To:输入格式的疑问,为什么这样错了?大神们请指教 Posted by:dreamvyps at 2010-11-22 10:39:30 > 小弟之前写的代码如下:
> 用的是getline提取字符串来提取数据。
> #include <iostream>
> #include <string>
> #include <sstream>
> #include <stack>
> using namespace std;
>
> bool TrySolve(string line); /*if can be solved ,return false,else return true;*/
> int a[1001];
> int max_length = 0;
>
> int main()
> {
> // freopen("input.txt","r",stdin);
> string line = "";
> int flag = 0;
> while(getline(cin,line))
> {
> max_length = line[0] - '0';
> while(getline(cin,line))
> {
> if (line.length() > 1)
> {
> if (flag)
> {
> cout << endl;
> }
> if (TrySolve(line))
> {
> cout << "No" << endl;
> }
> else
> {
> cout << "Yes" << endl;
> }
> continue;
> }
> else if (line.length() == 1 && line[0] == '0')
> {
> flag = 1;
> break;
> }
> else
> cout << "Yes" << endl;
> }
> }
> return 0;
> }
>
> bool TrySolve(string line)
> {
> stringstream ss(line);
> int tmp = 0;
> int i = 0;
> int b[1001];
> stack<int> sta_var;
> while(ss >> a[i++]);
>
> for (int i = 0; i < max_length; ++i)
> {
> b[i] = i+1;
> }
>
> int cur = 0 ;
> int j = 0;
> for (int i = 0;i < max_length; ++i)
> {
> //search from the top element of the stack
> if (!sta_var.empty() && sta_var.top()==a[i])
> {
> sta_var.pop();
> continue;
> }
> // search from the current position
> for (j = cur; j < max_length; ++j)
> {
> if (b[j] == a[i])
> {
> cur = a[i];
> break;
> }
> // can't find ,then push into the stack
> else
> {
> sta_var.push(b[j]);
> }
> }
> if (j == max_length)
> {
> return true;
> }
> }
> return false;
> }
>
> //这个代码始终就是wa,不过可以找到的测试数据都可以通过。不过换了一下输入,核心算法没变,就ac了,请大神们指教,贴出代码如下:
>
>
>
> /*Wrote by Dream Chen */
> #include <iostream>
> #include <string>
> #include <stack>
> using namespace std;
>
> bool TrySolve(); /*if can be solved ,return false,else return true;*/
> int a[1001];
> int max_length = 0;
>
> int main()
> {
> // freopen("input.txt","r",stdin);
> string line = "";
> int flag = 0;
> while(cin >> max_length)
> {
> if (max_length == 0)
> {
> break;
> }
> int temp = 0;
> while(cin >> temp)
> {
> if (temp)
> {
> a[0] = temp;
>
> for (int i = 1; i < max_length; ++i)
> {
> cin >> a[i];
> }
> if (!TrySolve())
> {
> cout << "Yes" << endl;
> }
> else
> cout << "No" << endl;
> }
> else
> {
> cout << endl;
> break;
> }
> }
> }
> return 0;
> }
>
> bool TrySolve()
> {
> stack<int> sta_var;
> int b[1001];
>
> for (int i = 0; i < max_length; ++i)
> {
> b[i] = i+1;
> }
>
> int cur = 0 ;
> int j = 0;
> for (int i = 0;i < max_length; ++i)
> {
> //search from the top element of the stack
> if (!sta_var.empty() && sta_var.top()==a[i])
> {
> sta_var.pop();
> continue;
> }
> // search from the current position
> for (j = cur; j < max_length; ++j)
> {
> if (b[j] == a[i])
> {
> cur = a[i];
> break;
> }
> // can't find ,then push into the stack
> else
> {
> sta_var.push(b[j]);
> }
> }
> if (j == max_length)
> {
> return true;
> }
> }
> return false;
> }
原来是这里 max_length = line[0] - '0';错了。。。太粗心了。。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator