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

求大神 不知道哪里WA了 我是按位处理的

Posted by liyan199311 at 2017-03-31 17:58:25 on Problem 1023
#include<iostream>
#include<string>
#include<vector>
#include <fstream> 
#include<bitset>
using namespace std;

string np_data;
int length;
__int64 data;
unsigned __int64 cur_data;
bitset<64> bs;
int foundIndex = 63;

bool handData()
{
	return true;
}

void add(int index)
{
	bool cin = 1, next_cin = false;
	do
	{
		if (np_data[length - 1 - index] == 'n')
		{
			next_cin = !bs[index];
		}
		else
		{
			next_cin = bs[index];
		}
		bs[index] = !bs[index];
		cin = next_cin;
		index++;
	} while (cin); 
}

int main()
{
	//ifstream in("d:\\document\\test.txt");
	int max_case;
	cin >> max_case;
	while (max_case--)
	{
		cin >> length >> np_data >> data;
		cur_data = 0;
		bool result = true;
		bool hasFound = true;
		foundIndex = length - 1;
		bs = bitset<64>(data);
		if (bs[63])
		{
			hasFound = false;
			for (int i = 63; i >= length; i--)
			{
				if (!bs[i])
				{
					result = false;
					break;
				}
			}
			if (result)
			{
				for (int i = length - 1; i >= 0; i--)
				{
					if (np_data[length - 1 -i] != 'n')
					{
						if (!bs[i])
						{
							result = false;
							break;
						}
						else
						{
							bs[i] = 0;
						}
					}
					else
					{
						bs[i] = 1;
						if (bs[i])
						{
							hasFound = true;
							break;
						}
					}
				}
			}
		}
		else
		{
			unsigned __int64 max = 0;
			for (int i = 0; i <= length - 1; i++)
			{
				max = max << 1;
				if (np_data[i] != 'n')
				{
					max += 1;
				}
			}
			if (max < (unsigned __int64)data)
			{
				result = false;
			}
		}
		if (result && hasFound)
		{
			for (int i = 0; i < foundIndex; i++)
			{
				int index = length - 1 - i;
				if (np_data[index] == 'n' && bs[i])
				{
					add(i + 1);
				}
			}
			for (int i = length - 1; i >= 0; i--)
			{
				cout << bs[i];
			}
			cout << endl;
		}
		else
		{
			cout << "Impossible" << endl;
		}
	}
	system("pause");
	return 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