ACM入门题目(北大ACM教材)

这个是自己经过一段时间A的题目,非抄书!然后也自己做了一个工程把它管理起来。

ACM.h   这个头文件主要是一些头文件映如以及一些ACM函数的定义

#include<iostream>
#include<fstream>
#include<vector>
#include<numeric>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<map>
#include<deque>
#include<list>
#include<bitset>
#include<stack>
#include<queue>
#include<cmath>
#include<iomanip>
using namespace std;
//章节目录
void total_describe();
void part_two_describe();
void part_three_describe();
void part_four_describe();
void xinjian();
//第二章
void test();
void test_describe();
void vector_test();
void vector_describe();
void string_test();
void string_describe();
void set_test();
void set_describe();
void multiset_test();
void multiset_describe();
void map_test();
void map_describe();
void multimap_test();
void multimap_describe();
void deque_test();
void deque_describe();
void list_test();
void list_describe();
void bitset_test();
void bitset_describe();
void stack_test();
void stack_describe();
void queue_test();
void queue_describe();
void priority_queue_test();
void priority_queue_describe();
//第三章
void readANumber();
void readTwoNumber();
void jiecheng();
void dengbi();
void fibo();
void zuixiaogongyueshu();
void zuidagongbeishu();
void countAverage();
void SymmetricThreeDigit();
void tenTransTwo();
void listWanshu();
void peidui();
void SymmetricFiveDigit();
void sortForOneZero();
void symmetricStrSort();
void jidianSort();
void sortByOne();
//第四章
void QuickSum();
void IBMMinusOne();
void BinaryNumbers();
void Encoding();
void LookAndSay();
void Abbreviation();
void TheSevenPercentSolution();
void DigitalRoots();
void BoxofBricks();
void GeometryMadeSimple();
void ReverseText();
void WordReversal();
void ASimpleQuestionofChemistry();
void AddingReversedNumbers();
void ImageTransformation();
void BeautifulMeadow();
void DNASorting();
void DaffodilNumber();
void ErrorCorrection();
void MartianAddition();
void FatMouseTrade();
void ListtheBooks();
void HeadToHeadMatch();
void WindowsMessageQueue();
void LanguageofFatMouse();
void Palindromes();
void Palindromes2();
void RootoftheProblem();
void MagicSquare();
void SemiPrime();
void BeautifulNumber();
void PhoneList();
void Calendar();
void NoBrainer();
void QuickChange();
void TotalAmount();
void ElectricalOutlets();
void SpeedLimit();
void BeattheSpread();
void ChampionoftheSwordsmanship();
void Doubles();
void FileSearching();
void OldBill();
void DivisorSummation();
void EasierDoneThanSaid();
void LettheBalloonRise();
void TheHardestProblemEver();
void FibonacciAgain();
void ExcusesExcuses();
void LowestBit();
void LongestOrderedSubsequence();
//其他章节
struct.h   这里主要是一些辅助结构体的定义
struct myComp
{
	bool operator()(const int &a,const int &b)
	{
		return a>b;//从小到大使用大于
	}
};
struct Info
{
	string name;
	float score;
	bool operator < (const Info &a) const 
	{
		//小到大
		return score > a.score;
	}
	
};
struct myCompForZeroOne
{
	//括号的话,从小到大是小于
	bool operator()(const string &s1,const string &s2)
	{
		if(s1.size()!=s2.size())return s1.size()<s2.size();
		int s1_count=count(s1.begin(),s1.end(),'1');
		int s2_count=count(s2.begin(),s2.end(),'1');
		if(s1_count!=s2_count)return s1_count<s2_count;
		return s1<s2;//直接的ASCII的比较
	}
};
struct strComp
{
	//括号的话,从小到大是小于
	bool operator()(const string &s1,const string &s2)
	{
		if(s1.size()!=s2.size())return s1.size()<s2.size();
		return s1<s2;//直接的ASCII的比较
	}
};
struct strCompTwo
{
	//括号的话,从小到大是小于
	bool operator()(const string &s1,const string &s2)
	{
		int s1_count=count(s1.begin(),s1.end(),'1');
		int s2_count=count(s2.begin(),s2.end(),'1');
		if(s1_count!=s2_count)return s1_count<s2_count;
	}
};
struct  student
{
	string name;
	vector<float> score;
	float ave;
	
};
struct jidian_Sort
{
	bool operator()(const student &stu1,const student &stu2)
	{
		if(stu1.ave!=stu2.ave)return stu1.ave > stu2.ave;
		return stu1.name<stu2.name;
	}
		
};
struct DNA
{
	string dnalist;
	int sum;
};
struct DNA_sort
{
	bool operator()(const DNA &dna1,const DNA &dna2)
	{
		return dna1.sum<dna2.sum;
	}
};
struct Trade
{
	double F;
	double A;
	double bi;
};
struct Book
{
	string name;
	int year;
	double price;
};
struct order
{
	string name;
	int parameter;
	int priority;
};
struct order_sort
{
	bool operator()(const order &o1,const order &o2)
	{
		return o1.priority<o2.priority;
	}
};
struct cal_info
{
	short int year;
	short int month;
	short int day;
	short int week;
};
struct excuse
{
	string str;
	int count;
};
struct longxulie
{
	int maxlen;
	int num;
};
globalVar.h 这里主要是一些全局变量的声明

//全局变量的声明
int m[500000];/*北大ACM第4章43题*/
int v[1000000];/*北大ACM第4章47题*/
function.h  一些辅助函数的声明

#include"struct.h"
bool Comp(const int &a,const int &b);
string convertToString(double x);
string convertToInt(int x);
double convertFromString(string s);
int convertFromInt(string x);
void returnTwo();
void readDescribe(string str);
string cal_Path(string str1,string str2);
int gcd(int num1,int num2);
bool isPrime(int num);
bool listWanshu_single(int num);
bool symmetricStr(const string s);
void cal_stuAve(student &stu,vector<int> v);
int cal_sort(string s);
bool Comp_trade(const Trade &t1,const Trade &t2);
bool Comp_Book_Name(const Book &b1,const Book &b2);
bool Comp_book_Year(const Book &b1,const Book &b2);
bool Comp_book_Price(const Book &b1,const Book &b2);
vector<int> pt(int a,int b);
bool runnian(short int year);
string string_plus(string s1,string s2);
bool CompEx(const excuse &e1,const excuse &e2); 
bool Compxulie(const longxulie &l1,const longxulie &l2);
ACM.cpp  主函数

#include"ACM.h"
#include"function.h"
int main()
{
	total_describe();
	return 0;
}
content.cpp  工程目录的设计

#include"ACM.h"
#include"function.h"
void total_describe()
{
	cout<<"******************************************"<<endl;
	cout<<"*第二章 C++ STL泛型编程                  *"<<endl;
	cout<<"*第三章 ACM程序设计基础                  *"<<endl;
	cout<<"*第四章 ACM程序设计实战                  *"<<endl;
	cout<<"******************************************"<<endl;
	cout<<"请输入对应的章节编号进入相应的章节【退出系统请输入0】:"<<endl;

	//
	int num;
	cin>>num;
	while(num!=0&&num!=2&&num!=3&&num!=4){
		cout<<"编号不存在"<<endl;
		cout<<"请输入对应的章节编号进入相应的章节【退出系统请输入0】:"<<endl;
		cin>>num;
	}
	switch(num){
		case 0:exit(0);
		case 2:part_two_describe();break;
		case 3:part_three_describe();break;
		case 4:part_four_describe();break;
	}
}
void part_two_describe()
{

	cout<<"******************************************"<<endl;
	cout<<"*         第二章 C++ STL泛型编程         *"<<endl;
	cout<<"******************************************"<<endl;
	cout<<"*(1) 一个简单的测试案例                 *"<<endl;
	cout<<"*(2) vector向量容器                     *"<<endl;
	cout<<"*(3) string基本字符系列容器             *"<<endl;
	cout<<"*(4) set集合容器                        *"<<endl;
	cout<<"*(5) mutiset多种集合容器                *"<<endl;
	cout<<"*(6) map映照容器                        *"<<endl;
	cout<<"*(7) mutimap多重映照容器                *"<<endl;
	cout<<"*(8) deque双端队列容器                  *"<<endl;
	cout<<"*(9) list双向链表容器                   *"<<endl;
	cout<<"*(10)bitset位集合容器                   *"<<endl;
	cout<<"*(11)stack堆栈容器                      *"<<endl;
	cout<<"*(12)queue队列容器                      *"<<endl;
	cout<<"*(13)priority_queue优先队列容器         *"<<endl;
	cout<<"******************************************"<<endl;
	cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
	int num;
	cin>>num;
	while(num!=0&&num!=1&&num!=2&&num!=3&&num!=4&&num!=5&&num!=6&&num!=7&&num!=8&&num!=9&&num!=10&&num!=11&&num!=12&&num!=13){
		cout<<"编号不存在"<<endl;
		cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
		cin>>num;
	}
	switch(num){
		case 0:total_describe();break;	
		case 1:test();break;
		case 2:vector_test();break;
		case 3:string_test();break;
		case 4:set_test();break;
		case 5:multiset_test();break;
		case 6:map_test();break;
		case 7:multimap_test();break;
		case 8:deque_test();break;
		case 9:list_test();break;
		case 10:bitset_test();break;
		case 11:stack_test();break;
		case 12:queue_test();break;
		case 13:priority_queue_test();break;
		}
	}
