且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

password加密问题

更新时间:2022-09-16 21:04:55

password加密问题

个人信息:就读于燕大本科软件project专业 眼下大三;

本人博客:google搜索“cqs_2012”就可以;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

编程语言:C++ ;

编程坏境:Windows 7 专业版 x64;

编程工具:vs2010;

制图工具:office 2010 powerpoint;

硬件信息:7G-3 笔记本;


真言

假设自己没有完毕任务。不是任务的问题,是自己的问题

题目

百练 2818

思路

1 暴力法,计算一次。移动一次

2优化: 计算一次。跟踪一次。再计算,在跟踪;最后在移动

3再优化:计算须要移动的次数,计算终于结果。然后移动

ac代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;

bool my_2818(vector<string> * myvector);

int main()
{
	bool sum = true;
	vector<string> * myvector = new vector<string>;
	vector<string>::iterator it;
	while(sum == true)
		sum = my_2818( myvector );
	it = myvector->begin();
	while(it < myvector->end())
	{
		cout<<*it<<endl;
		it++;
	}
	system("pause");
	return 0;	
}

bool my_2818(vector<string> * myvector)
{
	int n;
	cin>>n;
	if(n == 0)
	{
		return false;
	}
	int * data = new int[n];
	int *length = new int[n];
	for(int i=0;i<n;i++)
	{
		cin>>data[i];
		length[i] = 0;
	}

	for(int j,i=0;i<n;i++)
	{		
		j = data[i]-1;
		length[i]++;
		while(true)
		{
			if(j == i)
				break;
			j = data[j]-1;
			length[i]++;
		}
	}

	int k;
	string a;
	char* b = new char[n];
	char c;
	while(true)
	{
		cin>>k;
		if(k == 0)
			break;
		for(int i=0;i<n;i++)
		{
			b[i] = ' ';
		}
		getline(cin,a,'\n');
		a=a.substr(1,a.length()-1);
		while(a.length()<n)
			a+=' ';

		for(int i=0;i<n;i++)
		{
			int j = k % length[i];
			int m = i;
			while(j>0)
			{
				m = data[m]-1;
				j--;
			}
			b[m] = a[i];
		}
		string result="";
		for(int j=0;j < n;j++)
			result+=b[j];

		myvector->push_back(result);
	}
	myvector->push_back("");
	return true;
}












本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5110931.html,如需转载请自行联系原作者