为保护版权,公布一部分,另一部分去请去空间下载
另一部分:http://download.csdn.net/detail/u013526581/6872195
/*
* 我写的程序时间复杂度<<<<<<<<<2^3=8
* 因为每进行一次当前b的for循环之后会删除下一个B之前的没有用的字符,从而产生新的list
* 而且在第一次的时候会做掐头去尾运算 ^_^
* 程序是自己写的希望评委看一眼。:)
* 亲自测试 216个随即字符
* 用时7秒
* 产生74454条记录
* 测试用例:ignbignbignbignbignbingibnginbignbignbignbignbignbignbignibnginbignbignbignbignbignbingibnginbginbignbginbignbignbignbignbignbnbignbignbignbignbignbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbiiiiiiiiiii
* 不求获奖,但求指点一二
* 参赛ID u013526581
* 参赛昵称 儒雅的雀鹰
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace BiSai
{
class Program
{
static void Main(string[] args)
{
Stopwatch stw = new Stopwatch();
stw.Start();
string line =
"ignbignbignbignbignbingibnginbignbignbignbignbignbignbignibnginbignbignbignbignbignbingibnginbginbignbginbignbignbignbignbignbnbignbignbignbignbignbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbiiiiiiiiiii";
//Console.WriteLine(line.Length.ToString());
DealWith dealWith = new DealWith();
int allCutCount = 0;
if (!string.IsNullOrEmpty(line))
{
int count = 0;
int value;
int count_everyTimeCutPre_B = 0;
List<string> cutHeadLeaveTail = dealWith.CutHeadLeaveTail(line, out value);
allCutCount += value;
List<string> secondDealWith = dealWith.secondDealWith(cutHeadLeaveTail, value, out count);
while (secondDealWith.Count > 0)
{
secondDealWith.RemoveAt(0);
secondDealWith = dealWith.CutHead(secondDealWith, out count_everyTimeCutPre_B);
allCutCount += count_everyTimeCutPre_B + 1;
dealWith.secondDealWith(secondDealWith, allCutCount, out count);
}
foreach (var s in secondDealWith)
{
Console.WriteLine(s);
}
Console.WriteLine("All count is {0}", dealWith.Allcount);
}
Console.WriteLine("timing " + stw.Elapsed.Seconds);
//Console.R e a d K e y();
}
}
class DealWith
{
public double Allcount;
/// <summary>
/// 掐头函数
/// </summary>
/// <param name="str">输入一个字符串</param>
/// <param name="cutCount">被掐掉多少个字符</param>
/// <returns></returns>
public List<string> CutHead(List<string> list, out int cutCount)
{
cutCount = 0;
for (int i = 0; i < list.Count; i++)
{
if (list[i] != "b")
{
list.RemoveAt(0);
cutCount++;
i -= 1;
}
else
{
break;
}
}
return list;
}