void part_three_describe()
{
	bool flag=true;
	while(flag)
	{
		cout<<"******************************************"<<endl;
		cout<<"*         第三章 ACM程序设计基础         *"<<endl;
		cout<<"******************************************"<<endl;
		cout<<"*(1) 读入一个参数                        *"<<endl;
		cout<<"*(2) 读入两个参数                        *"<<endl;
		cout<<"*(3) 1!到n!的和                          *"<<endl;
		cout<<"*(4) 等比数列                            *"<<endl;
		cout<<"*(5) 斐波那契数                          *"<<endl;
		cout<<"*(6) 最大公约数                          *"<<endl;
		cout<<"*(7) 最小公倍数                          *"<<endl;
		cout<<"*(8) 平均数                              *"<<endl;
		cout<<"*(9) 对称三位素数                        *"<<endl;
		cout<<"*(10)十进制转化为二进制                  *"<<endl;
		cout<<"*(11)列出完数                            *"<<endl;
		cout<<"*(12)12!的配对                           *"<<endl;
		cout<<"*(13)五位数以内的对称素数                *"<<endl;
		cout<<"*(14)01串排序                            *"<<endl;
		cout<<"*(15)排列对称串                          *"<<endl;
		cout<<"*(16)按绩点排名                          *"<<endl;
		cout<<"*(17)按1的个数排序                       *"<<endl;
		cout<<"******************************************"<<endl;
		cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
		int num;
		cin>>num;
		while(num!=0&&num!=1&&num!=2&&num!=3&&num!=4&&num!=5&&num!=6&&num!=7&&num!=8&&num!=9&&
				num!=10&&num!=11&&num!=12&&num!=13&&num!=14&&num!=15&&num!=16&&num!=17
			){
			cout<<"编号不存在"<<endl;
			cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
			cin>>num;
		}
		switch(num){
			case 0:total_describe();break;
			case 1:readANumber();break;
			case 2:readTwoNumber();break;	
			case 3:jiecheng();break;	
			case 4:dengbi();break;	
			case 5:fibo();break;	
			case 6:zuixiaogongyueshu();break;
			case 7:zuidagongbeishu();break;
			case 8:countAverage();break;
			case 9:SymmetricThreeDigit();break;
			case 10:tenTransTwo();break;
			case 11:listWanshu();break;
			case 12:peidui();break;
			case 13:SymmetricFiveDigit();break;
			case 14:sortForOneZero();break;

				
				
				
				
				
				
				
			//case 3:part_three_describe();break;
			//case 4:part_four_describe();break;
		}
	}
	total_describe();
}
void part_four_describe()
{
	bool flag=true;
	while(flag)
	{
		cout<<"******************************************"<<endl;
		cout<<"*         第四章 ACM程序设计实战         *"<<endl;
		cout<<"******************************************"<<endl;
		cout<<"*(1)Quicksum                              *"<<endl;
		cout<<"*(2)IBM Minus One                         *"<<endl;
		cout<<"*(3)Binary Numbers                        *"<<endl;
		cout<<"*(4)Encoding                              *"<<endl;
		cout<<"*(5)Look and Say                          *"<<endl;
		cout<<"*(6)Abbreviation                          *"<<endl;
		cout<<"*(7)The Seven Percent Solution            *"<<endl;
		cout<<"*(8)Digital Roots                         *"<<endl;
		cout<<"*(9)Box of Bricks                         *"<<endl;
		cout<<"*(10)Geometry Made Simple                 *"<<endl;
		cout<<"*(11)Reverse Text                         *"<<endl;
		cout<<"*(12)Word Reversal*                       *"<<endl;
		cout<<"*(13)A Simple Question of Chemistry       *"<<endl;
		cout<<"*(14)Adding Reversed Numbers              *"<<endl;
		cout<<"*(15)Image Transformation                 *"<<endl;
		cout<<"*(16)Beautiful Meadow                     *"<<endl;
		cout<<"*(17)DNA Sorting                          *"<<endl;
		cout<<"*(18)Daffodil Number                      *"<<endl;
		cout<<"*(19)Error Correction                     *"<<endl;
		cout<<"*(20)Martian Addition                     *"<<endl;
		cout<<"*(21)FatMouse’ Trade                     *"<<endl;
		cout<<"*(22)List the Books                       *"<<endl;
		cout<<"*(23)Head-to-Head Match                   *"<<endl;
		cout<<"*(24)Windows Message Queue                *"<<endl;
		cout<<"*(25)Language of FatMouse                 *"<<endl;
		cout<<"*(26)Palindromes                          *"<<endl;
		cout<<"*(27)Root of the Problem                  *"<<endl;
		cout<<"*(28)Magic Square                         *"<<endl;
		cout<<"*(29)Semi-Prime                           *"<<endl;
		cout<<"*(30)Beautiful Number                     *"<<endl;
		cout<<"*(31)Phone List                           *"<<endl;
		cout<<"*(32)Calendar                             *"<<endl;
		cout<<"*(33)No Brainer                           *"<<endl;
		cout<<"*(34)Quick Change                         *"<<endl;
		cout<<"*(35)Total Amount                         *"<<endl;
		cout<<"*(36)Electrical Outlets                   *"<<endl;
		cout<<"*(37)Speed Limit                          *"<<endl;
		cout<<"*(38)Beat the Spread!                     *"<<endl;
		cout<<"*(39)Champion of the Swordsmanship        *"<<endl;
		cout<<"*(40)Doubles                              *"<<endl;
		cout<<"*(41)File Searching                       *"<<endl;
		cout<<"*(42)Old Bill                             *"<<endl;
		cout<<"*(43)Divisor Summation                    *"<<endl;
		cout<<"*(44)Easier Done Than Said?               *"<<endl;
		cout<<"*(45)Let the Balloon Rise                 *"<<endl;
		cout<<"*(46)The Hardest Problem Ever             *"<<endl;
		cout<<"*(47)Fibonacci Again                      *"<<endl;
		cout<<"*(48)Excuses, Excuses!                    *"<<endl;
		cout<<"*(49)Lowest Bit                           *"<<endl;
		cout<<"*(50)Longest Ordered Subsequence          *"<<endl;
		cout<<"******************************************"<<endl;
		cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
		int num;
		cin>>num;
		while(num<0&&num>50){
			cout<<"编号不存在"<<endl;
			cout<<"请输入对应的编号进入相应的题目(返回上级输入0):"<<endl;
			cin>>num;
		}
		switch(num){
			case 0:flag=false;break;
			case 1:QuickSum();break;
			case 2:IBMMinusOne();break;
			case 3:BinaryNumbers();break;
			case 4:Encoding();break;
			case 5:LookAndSay();break;
			case 6:Abbreviation();break;
			case 7:TheSevenPercentSolution();break;
			case 8:DigitalRoots();break;
			case 9:BoxofBricks();break;
			case 10:GeometryMadeSimple();break;
			case 11:ReverseText();break;
			case 12:WordReversal();break;
			case 13:ASimpleQuestionofChemistry();break;
			case 14:AddingReversedNumbers();break;
			case 15:ImageTransformation();break;
			case 16:BeautifulMeadow();break;
			case 17:DNASorting();break;
			case 18:DaffodilNumber();break;
			case 19:ErrorCorrection();break;
			case 20:MartianAddition();break;
			case 21:FatMouseTrade();break;
			case 22:ListtheBooks();break;
			case 23:HeadToHeadMatch();break;
			case 24:WindowsMessageQueue();break;
			case 25:LanguageofFatMouse();break;
			case 26:Palindromes();break;
			case 27:RootoftheProblem();break;
			case 28:MagicSquare();break;
			case 29:SemiPrime();break;
			case 30:BeautifulNumber();break;
			case 31:PhoneList();break;
			case 32:Calendar();break;
			case 33:NoBrainer();break;
			case 34:QuickChange();break;
			case 35:TotalAmount();break;
			case 36:ElectricalOutlets();break;
			case 37:SpeedLimit();break;
			case 38:BeattheSpread();break;
			case 39:ChampionoftheSwordsmanship();break;
			case 40:Doubles();break;
			case 41:FileSearching();break;
			case 42:OldBill();break;
			case 43:DivisorSummation();break;
			case 44:EasierDoneThanSaid();break;
			case 45:LettheBalloonRise();break;
			case 46:TheHardestProblemEver();break;
			case 47:FibonacciAgain();break;
			case 48:ExcusesExcuses();break;
			case 49:LowestBit();break;
			case 50:LongestOrderedSubsequence();break;
			//case 3:part_three_describe();break;
			//case 4:part_four_describe();break;
		}
	}
	total_describe();
	
}
describe.cpp 仅仅是第二章基础内容的描述

#include"ACM.h"
#include"function.h"
//第二章
void test_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*这是一个简单的STL的应用,输入10个数字显示,并且求和                         *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void vector_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*测试向量的访问、插入、删除、排序、自定义排序、向量大小、清空和为空的判断    *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void string_describe()
{
	{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*测试string的访问、插入、删除、排序、自定义排序、向量大小、清空和为空的判断, *"<<endl;
	cout<<"*测试string与数值之间的相互转化、字符串的分割等等                            *"<<endl;
	cout<<"******************************************************************************"<<endl;
}	
}
void set_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*set的中序遍历、反向遍历、删除、检索、比较                                   *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void multiset_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*mutiset的插入、删除和查找                                                   *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void map_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*map插入、反向遍历、查找、删除、排序、数字分离                               *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void multimap_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*multimap的插入、删除和查找                                                  *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void deque_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*deque遍历、删除和清空                                                       *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void list_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*list插入、删除、排序、剔除连续相同的元素                                    *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void bitset_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*bitset元素的设置和应用                                                      *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void stack_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*stack出栈、入栈、输出顶部元素                                               *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void queue_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*queue出栈、入栈、输出顶部元素                                               *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
void priority_queue_describe()
{
	cout<<"******************************************************************************"<<endl;
	cout<<"*题目描述:                                                                  *"<<endl;
	cout<<"*priority_queue出栈、入栈、输出顶部元素、重载操作符定义优先级                *"<<endl;
	cout<<"******************************************************************************"<<endl;
}
//第三章
functHeaderAchieve.cpp     辅助函数的实现

#include"ACM.h"
#include"function.h"
bool Comp(const int &a,const int &b)
{
	return a>b;
}
string convertToString(double x)
{
	ostringstream o;
	if(o<<x)
		return o.str();
	return "convert error";
}
string convertToInt(int x)
{
	ostringstream o;
	if(o<<x)
		return o.str();
	return "convert error";
}
double convertFromString(string s)
{
	istringstream i(s);
	double x;
	if(i>>x)
		return x;
	return 0.0;
}
int convertFromInt(string s)
{
	istringstream i(s);
	int x;
	if(i>>x)
		return x;
	return 0;
}
void returnTwo()
{
	cout<<endl<<endl;
	cout<<"输入0,返回上级,输入1,退出!"<<endl;
	int num;
	cin>>num;
	while(num!=0&&num!=1)
	{
		cout<<"请重新输入(输入0,返回上级,输入1,退出!)"<<endl;
		cin>>num;
	}
	switch(num){
		case 0:part_two_describe();break;
		case 1:exit(0);
	}
}
void readDescribe(string str)
{
   fstream infile(str);
   string temp;
   cout<<"*******************************************************************************"<<endl; 
   while(getline(infile,temp))
   {
		cout<<temp<<endl;
   }
   cout<<"*******************************************************************************"<<endl;
}
string cal_Path(string str1,string str2)
{

	string path="C://Users//haolidong//Documents//Visual Studio 2012//Projects//ACM//Data//"+str1+"-"+str2+".txt";
	string path2="C://Users//haolidong//Documents//Visual Studio 2012//Projects//ACM//Data//"+str1+"-"+str2+"-0.txt";
	readDescribe(path2);
	return path;
}
int gcd(int num1,int num2)
{
	int tmp;
	while(num1%num2)
	{
		tmp=num1;
		num1=num2;
		num2=tmp%num2;

	}
	return num2;
}
bool isPrime(int num)
{
	for(int i=2;i<=sqrt(num);i++)
	{
		if(num%i==0)
		{
			return false;
		}
	}
	return true;
}
bool listWanshu_single(int num)
{
	int sum=0;
	for(int i=1;i<=num/2;i++)
	{
		if(num%i==0)
		{
			sum+=i;
		}
	}
	return num==sum?true:false;
}
bool symmetricStr(const string s)
{
	for(int i=0;i<s.size()/2;i++)
	{
		if(s[i]!=s[s.size()-1-i])
		{
			return false;
		}
	}
	return true;
}
void cal_stuAve(student &stu,vector<int> v)
{
	float sum=0;
	float credit_sum=0;
	for (int i = 0; i < v.size(); i++)
	{
		sum=sum+(((stu.score[i]>=60?stu.score[i]:50)-50)/10*v[i]);//大于60才算分数
		credit_sum+=v[i];
	}
	stu.ave=sum/credit_sum;
}
int cal_sort(string s)
{
	int sum=0;
	for (int i = 0; i < s.size()-1; i++)
	{
		for (int j = i+1; j < s.size(); j++)
		{
			if(s[i]>s[j])sum++;
		}
	}
	return sum;
}
bool Comp_trade(const Trade &t1,const Trade &t2)
{
	return t1.bi>t2.bi;
}
bool Comp_Book_Name(const Book &b1,const Book &b2)
{
	if(b1.name!=b2.name)return b1.name<b2.name;
	if(b1.year!=b2.year)return b1.year<b2.year;
	return b1.price<b2.price;
}
bool Comp_book_Year(const Book &b1,const Book &b2)
{
	if(b1.year!=b2.year)return b1.year<b2.year;
	if(b1.name!=b2.name)return b1.name<b2.name;
	return b1.price<b2.price;
}
bool Comp_book_Price(const Book &b1,const Book &b2)
{
	if(b1.price!=b2.price)return b1.price<b2.price;
	if(b1.name!=b2.name)return b1.name<b2.name;
	return b1.year<b2.year;

}
bool CompEx(const excuse &e1,const excuse &e2)
{
	return e1.count>e2.count;
}
vector<int> pt(int a,int b)
{
	vector<int> v;
	bool flag;
	for(int i=a;i<=b;i++)
	{
		if(i!=2&&i%2==0)continue;
		flag=true;
		for (int j = 3; j * j <= i; j++)
		{
			if(i % j == 0)
			{
				flag=false;
				break;
			}
		}
		if(flag==true)
		{
			v.push_back(i);
		}
	}
	return v;
}
bool runnian(short int year)
{
	return ((year%4==0&&year%100!=0)||(year%400==0))?true:false;
}
string string_plus(string s1,string s2)
{
	map<int,string> m;
	for (int i = 0; i < 10; i++)
	{
		m[i]='0'+i;
	}
	int index1,index2,indexD1,indexD2;
	int pos,tmp;
	int i,j,k;
	string str;
	index1 = s1.find(".");
	index2 = s2.find(".");
	indexD1 = s1.length()-index1-1;
	indexD2 = s2.length()-index2-1;
	pos = abs(indexD1-indexD2);
	int flag=0;
	//后面位数大的先上
	if(indexD1>=indexD2)
	{
		for ( i = s1.length()-1,j=0; j < indexD1-indexD2; i--,j++)
		{
			str=s1[i]+str;
		}
		for ( k = s1.length() - pos - 1, i=0; k > index1; k--,i++)
		{

			tmp = (s1[k]-'0')+(s2[s2.length()-1-i]-'0')+flag;
			if(tmp>=10)
			{
				flag=1;
			}
			else
			{
				flag=0;
			}
			str=m[tmp%10]+str;			
		}
	}
	if(indexD1<indexD2)
	{
		for ( i = s2.length()-1,j=0; j < indexD2-indexD1; i--,j++)
		{
			str=s2[i]+str;
		}
		for ( k = s2.length() - pos -1, i=0; k > index2; k--,i++)
		{

			tmp = (s2[k]-'0')+(s1[s1.length()-1-i]-'0')+flag;
			if(tmp>=10)
			{
				flag=1;
			}
			else
			{
				flag=0;
			}
			str=m[tmp%10]+str;			
		}
	}
	str="."+str;
	//小数部分的加法完成,现在完成整数的加法
	for ( i = index1-1,j=index2-1; i>0 && j >0; i--,j--)
	{
		if(s1[i]==',')
		{
			str=","+str;
			continue;
		}
		tmp = (s1[i]-'0')+(s2[j]-'0')+flag;
		if(tmp>=10)
		{
			flag=1;
		}
		else
		{
			flag=0;
		}
		str=m[tmp%10]+str;
	}
	
	if(index1>index2)
	{
		for (; i > 0; i--)
		{
			if(s1[i]==',')
			{
				str=","+str;
				continue;
			}
			tmp=(s1[i]-'0')+flag;
			if(tmp>=10)
			{
				flag=1;
			}
			else
			{
				flag=0;
			}
			str=m[tmp%10]+str;	
		}
			
	}
	 if(index1<index2)
	{
		
		for (; j > 0; j--)
		{
			if(s2[j]==',')
			{
				str=","+str;
				continue;
			}
			tmp=(s2[j]-'0')+flag;
			if(tmp>=10)
			{
				flag=1;
			}
			else
			{
				flag=0;
			}
			str=m[tmp%10]+str;	
		}
	}
	if(flag==1)
	{
		if(str.find(",")==3)
		{
			str="1,"+str;
		}
		else
		{
			str="1"+str;
		}
	}
	str="$"+str;
	return str;
}
bool Compxulie(const longxulie &l1,const longxulie &l2)
{
	return l1.maxlen>l2.maxlen;
}
function.cpp   具体的ACM题目

#include"ACM.h"
#include"function.h"
#include"globalVar.h"
void xinjian()
{
	
	for (int i = 1; i <= 50; i++)
	{
		
		string s = "C://Users//haolidong//Documents//Visual Studio 2012//Projects//ACM//Data//4-"+convertToString(i)+".txt";
		FILE *fp=fopen(s.c_str(),"w");
	}
	for (int i = 1; i <= 50; i++)
	{
		
		string s = "C://Users//haolidong//Documents//Visual Studio 2012//Projects//ACM//Data//4-"+convertToString(i)+"-0.txt";
		FILE *fp=fopen(s.c_str(),"w");
	}
	
}
//第二章
void test()
{
	test_describe();
	vector<int> v;
	int i;
	for(i=0;i<10;i++)
	{
		v.push_back(i);
	}
	for(vector<int>::iterator it=v.begin();it != v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<accumulate(v.begin(),v.end(),0)<<endl;
	returnTwo();
}
void vector_test()
{
	vector_describe();
	vector<int> v(3);
	v[0]=2;
	v[1]=7;
	v[2]=9;
	cout<<"使用下标访问vector:"<<endl;
	cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
	
	cout<<"使用迭代器访问vector:"<<endl;
	vector<int>::iterator it;
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"使用迭代器追加元素:"<<endl;
	//在最前面插入元素8,在第二个元素前插入新元素1,在向量尾部插入元素3,
	v.insert(v.begin(),8);
	v.insert(v.begin()+2,1);
	v.insert(v.end(),3);
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"使用迭代器删除元素:"<<endl;
	//删除收元素,删除第一到第三区间的元素(=<   <)
	v.erase(v.begin());
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	v.erase(v.begin()+1,v.begin()+3);
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"正序排序"<<endl;
	sort(v.begin(),v.end());
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"自定义反向排序"<<endl;
	v.insert(v.end(),9);
	v.insert(v.end(),3);
	v.insert(v.end(),2);
	sort(v.begin(),v.end(),Comp);
	for(it=v.begin();it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"输出向量的大小"<<endl;
	cout<<v.size()<<endl;
	//向量为空的话,输出1(为真)
	cout<<"清空向量后判断向量是否为空:"<<endl;
	v.clear();
	cout<<v.empty()<<endl;
	returnTwo();

}
void string_test()
{
	string_describe();
	string s1,s2,s3;
	char ss[5000];
	scanf("%s",&ss);
	s1="hello";
	s2=ss;
	cout<<"string的两种复制方法:"<<endl;
	cout<<s1<<endl;
	cout<<s2<<endl;
	
	cout<<"string尾部添加字符和字符串:"<<endl;
	s1=s1+'H';
	cout<<s1<<endl;
	s1=s1+"LD";
	cout<<s1<<endl;
	s1.append("HLD");
	cout<<s1<<endl;
	
	cout<<"string插入字符:"<<endl;
	string::iterator it=s1.begin();
	s1.insert(it+1,'p');
	
	cout<<"两个相同的字符串相减的值为0:"<<endl;
	cout<<s1[0]-'h'<<endl;
	
	cout<<"删除string元素:"<<endl;
	s1.erase(it+1);
	cout<<s1<<endl;
	
	cout<<"输出字符串的长度:"<<endl;
	cout<<s1.length()<<endl;
	
	cout<<"判断string是否为空:"<<endl;
	cout<<s1.empty()<<endl;
	
	cout<<"替换字符串:"<<endl;
	//从第三个开始的连续三个替换为haolidong
	s1.replace(3,3,"haolidong");
	cout<<s1<<endl;

	cout<<"搜索string对象的元素或子串:"<<endl;
	s1="hao li dong";
	cout<<s1.find('h')<<endl;
	cout<<s1.find("h")<<endl;
	cout<<s1.find("hao")<<endl;
	cout<<s1.find("asd")<<endl;
	
	cout<<"字符串的反转:"<<endl;
	reverse(s1.begin(),s1.end());
	cout<<s1<<endl;
	
	cout<<"字符串对象作为vector对象:"<<endl;
	vector<string> v;
	v.push_back("hao");
	v.push_back("li");
	cout<<v[1]<<endl;;
	cout<<v[1][1]<<endl;

	cout<<"字符串的数字化处理:"<<endl;
	s1="1234568790";
	int sum=0;
	for(int i=0;i<s1.length();i++)
	{
		if(s1[i]=='0')sum+=0;
		else if(s1[i]=='1')sum+=1;
		else if(s1[i]=='2')sum+=1;
		else if(s1[i]=='3')sum+=1;
		else if(s1[i]=='4')sum+=1;
		else if(s1[i]=='5')sum+=1;
		else if(s1[i]=='6')sum+=1;
		else if(s1[i]=='7')sum+=1;
		else if(s1[i]=='8')sum+=1;
		else if(s1[i]=='9')sum+=1;
	}
	cout<<sum<<endl;

	cout<<"string对象与scanf:"<<endl;
	char sa[100],sb[100],sc[100];
	sscanf("hao li dong","%s %s %s",sa,sb,sc);
	s1=sa;
	s2=sb;
	s3=sc;
	cout<<s1<<" "<<s2<<" "<<s3<<endl;

	cout<<"string与数值相互转化:"<<endl;
	cout<<convertToString(123)+"1"<<endl;
	cout<<convertFromString("123")+1.0<<endl;
	returnTwo();
	
}
void set_test()
{
	set_describe();
	//set不能插入相同的元素
	set<int> s;
	s.insert(8);
	s.insert(1);
	s.insert(12);
	s.insert(6);
	set<int>::iterator it;
	set<int>::reverse_iterator rit;
	cout<<"set的中序遍历:"<<endl;
	for(it=s.begin();it!=s.end();it++)
	{
		cout<<*it<<endl;
	}
	for(rit=s.rbegin();rit!=s.rend();rit++)
	{
		cout<<*rit<<endl;
	}
	cout<<"set元素的删除:"<<endl;
	s.erase(6);
	for(it=s.begin();it!=s.end();it++)
	{
		cout<<*it<<endl;
	}
	s.insert(6);
	it=s.find(6);
	if(it!=s.end())
		cout<<*it<<endl;
	else
		cout<<"not found"<<endl;

	set<int,myComp> s1;
	s1.insert(8);
	s1.insert(1);
	s1.insert(12);
	s1.insert(6);
	set<int,myComp>::iterator myit;
	for(myit=s1.begin();myit!=s1.end();myit++)
	{
		cout<<*myit<<" ";
	}
	cout<<endl;

	set<Info> s2;
	Info info;
	info.name="Jack";
	info.score=80.5;
	s2.insert(info);
	info.name="Tom";
	info.score=20.5;
	s2.insert(info);
	info.name="Jin";
	info.score=90.5;
	s2.insert(info);
	set<Info>::iterator infoit;
	for(infoit=s2.begin();infoit!=s2.end();infoit++)
	{
		cout<<(*infoit).name<<" "<<(*infoit).score<<endl;
	}
	returnTwo();
}
void multiset_test()
{
	multiset_describe();
	cout<<"multiset 元素的插入:"<<endl;
	multiset<string> ms;
	ms.insert("abc");
	ms.insert("123");
	ms.insert("111");
	ms.insert("aaa");
	ms.insert("abc");
	multiset<string>::iterator it;
	for(it=ms.begin();it!=ms.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"元素的删除:"<<endl;
	ms.erase("abc");
	for(it=ms.begin();it!=ms.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"元素的查找:"<<endl;
	it=ms.find("111");
	if(it!=ms.end())
		cout<<*it<<endl;
	else
		cout<<"not found"<<endl;
	returnTwo();
}
void map_test()
{
	map_describe();
	cout<<"插入元素:"<<endl;
	map<string,float> m;
	m["Jack"]=98.5;
	m["Bomi"]=96.0;
	m["Kate"]=97.5;
	map<string,float>::iterator it;
	for(it=m.begin();it!=m.end();it++)
	{
		cout<<(*it).first<<" "<<(*it).second<<endl;
	}
	cout<<"反向遍历元素:"<<endl;
	map<string,float>::reverse_iterator rit;
	for(rit=m.rbegin();rit!=m.rend();rit++)
	{
		cout<<(*rit).first<<" "<<(*rit).second<<endl;
	}
	cout<<"删除元素:"<<endl;
	m.erase("Jack");
	for(it=m.begin();it!=m.end();it++)
	{
		cout<<(*it).first<<" "<<(*it).second<<endl;
	}
	cout<<"查找元素"<<endl;
	it=m.find("Kate");
	if(it!=m.end())
		cout<<(*it).first<<" "<<(*it).second<<endl;
	else
		cout<<"not found"<<endl;
	cout<<"重新定义排序(从大到小):"<<endl;
	map<int,char,myComp> m2;
	map<int,char,myComp>::iterator m2it;
	m2[25]='m';
	m2[28]='k';
	m2[10]='x';
	m2[30]='a';
	for(m2it=m2.begin();m2it!=m2.end();m2it++)
	{
		cout<<(*it).first<<":"<<(*it).second<<endl;
	}
	map<Info,int> m3;
	map<Info,int>::iterator m3it;
	Info info;
	info.name="Jack";
	info.score=80.5;
	m3[info]=25;
	info.name="Tom";
	info.score=20.5;
	m3[info]=10;
	info.name="Jin";
	info.score=90.5;
	m3[info]=30;
	for(m3it=m3.begin();m3it!=m3.end();m3it++)
	{
		cout<<(*m3it).second<<":"<<(*m3it).first.name<<" "<<(*m3it).first.score<<endl;
	}
	cout<<"map实现数字分离:"<<endl;
	map<char,int> m4;
	map<int,char> m5;
	m4['0']=0;
	m4['1']=1;
	m4['2']=2;
	m4['3']=3;
	m4['4']=4;
	m4['5']=5;
	m4['6']=6;
	m4['7']=7;
	m4['8']=8;
	m4['9']=9;

	m5[0]='0';
	m5[1]='1';
	m5[2]='2';
	m5[3]='3';
	m5[4]='4';
	m5[5]='5';
	m5[6]='6';
	m5[7]='7';
	m5[8]='8';
	m5[9]='9';
	/*这个和上面的是等价的
	for(int i=0;i<10;i++)
	{
		m4['0'+i]=i;
	}
	for(int i=0;i<10;i++)
	{
		m4[i]='0'+i;
	}
	*/
	string sa="12345";
	int sum=0;
	for(int i=0;i<sa.length();i++)
	{
		sum+=m4[sa[i]];
	}
	cout<<"sum="<<sum<<endl;

	int num1=5;
	cout<<"5"<<endl;
	string s="the num is ";
	cout<<s+m5[num1]<<endl;//不能cout<<"5"+m5[num1]<<endl;
	returnTwo();

}
void multimap_test()
{
	multimap_describe();
	cout<<"元素的插入:"<<endl;
	multimap<string,double> m;
	m.insert(pair<string,double>("Jack",300.5));
	m.insert(pair<string,double>("Kity",200));
	m.insert(pair<string,double>("Memi",600));
	m.insert(pair<string,double>("Jack",400));
	multimap<string,double>::iterator it;
	for(it=m.begin();it!=m.end();it++)
	{
		cout<<(*it).first<<" "<<(*it).second<<endl;
	}
	cout<<"删除元素:"<<endl;
	m.erase("Jack");
	for(it=m.begin();it!=m.end();it++)
	{
		cout<<(*it).first<<" "<<(*it).second<<endl;
	}
	it=m.find("Jack");
	if(it!=m.end())
		cout<<(*it).first<<" "<<(*it).second<<endl;
	else
		cout<<"not found"<<endl;
	returnTwo();

}
void deque_test()
{
	deque_describe();
	deque<int> d;
	deque<int>::iterator dit;
	deque<int>::reverse_iterator rdit;
	d.push_back(1);
	d.push_back(2);
	d.push_back(3);
	d.push_front(10);//会将前面的1覆盖
	d.insert(d.begin()+1,111);//会将2覆盖
	for(int i=0;i<d.size();i++)
	{
		cout<<d[i]<<" ";
	}
	cout<<endl;
	cout<<"迭代器的方式遍历:"<<endl;
	for(dit=d.begin();dit!=d.end();dit++)
	{
		cout<<(*dit)<<" ";
	}
	cout<<endl;

	cout<<"迭代器的反向遍历:"<<endl;
	for(rdit=d.rbegin();rdit!=d.rend();rdit++)
	{
		cout<<(*rdit)<<" ";
	}
	cout<<endl;
	cout<<"前面删除元素:"<<endl;
	d.pop_front();
	for(dit=d.begin();dit!=d.end();dit++)
	{
		cout<<(*dit)<<" ";
	}
	cout<<endl;

	cout<<"中间删除元素:"<<endl;
	d.erase(d.begin()+1);
	for(dit=d.begin();dit!=d.end();dit++)
	{
		cout<<(*dit)<<" ";
	}
	cout<<endl;
	cout<<"清空元素:"<<endl;
	d.clear();
	cout<<d.size()<<endl;
	returnTwo();
	
}
void list_test()
{
	list_describe();
	list<int> l;
	list<int>::iterator it;
	list<int>::reverse_iterator rit;
	cout<<"插入元素:"<<endl;
	l.push_back(2);
	l.push_back(1);
	l.push_back(5);
	l.push_front(8);
	//链表的迭代器只能进行++或者是--的操作,不能进行+n操作
	for(it=l.begin();it!=l.end();it++)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;

	for(rit=l.rbegin();rit!=l.rend();rit++)
	{
		cout<<(*rit)<<" ";
	}
	cout<<endl;
	
	cout<<"元素的删除:"<<endl;
	l.remove(1);
	for(it=l.begin();it!=l.end();it++)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
	l.pop_front();
	for(it=l.begin();it!=l.end();it++)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
	it=find(l.begin(),l.end(),5);
	if(it!=l.end())
		cout<<(*it)<<endl;
	else
		cout<<"not found"<<endl;
	l.push_back(1);
	l.push_back(3);
	l.push_back(4);
	l.push_back(1);
	l.push_back(1);
	cout<<"排序:"<<endl;
	for(it=l.begin();it!=l.end();it++)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
	cout<<"剔除连续重复的元素【请注意是连续重复】:"<<endl;
	l.unique();
	for(it=l.begin();it!=l.end();it++)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
	returnTwo();

}
void bitset_test()
{
	bitset_describe();
	bitset<10> b,b2;
	cout<<"元素的设置:"<<endl;
	b[1]=1;
	b[6]=1;
	b[9]=1;
	for(int i=b.size()-1;i>=0;i--)
	{
		cout<<b[i];
	}
	cout<<endl;
	b.set();//将元素全部设置为1
	for(int i=b.size()-1;i>=0;i--)
	{
		cout<<b[i];
	}
	cout<<endl;
	b.reset(1);
	for(int i=b.size()-1;i>=0;i--)
	{
		cout<<b[i];
	}
	cout<<endl;
	b.set(2,0);
	for(int i=b.size()-1;i>=0;i--)
	{
		cout<<b[i];
	}
	cout<<endl;
	returnTwo();
}
void stack_test()
{
	stack_describe();
	stack<int> s;
	cout<<"stack常用方法:"<<endl;
	s.push(1);
	s.push(2);
	s.push(3);
	s.push(9);
	cout<<s.top()<<endl;
	cout<<s.empty()<<endl;
	while(s.empty()!=true)
	{
		cout<<s.top()<<" ";
		s.pop();
	}
	cout<<endl;
	returnTwo();
}
void queue_test()
{
	queue_describe();
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(9);
	cout<<q.size()<<endl;
	cout<<q.empty()<<endl;
	cout<<q.front()<<endl;
	cout<<q.back()<<endl;
	while(q.empty()!=true)
	{
		cout<<q.front()<<" ";
		q.pop();
	}
	returnTwo();
}
void priority_queue_test()
{
	priority_queue_describe();
	priority_queue<int> pq;
	priority_queue<Info> pq1;
	priority_queue<int,vector<int>,myComp> pq2;//显式说明内部的结构是vector
	Info info;
	pq.push(1);
	pq.push(2);
	pq.push(3);
	pq.push(9);
	cout<<"priority_queue的输入、删除和遍历:"<<endl;
	cout<<pq.size()<<endl;
	while(pq.empty()!=true)
	{
		cout<<pq.top()<<endl;
		pq.pop();
	}
	cout<<endl;

	info.name="Jack";
	info.score=68.5;
	pq1.push(info);
	info.name="Bomi";
	info.score=18.5;
	pq1.push(info);
	info.name="Peti";
	info.score=90;
	pq1.push(info);
	cout<<"重载<的优先级队列:"<<endl;
	while(pq1.empty()!=true)
	{
		cout<<pq1.top().name<<":"<<pq1.top().score<<endl;
		pq1.pop();
	}
	pq2.push(3);
	pq2.push(4);
	pq2.push(2);
	pq2.push(7);
	while(pq2.empty()!=true)
	{
		cout<<pq2.top()<<" ";
		pq2.pop();
	}
	cout<<endl;
	returnTwo();
}
//第三章
void readANumber()
{
	ifstream cin(cal_Path("3","1"));
	int n;
	while(cin>>n)
	{
		cout<<n*n<<endl;
	}
}
void readTwoNumber()
{
	ifstream cin(cal_Path("3","2"));
	int m,n;
	while(cin>>m>>n)
	{
		cout<<m-n<<endl;
	}
}
void jiecheng()
{
	ifstream cin(cal_Path("3","3"));
	int n;
	while(cin>>n)
	{
		int sum=0;
		int tmp=1;
		for(int i=1;i<=n;i++)
		{
			tmp=tmp*i;
			sum+=tmp;
		}
		cout<<sum<<endl;

	}
}
void dengbi()
{
	
	ifstream cin(cal_Path("3","4"));
	int num;
	double q;
	double sum;
	cout.precision(3);
	while(cin>>num>>q)
	{
		if(num==1)
		{
			cout<<num*q<<endl;
		} else {
			sum=(1-pow(q,num+1))/(1-q);
			//加入fixed以后才是小数的后面三位
			cout<<fixed<<sum<<endl;
		}
	}
}
void fibo()
{
	ifstream cin(cal_Path("3","5"));
	int num;
	vector<int> v;
	v.push_back(0);
	v.push_back(1);
	for(int i=3;i<=47;i++)
	{
		v.push_back(v[i-2]+v[i-3]);
	}
	while(cin>>num)
	{
		cout<<v[num]<<endl;
	}
}
void zuixiaogongyueshu()
{
	ifstream cin(cal_Path("3","6"));
	int num1,num2;
	while(cin>>num1>>num2)
	{
		cout<<gcd(num1,num2)<<endl;
	}
}
void zuidagongbeishu()
{
	ifstream cin(cal_Path("3","7"));
	int num1,num2;
	while(cin>>num1>>num2)
	{
		cout<<num1*num2/gcd(num1,num2)<<endl;
	}
}
void countAverage()
{
	ifstream cin(cal_Path("3","8"));
	int num1,num2;
	cout.precision(3);
	while(cin>>num1)
	{
		double sum=0.0;
		for(int i=0;i<num1;i++)
		{
			cin>>num2;
			sum+=num2;
		}
		cout<<fixed<<sum/num1<<endl;
	}
}
void SymmetricThreeDigit()
{
	ifstream cin(cal_Path("3","9"));
	int num;
	while(cin>>num)
	{
		if(num>=100&&num<=999&&(num/100==num%10)&&isPrime(num))
		{
			cout<<"Yes"<<endl;
		}
		else
		{
			cout<<"No"<<endl;
		}
	}
}
void tenTransTwo()
{
	ifstream cin(cal_Path("3","10"));
	int num;
	while(cin>>num)
	{
		string str;
		int num1=abs(num);
		
		do{
			
			str=((num1-num1/2*2)==1?'1':'0')+str;
			num1=num1/2;

		}while(num1!=0);
		cout<<num<<(num>=0?"-->":"-->-")<<str<<endl;
		str.clear();
	}
}
void listWanshu()
{
	ifstream cin(cal_Path("3","11"));
	int num;
	while(cin>>num)
	{
		cout<<num<<":";
		for(int i=2;i<=num;i++)
		{
			if(listWanshu_single(i)==true)
			{
				cout<<" "<<i;
			}
		}
		cout<<endl;
	}
}
void peidui()
{
	ifstream cin(cal_Path("3","12"));
	int num;
	int count=0;
	vector<int> v;
	int num12=2*3*4*5*6*7*8*9*10*11*12;
	while(cin>>num)
	{
		v.push_back(num);
	}
	for(int i=0;i<v.size()-1;i++)
	{
		for(int j=i+1;j<v.size();j++)
		{
			if(num12/v[i]==v[j])
			{
				count++;
				v.erase(v.begin()+i);
				v.erase(v.begin()+j-1);
				i=0;
				break;
			}
		}
	}
	cout<<count<<endl;
}
void SymmetricFiveDigit()
{
	ifstream cin(cal_Path("3","13"));
	int num;
	vector<int> v;
	while(cin>>num)
	{		
		
		bool flag=true;
		int num_copy=num;
		//把每一个数字输入到vector中
		while(num!=0)
		{
			v.push_back(num%10);
			num=num/10;

		}
		for (int i = 0; i < v.size()/2; i++)
		{
			if(v[i]!=v[v.size()-1-i])
			{
				flag=false;
				break;
			}
		}
		cout<<((flag==true&&isPrime(num_copy))?"Yes":"No")<<endl;
		v.clear();
	}
}
void sortForOneZero()
{
	ifstream cin(cal_Path("3","14"));
	string s;
	multiset<string,myCompForZeroOne> ms;
	multiset<string,myCompForZeroOne>::iterator mit;
	while(cin>>s)
	{
		ms.insert(s);
	}
	for (mit = ms.begin(); mit != ms.end(); mit++)
	{
		cout<<(*mit)<<endl;
	}
}
void symmetricStrSort()
{
	ifstream cin(cal_Path("3","15"));
	string s;
	multiset<string,strComp> ms;
	multiset<string,strComp>::iterator mit;
	while(cin>>s)
	{
		if(symmetricStr(s))ms.insert(s);
	}
	for (mit = ms.begin(); mit != ms.end(); mit++)
	{
		cout<<(*mit)<<endl;
	}
}
void jidianSort()
{
	ifstream cin(cal_Path("3","16"));
	int num;
	student stu;
	vector<int> v;
	multiset<student,jidian_Sort> vstu;
	multiset<student,jidian_Sort>::iterator mit;
	cin>>num;//输入的是班级号
	for(int i=0;i<num;i++)
	{
		int course_num;
		cin>>course_num;
		int credit;
		for (int j = 0; j < course_num; j++)
		{
			cin>>credit;
			v.push_back(credit);
		}
		int stu_num;
		cin>>stu_num;//输入学生的数目
		string name;
		for (int k = 0; k <stu_num; k++)
		{
			cin>>name;
			stu.name=name;
			float course_score;
			for (int j = 0; j < course_num; j++)
			{
				cin>>course_score;
				stu.score.push_back(course_score);
			}
			cal_stuAve(stu,v);
			vstu.insert(stu);
			stu.score.clear();
		}
		cout<<"class "<<num<<":"<<endl;
		for (mit=vstu.begin();mit!=vstu.end();mit++)
		{
			cout<<fixed<<setprecision(2);
			cout<<left<<setw(11);
			cout<<(*mit).name<<"\t"<<(*mit).ave<<endl;;
			//cout<<(*mit).score<<endl;
		}
	}

}
void sortByOne()
{
	ifstream cin(cal_Path("3","17"));
	string s;
	multiset<string,strCompTwo> ms;
	multiset<string,strCompTwo>::iterator mit;
	while (cin>>s)
	{
		ms.insert(s);
	}
	for (mit = ms.begin(); mit != ms.end(); mit++)
	{
		cout<<(*mit)<<endl;
	}
}
//第四章
void QuickSum()
{
	
	ifstream cin(cal_Path("4","1"));
	char ch[256];
	while (cin.getline(ch,256))
	{
		if(ch[0]=='#')break;
		int sum=0;
		for (int i = 0; ch[i]!='\0'; i++)
		{
			if(ch[i]!=' ')sum+=(ch[i]-'A'+1)*(i+1);
		}
		cout<<sum<<endl;
	}
}
void IBMMinusOne()
{
	ifstream cin(cal_Path("4","2"));
	map<char,char> m;
	for(int i=0;i<25;i++)
	{
		m['A'+i]='A'+i+1;
	}
	m['Z']='A';
	
	int num;
	string  s;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>s;
		cout<<"String #"<<i+1<<endl;
		for (int j = 0; j < s.length(); j++)
		{
			cout<<m[s[j]];
		}
		cout<<endl<<endl;
	}
}
void BinaryNumbers()
{
	ifstream cin(cal_Path("4","3"));
	vector<int> v;
	int num,pos,record;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		int count;
		pos=record=0;
		v.clear();
		cin>>count;
		do
		{
			v.push_back(count%2);
			
			if(count%2==1)
			{
				pos=record;
			}
			count/=2;
			record++;
		} while (count!=0);
		for (int j = 0; j < v.size(); j++)
		{
			if(j==pos)
			{
				cout<<j;
			}
			else
			{
				if(v[j]==1)
				{
					cout<<j<<" ";
				}
			}
		}
		cout<<endl;
	}
}
void Encoding()
{
	ifstream cin(cal_Path("4","4"));
	int num;
	string s;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>s;
		int count=1;
		for (int j = 1; j < s.length(); j++)
		{
		
			if(s[j]!=s[j-1])
			{
				if(count!=1)cout<<count;
				cout<<s[j-1];			
				count=1;
			}
			else
			{
				count++;
			}
			if(j==s.length()-1)
			{
				if(count!=1)cout<<count;
				cout<<s[j];
			}
		}
		cout<<endl;
	}
}
void LookAndSay()
{
	ifstream cin(cal_Path("4","5"));
	int num;
	string s;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>s;
		int count=1;
		for (int j = 1; j < s.length(); j++)
		{
		
			if(s[j]!=s[j-1])
			{
				cout<<count<<s[j-1];	
				count=1;
			}
			else
			{
				count++;
			}
			if(j==s.length()-1)
			{
				cout<<count<<s[j];
			}
		}
		cout<<endl;
	}
}
void Abbreviation()
{
	ifstream cin(cal_Path("4","6"));
	int num;
	string s1,s2;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		int numA,numB;
		cin>>numA;
		string s1_Abb;
		string s2_Abb;
		for (int j = 0; j < numA; j++)
		{
			cin>>s1;
			s1_Abb=s1_Abb+s1[0];
		}
		cin>>numB;
		for (int j = 0; j < numB; j++)
		{
			cin>>s2;
			s2_Abb=s2_Abb+s2[0];
		}
		if(s1_Abb.compare(s2_Abb)==0)
		{
			cout<<"SAME";
		}
		else
		{
			cout<<"DIFFERENT";
		}
		cout<<endl;
		s1_Abb.clear();
		s2_Abb.clear();
	}
}
void TheSevenPercentSolution()
{
	ifstream cin(cal_Path("4","7"));
	char ch[256];
	while (cin.getline(ch,256))
	{
		if(ch[0]=='#')break;
		for (int i = 0; ch[i]!='\0'; i++)
		{
			if(ch[i]==' ')cout<<"%20";
			else if(ch[i]=='!')cout<<"%21";
			else if(ch[i]=='$')cout<<"%24";
			else if(ch[i]=='%')cout<<"%25";
			else if(ch[i]=='(')cout<<"%28";
			else if(ch[i]==')')cout<<"%29";
			else if(ch[i]=='*')cout<<"%2a";
			else cout<<ch[i];
		}
		cout<<endl;
	}
}
void DigitalRoots()
{
	ifstream cin(cal_Path("4","8"));
	string s;
	int sum;
	while (cin>>s)
	{
		if(s[0]=='0')break;
		sum=0;
		for (int p=0;sum>=10||sum==0;p++)
		{
			if(p!=0)
			{
				s=convertToInt(sum);
				sum=0;
			}
			for (int i = 0; i < s.length(); i++)
			{
				sum=sum+(s[i]-'0');
			}
		}
		cout<<sum<<endl;

	}
}
void BoxofBricks()
{
	ifstream cin(cal_Path("4","9"));
	int num;
	int count=0;
	vector<int> v;
	for (int count=1;cin>>num;count++)
	{
		if(num==0)break;
		int sum,ave,tmp_num,abs_sum;
		sum=ave=abs_sum=0;
		for (int i = 0; i < num; i++)
		{
			cin>>tmp_num;
			v.push_back(tmp_num);
			sum+=tmp_num;
		}
		ave=sum/num;
		for (int i = 0; i < num; i++)
		{
			abs_sum+=abs(v[i]-ave);
		}
		cout<<"Set #"<<count<<endl;
		cout<<"The minimum number of moves is "<<abs_sum/2<<endl;
	}
}
void GeometryMadeSimple()
{
	ifstream cin(cal_Path("4","10"));
	int a,b,c;
	cout.precision(3);
	for (int count=1;cin>>a>>b>>c;count++)
	{
		if(a==0&&b==0&&c==0)break;
		cout<<"Triangle #"<<count<<endl;
		if(a==-1)
		{
			if(c-b>0)
			{
				cout<<"a = "<<fixed<<sqrt(c*c-b*b);
			}
			else
			{
				cout<<"Impossible.";
			}
			
		}
		else if(b==-1)
		{
			if(c-a>0)
			{
				cout<<"b = "<<fixed<<sqrt(c*c-a*a);
			}
			else
			{
				cout<<"Impossible.";
			}
		}
		else if(c==-1)
		{
			cout<<"c = "<<fixed<<sqrt(a*a+b*b);
		}
		cout<<endl;
	}
}
void ReverseText()
{
	ifstream cin(cal_Path("4","11"));
	char ch[256];
	string s;
	int i=0;
	while(cin.getline(ch,256))
	{
		if(i==0)
		{
			i=1;
			continue;
		}
		s=ch;
		reverse(s.begin(),s.end());
		cout<<s<<endl;
	}

}
void WordReversal()
{
	ifstream cin(cal_Path("4","12"));
	int num;
	char ch[256];
	string s,subs;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		int count;
		cin>>count;
		int count_tmp=0;
		while((cin.getline(ch,256)))
		{
			if(count_tmp==0)
			{
				count_tmp=1;
				continue;
			}
			s=ch;
			for (int j = 0,start=0; j < s.length(); j++)
			{
				if(s[j]==' ')
				{
					subs=s.substr(start,j-start);
					reverse(subs.begin(),subs.end());
					cout<<subs<<" ";
					start=j+1;
				}
				if(j==s.length()-1)
				{
					subs=s.substr(start,j-start+1);
					reverse(subs.begin(),subs.end());
					cout<<subs;
				}
			}
			cout<<endl;
		}
	}
}
void ASimpleQuestionofChemistry()
{
	ifstream cin(cal_Path("4","13"));
	double num,before;
	cout.precision(2);
	for (int i=0;cin>>num;i++)
	{
		if(num==999)break;
		if(i==0)
		{
			before=num;
		}
		else
		{
			cout<<fixed<<num-before<<endl;
			before=num;
		}

	}
	cout<<"End of Output"<<endl;
}
void AddingReversedNumbers()
{
	ifstream cin(cal_Path("4","14"));
	int num;
	string s1,s2,tmp;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>s1>>s2;
		reverse(s1.begin(),s1.end());
		reverse(s2.begin(),s2.end());
		tmp=convertToInt(convertFromInt(s1)+convertFromInt(s2));
		reverse(tmp.begin(),tmp.end());
		cout<<convertFromInt(tmp)<<endl;
	}
}
void ImageTransformation()
{
	ifstream cin(cal_Path("4","15"));
	int row,col,num;
	int RGB[256][256]={0};
	int count=1;
	while (cin>>row>>col)
	{
		if(row==0&&col==0)break;
		for (int k = 0; k < 3; k++)
		{
			for (int i = 0; i < row; i++)
			{
				for (int j = 0; j < col; j++)
				{
					cin>>num;
					RGB[i][j]+=num;
				}
			}
		}
		cout<<"Case "<<count<<":"<<endl;
		for (int i = 0; i < row; i++)
		{
			for (int j = 0; j < col; j++)
			{
				if(j==col-1)
				{
					cout<<RGB[i][j]/3<<endl;
					RGB[i][j]=0;
				}
				else
				{
					cout<<RGB[i][j]/3<<",";
					RGB[i][j]=0;
				}
			}
		}
		count++;
	}
}
void BeautifulMeadow()
{
	ifstream cin(cal_Path("4","16"));
	int sum,num;
	int row,col;
	int Meadow[256][256]={0};
	while (cin>>row>>col)
	{
		if(row==0&&col==0)break;
		bool flag=true;
		sum=0;
		for (int i = 0; i < row; i++)
		{
			for (int j = 0; j < col; j++)
			{
				cin>>num;
				Meadow[i][j]=num;
				sum=sum+num;
			}
		}
		if(sum==col*row)
		{
			cout<<"NO"<<endl;
		}
		else
		{
			for (int i = 0; i < row; i++)
			{
				for (int j = 0; j < col; j++)
				{
					if(i==row-1&&j!=col-1)
					{
						if(Meadow[i][j]==0&&Meadow[i][j+1]==0)
						{
							flag=false;
							break;
						}
					}
					if(j==col-1&&i!=row-1)
					{
						if(Meadow[i][j]==0&&Meadow[i+1][j]==0)
						{
							flag=false;
							break;
						}
					}
					if(j!=col-1&&i!=col-1)
					{
						if((Meadow[i][j]==0&&Meadow[i+1][j]==0)||(Meadow[i][j]==0&&Meadow[i][j+1]==0))
						{
							flag=false;
							break;
						}
					}
				}
				if(flag==false)break;
			}
			if(flag==false)
			{
				cout<<"NO"<<endl;
			}
			else
			{
				cout<<"YES"<<endl;
			}
		}
		
	}

}
void DNASorting()
{
	ifstream cin(cal_Path("4","17"));
	int num,rows,cols;
	string s;
	DNA dna;
	multiset<DNA,DNA_sort> m;
	multiset<DNA,DNA_sort>::iterator mit;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>rows>>cols;
		for (int j = 0; j < cols; j++)
		{
			cin>>s;
			dna.sum=cal_sort(s);
			dna.dnalist=s;
			m.insert(dna);
		}
		for (mit = m.begin();mit!=m.end(); mit++)
		{
			cout<<(*mit).dnalist<<endl;
		}
	}


}
void DaffodilNumber()
{
	ifstream cin(cal_Path("4","18"));
	int num;
	int a;
	int b;
	int c;
	while (cin>>num)
	{
		if(num<100&&num>999)break;
		a=num/100;
		b=(num/10)%10;
		c=num%10;
		if(num==pow(a,3)+pow(b,3)+pow(c,3))
		{
			cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
	}
}
void ErrorCorrection()
{
	ifstream cin(cal_Path("4","19"));
	int mat[256][256];
	int num,digit,sum;
	vector<int> row,col;
	while(cin>>num)
	{
		if(num==0)break;
		row.clear();
		col.clear();
		for (int i = 0; i < num; i++)
		{
			sum=0;
			for (int j = 0; j < num; j++)
			{
				cin>>digit;
				mat[i][j]=digit;
				sum=sum+digit;
			}
			if(sum%2!=0)row.push_back(i+1);
		}
		for (int j = 0; j < num; j++)
		{
			sum=0;
			for (int i = 0; i < num; i++)
			{
				sum=sum+mat[i][j];
			}
			if(sum%2!=0)col.push_back(j+1);
		}
		if(row.size()==0&&col.size()==0)
		{
			cout<<"OK"<<endl;
		}
		if(row.size()==1&&col.size()==1)
		{
			cout<<"Change bit ("<<row[0]<<","<<col[0]<<")"<<endl;
		}
		if(row.size()>1||col.size()>1)
		{
			cout<<"Corrupt"<<endl;
		}
	}
	

}
void MartianAddition()
{
	ifstream cin(cal_Path("4","20"));
	string s,s1,s2;
	map<int,char> m1;
	map<char,int> m2;
	for (int i = 0; i < 10; i++)
	{
		m1[i]='0'+i;
		m2[i+'0']=i;
	}
	for(int i=10;i<20;i++)
	{
		m1[i]='a'+i-10;
		m2[i-10+'a']=i;
	}
	while (cin>>s1>>s2)
	{
		if(s1.length()<s1.length())
		{
			s=s1;
			s1=s2;
			s2=s;
		}
		int jinwei=0;
		for (int i = s2.length()-1,k=s1.length()-1; i >=0; i--,k--)
		{
			if(m2[s1[k]]+m2[s2[i]]+jinwei>=20)
			{
				s1[k]=m1[m2[s1[k]]+m2[s2[i]]+jinwei-20];
				jinwei=1;
			}
			else
			{
				s1[k]=m1[m2[s1[k]]+m2[s2[i]]+jinwei];
				jinwei=0;
			}
		}
		for (int i = s1.length()-s2.length()-1; i >= 0; i--)
		{
			if(m2[s1[i]]+jinwei>=20)
			{
				s1[i]=m1[m2[s1[i]]+jinwei-20];
				jinwei=1;
			}
			else
			{
				s1[i]=m1[m2[s1[i]]+jinwei];
				jinwei=0;
			}
		}
		if(jinwei==1)
		{
			s1="1"+s1;
		}
		cout<<s1<<endl;

	}
}
void FatMouseTrade()
{
	ifstream cin(cal_Path("4","21"));
	Trade t1;
	vector<Trade> v;
	int num;
	double F,A;
	double total,finaltrade;
	cout.precision(3);
	while (cin>>total>>num)
	{
		if(total==-1&&num==-1)break;
		v.clear();
		for (int i = 0; i < num; i++)
		{
			cin>>F>>A;
			t1.F=F;
			t1.A=A;
			t1.bi=F/A;
			v.push_back(t1);
		}
		sort(v.begin(),v.end(),Comp_trade);
		finaltrade=0;
		for (int j = 0; j < v.size() && total>0; j++)
		{
			if(total>=v[j].A)
			{
				finaltrade = finaltrade + v[j].F;
				total=total-v[j].A;
			}
			else
			{
				finaltrade = finaltrade + total * v[j].F / v[j].A;
				total = 0;
			}
		}
		cout<<fixed<<finaltrade<<endl;
	}

}
void ListtheBooks()
{
	ifstream cin(cal_Path("4","22"));
	Book b;
	vector<Book> v;
	int num;
	string sortst;//排序的标准
	string name;
	int year;
	double price;
	while (cin>>num)
	{
		if(num==0)break;
		v.clear();
		for (int i = 0; i < num; i++)
		{
			cin>>name>>year>>price;
			b.name=name;
			b.year=year;
			b.price=price;
			v.push_back(b);
		}
		cin>>sortst;
		if(sortst.compare("Name")==0)sort(v.begin(),v.end(),Comp_Book_Name);
		if(sortst.compare("Year")==0)sort(v.begin(),v.end(),Comp_book_Year);
		if(sortst.compare("Price")==0)sort(v.begin(),v.end(),Comp_book_Price);
		for (int i = 0; i < v.size(); i++)
		{
			cout<<v[i].name<<" "<<v[i].year<<" "<<v[i].price<<endl;
		}
		cout<<endl;
	}
}
void HeadToHeadMatch()
{
	ifstream cin(cal_Path("4","23"));
	int num;
	int count;
	while (cin>>num)
	{
		if(num==0)break;
		count=0;
		while (num!=1)
		{
			if(num%2==0)
			{
				num=num/2;
			}
			else
			{
				num=num/2+1;
			}
			count++;
		}
		cout<<count<<endl;
	}
}
void WindowsMessageQueue()
{
	ifstream cin(cal_Path("4","24"));
	multiset<order,order_sort> m;
	order o;
	string ordername,name;
	int parameter;
	int priority;
	while (cin>>ordername)
	{
		if(ordername.compare("GET")==0)
		{
			if(m.size()==0)
			{
				cout<<"EMPTY QUEUE!"<<endl;
			}
			else
			{
				cout<<(*m.begin()).name<<" "<<(*m.begin()).parameter<<endl;
				m.erase(m.begin());
			}
		}
		if(ordername.compare("PUT")==0)
		{
			cin>>name>>parameter>>priority;
			o.name=name;
			o.parameter=parameter;
			o.priority=priority;
			m.insert(o);
		}
	}


}
void LanguageofFatMouse()
{
	ifstream cin(cal_Path("4","25"));
	string s;
	char s1[256],s2[256];
	map<string,string> m;
	map<string,string>::iterator mit;
	while (getline(cin,s))//gets后面必须为char*   sscanf s.c_str()  char* char*
	{
		
		if(s=="")break;
		sscanf(s.c_str(),"%s %s",s1,s2);
		m[s2]=s1;
	}
	while(cin>>s)
	{
		mit=m.find(s);
		if(mit!=m.end())cout<<m[s]<<endl;
		else
			cout<<"en"<<endl;
	}

}
void Palindromes()
{
	ifstream cin(cal_Path("4","26"));
	char s[5000];
	int i,length,left,right,center,count;
	while (cin>>s)
	{
		length=strlen(s);
		count=0;
		for (int i = 0; i < length-1; i++)
		{
			center = (length-1-i)/2+i;//i表示中间字符串的偏移
			if((length-1-i)%2==0)//中间的间隔有偶数个,实则为奇数串
			{
				left=center-1;//i表示中间字符串的偏移
				right=center+1;
			}
			else
			{
				left=center;
				right=center+1;
			}
			while (right<=length-1)
			{
				if(s[left]==s[right])
				{
					count++;
					left--;
					right++;
				}
				else
				{
					break;
				}
			}
		}
		for (int i = length-2; i >= 1; i--)
		{
			center = i/2;
			if(i%2==0)
			{
				left=center-1;
				right=center+1;
			}
			else
			{
				left=center;
				right=center+1;
			}
			while (left>=0)
			{
				if(s[left]==s[right])
				{
					count++;
					left--;
					right++;
				}
				else
				{
					break;
				}
			}
		}
		cout<<count+length<<endl;
	}
}
void Palindromes2()
{
	/*
		首先从第二个开始遍历到倒数的第二个,然后第二个和左右两边的分别组成一个三个的,然后5个的,依次判断
		然后第二个和左边的组成2个,然后2,4,6依次判断,最后由于最后一个和最后第二个的情况被漏掉了
		所以最后的时候加上了一个判断
	*/
	ifstream cin(cal_Path("4","26"));
	char s[5000];
	int i,length,left,right,center,count;
	while (cin>>s)
	{
		length=strlen(s);
		count=0;
		for (int i = 1; i < length-1; i++)
		{
			left=i-1;
			right=i+1;
			while (left>=0&&right<=length-1)
			{
				if(s[left]==s[right])
				{
					count++;
					left--;
					right++;
				}
				else
				{
					break;
				}
			}
			left=i-1;
			right=i;
			while (left>=0&&right<=length-1)
			{
				if(s[left]==s[right])
				{
					count++;
					left--;
					right++;
				}
				else
				{
					break;
				}
			}
		}
		if(s[length-1]==s[length-2])
		{
			count++;
		}
		cout<<count+length<<endl;

	}
}
void RootoftheProblem()
{
	ifstream cin(cal_Path("4","27"));
	double B,N;
	while (cin>>B>>N)
	{
		if(B==0&&N==0)break;
		int tmp;
		tmp=pow(B,1/N);
		if((B-pow(tmp,N))<=(pow(tmp+1,N)-B))
			cout<<tmp<<endl;
		else
			cout<<tmp+1<<endl;
	}
}
void MagicSquare()
{
	ifstream cin(cal_Path("4","28"));
	int num;
	int digit;
	int a[10][10];
	while (cin>>num)
	{
		if(num==0)break;
		bool flag=true;
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cin>>digit;
				a[i][j]=digit;
			}
		}

		for (int i = 0; i < num*num-1; i++)
		{
			for (int j = i+1; j < num*num; j++)
			{
				if(a[i/num][i-(i/num)*num]==a[j/num][j-(j/num)*num])
				{
					flag=false;
					break;
				}
			}
			if(flag==false)break;
		}
		int sum=0;
		int fsum;
		for (int i = 0; i < num && flag==true; i++)
		{
			fsum=0;
			for (int j = 0; j < num; j++)
			{
				if(i==0)
				{
					sum=sum+a[i][j];
				}
				else
				{
					fsum=fsum+a[i][j];
				}
			}
			if(i!=0&&sum!=fsum)
			{
				flag=false;
				break;
			}
		}
		for (int j = 0; j < num && flag==true; j++)
		{
			fsum=0;
			for (int i = 0; i < num; i++)
			{
				fsum=fsum+a[i][j];
			}
			if(sum!=fsum)
			{
				flag=false;
				break;
			}
		}
		fsum=0;
		for (int i = 0; i < num && flag==true; i++)
		{
			fsum=fsum+a[i][i];
		}
		if(sum!=fsum)
		{
			flag=false;
		}
		fsum=0;
		for (int i = 0; i < num && flag==true; i++)
		{
			fsum=fsum+a[num-1-i][i];
		}
		if(sum!=fsum)
		{
			flag=false;
		}
		if(flag==true)
		{
			cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
	}
}
void SemiPrime()
{
	ifstream cin(cal_Path("4","29"));
	vector<int> v;
	set<int> s;
	set<int>::iterator sit;
	int p,num;
	v=pt(2,500000);
	for (int i = 0; i < v.size(); i++)
	{
		for (int j = 0; j < v.size(); j++)
		{
			p=v[i]*v[j];
			if(p<=1000000)
			{
				s.insert(p);
			}
			else
			{
				break;
			}
		}
	}
	while(cin>>num)
	{
		sit=s.find(num);
		if(sit!=s.end())
		{
			cout<<"Yes"<<endl;
		}
		else
		{
			cout<<"No"<<endl;
		}
	}
}
void BeautifulNumber()
{
	ifstream cin(cal_Path("4","30"));
	int a[100000];
	int i=0;
	int j=3;
	while (true)
	{
		if(j%3==0||j%5==0)
		{
			a[i++]=j;
			if(i==100000)break;
		}
		j++;
	}
	int num;
	while(cin>>num)
	{
		cout<<a[num-1]<<endl;
	}
}
void PhoneList()
{
	ifstream cin(cal_Path("4","31"));
	vector<string> v;
	string s;
	int num,count;
	bool flag;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>count;
		v.clear();
		flag=true;
		for (int j = 0; j < count; j++)
		{
			cin>>s;
			v.push_back(s);
		}
		sort(v.begin(),v.end());
		for (int p = 1; p < v.size(); p++)
		{
			if(v[p].find(v[p-1])==0)
			{
				flag=false;
				break;
			}
		}
		if(flag==true)
		{
			cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
	}

}
void Calendar()
{
	ifstream cin(cal_Path("4","32"));
	vector<cal_info> v;
	cal_info cif;
	map<int,string> m;
	bool flag;
	int week=6;
	int day=0;
	m[1]="Monday";
	m[2]="Tuesday";
	m[3]="Wednesday";
	m[4]="Thursday";
	m[5]="Friday";
	m[6]="Saturday";
	m[7]="Sunday";
	for (int i = 2000; i < 10000; i++)
	{
		flag=runnian(i);
		for (int j = 1; j <= 12; j++)
		{
			for (int k = 1; k <= 31; k++)
			{
				if(j==4||j==6||j==9||j==11)
				{
					if(k>30)break;
				}
				else if(j==2)
				{
					if(flag==true)
					{
						if(k>29)break;
					}
					else
					{
						if(k>28)break;

					}
				}
				cif.year=i;
				cif.month=j;
				cif.day=k;
				if(week==8)week=1;
				cif.week=week;
				week++;
				v.push_back(cif);
			}
		}
	}
	int n;
	while (cin>>n)
	{
		if(n==-1)break;
		cout<<v[n].year<<"-";
		if(v[n].month<10)cout<<"0"<<v[n].month<<"-";
		else
		cout<<v[n].month<<"-";
		if(v[n].day<10)cout<<"0"<<v[n].day<<" ";
		else
		cout<<v[n].day<<" ";
		cout<<m[v[n].week]<<endl;
	}
}
void NoBrainer()
{
	ifstream cin(cal_Path("4","33"));
	int a,b,num;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>a>>b;
		if(a<b)
		{
			cout<<"NO BRAINS"<<endl;
		}
		else
		{
			cout<<"MMM BRAINS"<<endl;
		}
	}
}
void QuickChange()
{
	ifstream cin(cal_Path("4","34"));
	int total,num;
	int quarter,dime,nickel;
	cin>>num;
	for (int i = 1; i <= num; i++)
	{
		cin>>total;
		quarter = total / 25;
		total = total - quarter * 25; 
		dime = total / 10;
		total = total - dime * 10;
		nickel = total / 5;
		total = total - nickel * 5;
		cout<<num<<" "<<quarter<<" QUARTER(S), "<<dime<<" DIME(S), "<<nickel<<" NICKEL(S), "<<total<<" PENNY(S)"<<endl;

	}
}
void TotalAmount()
{
	ifstream cin(cal_Path("4","35"));
	string s1,s2;
	int num;
	while (cin>>num)
	{
		if(num==0)break;
		if(num==1)
		{
			cin>>s1;
			cout<<s1<<endl;
			continue;
		}
		cin>>s1>>s2;
		s1=string_plus(s1,s2);
		for (int i = 2; i < num; i++)
		{
			cin>>s2;
			s1=string_plus(s1,s2);
		}
		cout<<s1<<endl;
	}
}
void ElectricalOutlets()
{
	fstream cin(cal_Path("4","36"));
	int num,number,sum,tmp;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>number;
		sum=0;
		for (int j = 0; j < number; j++)
		{
			cin>>tmp;
			sum+=tmp;
		}
		cout<<sum+1-number<<endl;
	}

}
void SpeedLimit()
{
	fstream cin(cal_Path("4","37"));
	int num,speed,time,timebefore,mile;
	while(cin>>num)
	{
		if(num==-1)break;
		speed=timebefore=mile=0;
		for (int i = 0; i < num; i++)
		{
			cin>>speed>>time;
			mile+=speed*(time-timebefore);
			timebefore=time;
		}
		cout<<mile<<" miles"<<endl;
	}
	
}
void BeattheSpread()
{
	fstream cin(cal_Path("4","38"));
	int num,score1,score2,scoreplus,scoreminu;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>scoreplus>>scoreminu;
		if((scoreminu>scoreplus)||(scoreminu+scoreplus)%2!=0||(scoreplus-scoreminu)%2!=0)
		{
			cout<<"impossible"<<endl;
		}
		else
		{
			score1=(scoreplus+scoreminu)/2;
			score2=(scoreplus-scoreminu)/2;
			cout<<score1<<" "<<score2<<endl;
		}
		
	}
}
void ChampionoftheSwordsmanship()
{
	fstream cin(cal_Path("4","39"));
	int num,sum;
	while (cin>>num)
	{
		if(num==0)break;
		if(num==1)
		{
			cout<<"impossible"<<endl;
			continue;
		}
		sum=0;
		while (num!=1)
		{
			if(num==2)
			{
				sum++;
				break;
			}
			else
			{
				sum=sum+num/3;
				num=num/3+num%3;
			}
			
		}
		cout<<sum<<endl;
	}
}
void Doubles()
{
	fstream cin(cal_Path("4","40"));
	set<int> v;
	set<int>::iterator it;
	int num;
	while (cin>>num)
	{
		if(num==-1)break;
		if (num!=0)
		{
			v.insert(num);
		}
		if(num==0)
		{
			int sum=0;
			for (it = v.begin(); it != v.end(); it++)
			{
				if(v.find((*it)*2)!=v.end())sum++;
			}
			cout<<sum<<endl;
			v.clear();
		}

		

	}
}
void FileSearching()
{
	fstream cin(cal_Path("4","41"));
	vector<string> v,vans;
	string s,sans;
	string beforein,afterin,beforeout,afterout;
	int inputnum,ans;
	int c=0;
	while (cin>>inputnum)
	{
		if(c>0)
		{
			cout<<endl;
		}
		c++;
		for (int i = 0; i < inputnum; i++)
		{
			cin>>s;
			v.push_back(s);
		}
		cin>>ans;
		for (int i = 0; i < ans; i++)
		{
			cin>>sans;
			int tmp=sans.find("*");
			beforeout=sans.substr(0,tmp);
			afterout=sans.substr(tmp+1,sans.length()-tmp);
			if(beforeout.length()==0&&afterout.length()!=0)
			{
				for (int i = 0; i < v.size(); i++)
				{
					if(v[i].find(afterout)!=-1)
					{
						vans.push_back(v[i]);
					}
				}
			}
			if(beforeout.length()!=0&&afterout.length()==0)
			{
				for (int i = 0; i < v.size(); i++)
				{
					if(v[i].find(beforeout)!=-1)
					{
						vans.push_back(v[i]);
					}
				}
			}
			if(beforeout.length()!=0&&afterout.length()!=0)
			{
				for (int i = 0; i < v.size(); i++)
				{
					if(v[i].find(beforeout)!=-1&&v[i].find(afterout)!=-1&&v[i].find(beforeout)<v[i].find(afterout))
					{
						vans.push_back(v[i]);
					}
				}
			}
			if(vans.size()==0)
			{
				cout<<"FILE NOT FOUND"<<endl;
			}
			else
			{
				for (int j = 0; j < vans.size()-1; j++)
				{
					cout<<vans[j]<<",";
				}
				cout<<vans[vans.size()-1]<<endl;
			}
			vans.clear();
			
		}
		v.clear();
	}
	
}
void OldBill()
{
	fstream cin(cal_Path("4","42"));
	int num,N,X,Y,Z,digit,number;
	bool flag;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>N>>X>>Y>>Z;
		digit=X*1000+Y*100+Z*10;
		flag=false;
		for (int i = 9; i > 0; i--)
		{
			for (int j = 9; j >= 0; j--)
			{
				number=i*10000+digit+j;
				if(number%N==0)
				{
					cout<<i<<" "<<j<<" "<<number/N<<endl;
					flag=true;
					break;
				}
			}
			if(flag==true)
			{
				break;
			}
		}
		if(flag==false)
		{
			cout<<"0"<<endl;
		}
	}

}
void DivisorSummation() 
{
	fstream cin(cal_Path("4","43"));
	int d=sqrt(500000);
	int num,n;
	for (int i = 2; i < 500000; i++)
	{
		m[i]=1;
	}
	for (int i = 2; i <= d; i++)
	{
		m[i*i]+=i;
		for (int j = i+1; j <= (500000/d); j++)
		{
			m[i*j]+=i+j;
		}
	}
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>n;
		cout<<m[n]<<endl;
	}

}
void EasierDoneThanSaid()
{
	fstream cin(cal_Path("4","44"));
	string s;
	int numY,numF;
	bool flag;
	while (cin>>s)
	{
		if(s=="end")break;
		numY=numF=0;
		flag=true;
		if(s.find("a")!=-1||s.find("e")!=-1||s.find("i")!=-1||s.find("o")!=-1||s.find("u")!=-1)
		{
			for (int i = 0; i < s.length(); i++)
			{
				if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
				{
					numY++;
					numF=0;
				}
				else
				{
					numF++;
					numY=0;
				}
				if(numY==2||numF==2)
				{
					if(s[i]=='e'||s[i]=='o')
					{
						continue;
					}
					else
					{
						if(s[i]==s[i-1])
						{
							flag=false;
							break;
						}
						else
						{
							continue;
						}
						
					}
				}
				if(numY==3||numF==3)
				{
					flag=false;
					break;
				}
			}
		}
		else
		{
			flag=false;
		}
		if(flag==true)
		{
			cout<<"<"<<s<<"> is acceptable."<<endl;
		}
		else
		{
			cout<<"<"<<s<<"> is not acceptable."<<endl;
		}
	}
}
void LettheBalloonRise()
{
	fstream cin(cal_Path("4","45"));
	map<string,int> m;
	map<string,int>::iterator mit;
	int num,second;
	string s,first;
	while (cin>>num)
	{
		if(num==0)break;
		for (int i = 0; i < num; i++)
		{
			cin>>s;
			if(m[s]==-1)
			{
				m[s]=1;
			}
			else
			{
				m[s]=m[s]+1;
			}
			
		}
		 mit = m.begin();
		 first=(*mit).first;
		 second=(*mit).second;
		 mit++;
		for (; mit !=m.end(); mit++)
		{
			if((*mit).second>second)
			{
				first=(*mit).first;
				second=(*mit).second;
			}
		}
		cout<<first<<endl;
		m.clear();
	}
}
void TheHardestProblemEver()
{
	fstream cin(cal_Path("4","46"));
	string s;
	char ss[256];
	map<char,char> m;
	m['A']='V';
	m['B']='W';
	m['C']='X';
	m['D']='Y';
	m['E']='Z';
	m['F']='A';
	m['G']='B';
	m['H']='C';
	m['I']='D';
	m['J']='E';
	m['K']='F';
	m['L']='G';
	m['M']='H';
	m['N']='I';
	m['O']='J';
	m['P']='K';
	m['Q']='L';
	m['R']='M';
	m['S']='N';
	m['T']='O';
	m['U']='P';
	m['V']='Q';
	m['W']='R';
	m['X']='S';
	m['Y']='T';
	m['Z']='U';
	while (cin.getline(ss,256))
	{
		s=ss;
		if(s=="START"||s=="END")continue;
		if(s=="ENDOFINPUT")break;
		for (int i = 0; i < s.length(); i++)
		{
			if(s[i]>='A'&&s[i]<='Z')
			{
				cout<<m[s[i]];
			}
			else
			{
				cout<<s[i];
			}
		}
		cout<<endl;
	}

}
void FibonacciAgain()
{
	ifstream cin(cal_Path("4","47"));
	int num;
	v[0]=7%3;
	v[1]=11%3;
	for (int i = 2; i < 1000000; i++)
	{
		v[i]=(v[i-1]+v[i-2])%3;
	}
	while (cin>>num)
	{
		if(v[num]==0)
		{
			cout<<"yes"<<endl;
		}
		else
		{
			cout<<"no"<<endl;
		}
	}
}
void ExcusesExcuses()
{
	ifstream cin(cal_Path("4","48"));
	int keyNum,sentenceNum,count,i,start,setnum=0;
	vector<string> v;
	vector<excuse> vi;
	excuse ex;
	string s,subs;
	char ss[256];
	bool flag;
	while (cin>>keyNum>>sentenceNum)
	{
		vi.clear();
		v.clear();
		setnum++;
		if(setnum>1)cout<<endl;
		for (int i = 0; i < keyNum; i++)
		{
			cin>>s;
			for (int k = 0; k < s.length(); k++)
			{
				if(s[k]>='A'&&s[k]<='Z')s[k]=s[k]+32;
			}
			v.push_back(s);
		}
		i=0;
		cin.getline(ss,71);
		while ((i++<sentenceNum)&&cin.getline(ss,80))
		{
			s=ss;
			ex.str=s;
			//cout<<"hld:"<<ex.str<<endl;
			ex.count=0;
			start=0;
			flag=true;
			for (int j = 0; j < s.length(); j++)
			{
				if((s[j]>='a'&&s[j]<='z')||(s[j]>='A'&&s[j]<='Z'))
				{
					if(flag==true)
					{
						start=j;
						flag=false;
					}
				}
				else
				{
					flag=true;
					if(j-start<=1)
					{
						start=j;
					}
					else
					{
						subs=s.substr(start,j-start);
						for (int k = 0; k < subs.length(); k++)
						{
							if(subs[k]>='A'&&subs[k]<='Z')subs[k]=subs[k]+32;
						}
						for (int p = 0; p < v.size(); p++)
						{
							if(subs.compare(v[p])==0)
							{
								ex.count++;
								break;
							}
						}
					}
				}
			
			}
			vi.push_back(ex);
		}
		sort(vi.begin(),vi.end(),CompEx);
		cout<<"Excuse Set #"<<setnum<<endl;
		for (int q = 0; q < v.size(); q++)
		{
			if(vi[q].count==vi[0].count)
			{
				cout<<vi[q].str<<endl;
			}
			else
			{
				break;
			}
		}
		
	}
}
void LowestBit()
{
	ifstream cin(cal_Path("4","49"));
	int num,i;
	vector<int> v;
	while (cin>>num)
	{
		if(num==0)break;
		while (num!=0)
		{
			v.push_back(num%2);
			num=num/2;
		}
		for ( i = 0; i < v.size(); i++)
		{
			if(v[i]==1)break;
		}
		cout<<pow(2,i)<<endl;
		v.clear();
	}
}
void LongestOrderedSubsequence()
{
	ifstream cin(cal_Path("4","50"));
	int num,count,digit;
	vector<longxulie> v;
	longxulie l;
	cin>>num;
	for (int i = 0; i < num; i++)
	{
		cin>>count;
		for (int j = 0; j < count; j++)
		{
			cin>>digit;
			l.num=digit;
			l.maxlen=1;
			v.push_back(l);
			if(j==0)continue;
			int m=0;
			for (int k = 0; k < v.size()-1; k++)
			{
				if(v[k].num<v[v.size()-1].num)
				{
					if(v[k].maxlen>m)m=v[k].maxlen;
				}
			}
			v[v.size()-1].maxlen=m+1;
			
		}
		sort(v.begin(),v.end(),Compxulie);
		cout<<v[0].maxlen<<endl;
	}
}
//其他的章节









猜你喜欢

转载自blog.csdn.net/qq_22125259/article/details/49209505
ACM
今日推荐