Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:输入格式的疑问,为什么这样错了?大神们请指教

Posted by dreamvyps at 2010-11-22 15:47:37 on Problem 1363
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator