转移代码

来源:互联网 发布:邬贺铨 大数据 编辑:程序博客网 时间:2024/06/11 21:46

//每天AC一道题,一年365道题,你就能成为一个编程高手

http://user.qzone.qq.com/547571157

刚接触计算机语言。把空间写的都转到这里吧。

从刚开始A题的所有代码都在这里了。

自己也懒的再一一分类了。还有没写完的代码。就这样吧。

写的还是比较少的。我会加油的!

/*#include<iostream>
#include<string>
#include<vector>
#include<cstdio>
using namespace std;

int main(){
    int a,b;cin>>a>>b;
 cout<<a+b<<endl;
 return 0;
}*/
                                         //南工No.79,导弹拦截
/*#include<iostream>
#include<vector>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
//void print(int a){cout<<a<<" ";}
int main()
{
 int count;cin>>count;
 while(count--)
 {
  int num;cin>>num;
  vector<int>inter(num,1),height(num,0);
  int i,j;
  for(i=0;i<num;i++)
   cin>>height[i];
  for(i=1;i<num;i++)
   for(j=0;j<i;j++)
   {
    if(height[i]<height[j])inter[i]=inter[i]>inter[j]+1?inter[i]:inter[j]+1;
   }
  // for_each(inter.begin(),inter.end(),print);
  cout<<*max_element(inter.begin(),inter.end())<<endl;;
 }
 return 0;
}*/
         //南工No.143,第几是谁
/*#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
 int time;cin>>time;
 while(time--)
 {
  unsigned int fac[] = {1,2,6,24,120,720,5040,40320,362880,3628800,39916800},rank;
  cin>>rank;
  char s[13]="abcdefghijkl";
  int i,j,k;
  rank--;//这里减一很重要
  for(i=10;i>=0;i--)
  {
   int temp = rank/fac[i];
   rank%=fac[i];
   k=0;
   for(j=0;j<12;j++)
   {
    if(s[j]!='0')k++;
    if(k==temp+1)break;
   }
   cout<<s[j];
   s[j]='0';
  }
  i=0;
  while(1)
  {
   if(s[i]!='0'){cout<<s[i]<<endl;;break;}
   else i++;
  }
 }
 return 0;
}/*
/*
#include<stdio.h>
#include<memory.h>
int a[11] = { 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800 };
int b[12] = { 0 };
char c[12] = { 'a','b','c','d','e','f','g','h','i','j','k','l'};
int main()
{
 long M, n;
 int i,j,z,temp;
 scanf("%ld", &M);
 while (M--)
 {
  scanf("%ld", &n);
  memset(b, 0, 48);
  n--;
  for (i = 10; i >= 0; i--)
  {
   temp = n / a[i];
   n = n%a[i];
   z = 0;
   for (j = 0; j <12; j++)
   {
    if (b[j] == 0)
    {
     z++;
    }
    if (z == temp+1)
     break;
   }
   printf("%c", c[j]);
   b[j] = 1;
  }
  for (i = 0; i < 12; i++)
  {
   if (b[i] == 0)
   {
    printf("%c\n", c[i]);
   }
  }
 }
 return 0;
}
       */                            //南工No.63,小猴子的下落
/*#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
 while(1)
 {
  int Dep,Amo;
  cin>>Dep>>Amo;
  if(!(Dep&&Amo))break;
  int t = pow(2,Dep)-1;
  vector<int>tree(t,0);
  int i,j,Loc;
  for(i=0;i<Amo;i++)
  {
   Loc=1;
   for(j=0;j<Dep-1;j++)
   {
    
    if(tree[Loc-1]){tree[Loc-1]=0;Loc=Loc*2+1;}
    else {tree[Loc-1]=1;Loc*=2;}
   }
  }
  cout<<Loc<<endl;
 }
 return 0;
}*/
 
                                      //南工ACM,No.84.阶乘的零。
/*#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
void print(int a){cout<<a;}
int main()
{
 int m;cin>>m;
 while(m--)
 {
  int n,i;cin>>n;
  vector<int>a(1,1);
  int nRes=0;
  for(i=2;i<=n;i++)
  {
   int jinweishu=0;
   int j;
   for(j=0;j<a.size();j++)
   {
    jinweishu+=a[j]*i;
    a[j]=jinweishu%10;
    jinweishu/=10;
   }
   while(jinweishu)
   {
    a.push_back(jinweishu%10);
    jinweishu/=10;
   }
   while(!a[0]&&a.size()>=1)
  {
   nRes++;a.erase(a.begin());
  }
  }
  //for_each(a.begin(),a.end(),print);cout<<endl;
  cout<<nRes<<endl;
 }
 return 0;
}*/
/*#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
void print(int a){cout<<a;}
int main()
{
 int m;cin>>m;
 while(m--)
 {
  int nRes=0;
  int n,i;cin>>n;
  while(n)
  {
   nRes+=n/5;//因为每次只有(五和十)都会出现末尾是零,并且每次只会有一个。
   n/=5;
  }
  cout<<nRes<<endl;
 }
 return 0;
}*/
                                        //自选,大数除法.南工ACM,NO.70阶乘因式分解(二)范围增大版
/*#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
 int fre;cin>>fre;
 while(fre--)
 {
  string s;cin>>s;
  int m,i,sum=0;cin>>m;
  vector<int>div,temp;
  for(i=0;i<s.size();i++)
  {
   div.push_back(((int)s[i])-48);
  }
  
  while(div.size()!=0)
  {
   int t = 0;
   for(i=0;i<div.size();i++)
   {
    t=t*10+div[i];
    if(t<m)
    {
     if(i==0)continue;
     else temp.push_back(0);
    }
    else
    {
     temp.push_back(t/m);
     t%=m;
    }
   }
   temp.swap(div);
   temp.clear();
   t=0;
   for(i=0;i<div.size();i++)
   {
    t=t*10+div[i];
   }
   sum+=t;
  }
  cout<<sum<<endl;
 }
 return 0;
}*/
                                       //南工ACM,NO.70阶乘因式分解(二)
/*#include<iostream>
using namespace std;
int main()
{
 int s;cin>>s;
 while(s--)
 {
  int n,m,t,sum=0;cin>>n>>m;t=m;
  while(m<n)
  {
   sum+=n/m;
   m*=t;
  }
  cout<<sum<<endl;
 }
 return 0;
}
*/
                                        //南工ACM,NO.52无聊的小明
/*#include<iostream>
#include<cmath>
#include<vector>
int main()
{
 using namespace std;
 int N;cin>>N;
    while(N--)
 {
  long long n,k;cin>>n>>k;
  long long fir=n,loop=-1;
  long long res,w=pow(10,k);
  fir=n%w;
  res=fir;
  for(loop=1;loop<w;loop++)
  {
   res=res*n%w;
   if(res==fir)break;
   else if(loop==w-1){loop=-1;break;}
  }
  cout<<loop<<endl;
 }
 return 0;
}
*/


             //南工ACM,NO.8
/*
#include<iostream>
#include<vector>
using namespace std;
struct lon{
 int num;
 int h;
 int w;
}l;
void swap(lon &a,lon &b);
int main()
{
 int n,m;
 int i,j;
 int a,b;
 cin>>n;
 while(n--)
 {
  vector<struct lon> v;
  cin>>m;
  for(i=0;i<m;i++)
  {
   cin>>l.num;
   cin>>a>>b;
   if(a<b)
   {
    l.h=b;
    l.w=a; 
   }
   else
   {
    l.h=a;
    l.w=b;
   }
   v.push_back(l);      
  }
  for(i=0;i<v.size();i++)
  {
   for(j=i+1;j<v.size();j++)
   {
    if(v[i].num>v[j].num)
    {
     swap(v[i],v[j]);
    }
    else if(v[i].num==v[j].num)
    {
     if(v[i].h>v[j].h)
      swap(v[i],v[j]);
     else if(v[i].h==v[j].h)
      if(v[i].w>v[j].w)
       swap(v[i],v[j]);
      else if(v[i].w==v[j].w)
      {
       v.erase(v.begin()+j);
       j--;
      }
    }
   }
  }
  for(i=0;i<v.size();i++)cout<<v[i].num<<" "<<v[i].h<<" "<<v[i].w<<endl;
 }
 return 0;
}
void swap(lon &a,lon &b)
{
 lon t;
 t=a;a=b;b=t;
}*/
/*由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。

    比如:

210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187

    都符合要求。

    如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。*/
/*#include <iostream>
#include <cstring>
using namespace std;
int vis[10];
int bk[10];
int check(int x, int y)
{
    do
 {
        if(vis[x % 10] == 0)
  {
            return 0;
        }
        vis[x % 10]--;
    } while(x /= 10);
    do
 {
        if(vis[y % 10] == 0)
  {
            return 0;
        }
        vis[y % 10]--;
    }
 while(y /= 10);
    return 1;
}
int check4(int x) //确认用到哪四个数
{
    do
 {
        if(vis[x % 10] != 0)
  {
            return 0;
        }
        vis[x % 10]++;
    }
 while(x /= 10);
    return 1;
}
int main()
{
    int cnt = 0;
    for(int i = 1023; i <= 9876; i++)
 {
        memset(vis, 0, sizeof(vis));//初始化
        if(!check4(i)) //确保结果是不同的四个数字
  {
            continue;
        }
        memcpy(bk, vis, sizeof(bk));//保存vis当前值
        for(int j = 1; j <= 50; j++)
  {
            memcpy(vis, bk, sizeof(bk));//每个循环重置vis值
            if(i % j != 0)
   {
                continue;
            }
            int k = i / j;
            if(j > k) //避免重复,采用左小右大的原则
   {
                continue;
            }
            if(!check(j, k)) //检验式子用到的数字是否符合结果用到的数字
   {
                continue;
            }
            cout << j << " * " << k << " = " << i << endl;
            cnt++;
        }
    }
    cout << cnt << endl;
 return 0;
}*/

                           //第二届第一题
/*
#include<iostream>
using namespace std;
int B,N;
int move(int arry[],int A,int sum);
int main()
{
 int M;cin>>M;
 while(M--)
 {
  int A;
  cin>>N>>A>>B;
  int arry[50],i,sum;
  for(i=0;i<N;cin>>arry[i++]);
  sum=move(arry,A,0);
  cout<<sum<<endl;
 }
 return 0;
}
int move(int arry[],int A,int sum)
{
 int temp=arry[A-1],a,b;
 arry[A-1]=0;
 if(A-temp==B||A+temp==B)return sum+1;
 if(A-1-temp>=0)
 {
  if(arry[A-1-temp]!=0)
   a=move(arry,A-temp,sum+1);
  else a=-1;
 }
 else a=-1;
 if(A-1+temp<N)
 {
  if(arry[A-1+temp]!=0)
   b=move(arry,A+temp,sum+1);
 }
 else b=-1;
 if(a>0)
 {
  if(b>0)return a>b?b:a;
  else return a;
 }
 else return b;
}*/


                              //第三届第五题
/*#include<iostream>
int main()
{
 using namespace std;
 int vertical,lateral;cin>>vertical>>lateral;
 int insect[20][20];
 int i,j;
 for(i=0;i<vertical;i++)
  for(j=0;j<lateral;cin>>insect[i][j++]);
 for(i=0;i<vertical;i++)
  for(j=0;j<lateral;j++)
  {
   if(i==0&&j==0)continue;
   if(i==0)insect[i][j]+=insect[i][j-1];
   else if(j==0)insect[i][j]+=insect[i-1][j];
   else if(insect[i-1][j]>insect[i][j-1])insect[i][j]+=insect[i-1][j];
   else insect[i][j]+=insect[i][j-1];
  }
 cout<<insect[vertical-1][lateral-1]<<endl;
 return 0;
}*/
                              //房间安排
/*
#include<iostream>
int main()
{
 int N;std::cin>>N;
 int sum=0;
 int a[10000],b[10000],c[10000];
 int i,j;
 for(i=0;i<N;i++)std::cin>>a[i]>>b[i]>>c[i];
 for(i=0;i<N-1;i++)//交换排序
 {
  int now=i;
  for(j=i+1;j<N;j++)
  {
   if(b[now]>b[j])
    now=j;
  }
  if(now!=i)
  {
   std::swap(a[i],a[now]);
   std::swap(b[i],b[now]);
   std::swap(c[i],c[now]);
  } 
 }
 sum+=a[0];
 for(i=1;i<N;i++)
 {
  int t=a[i];
  for(j=i-1;j>=0;j--)
  {
   if(b[j]+c[j]<=b[i]&&a[j]!=0)
   {
    if(a[j]>=t)
    {a[j]-=t;break;}
    else
    {t-=a[j];a[j]=0;}
   }
   if(j==0)sum+=t;
  }
 }
 std::cout<<sum<<std::endl;
 return 0;
}*/
                                        //阶乘之和
/*#include<iostream>
using namespace std;
int main()
{
 int a[9]={1,2,6,24,120,720,5040,40320,362880};
 int n;cin>>n;
 while(n--)
 {
  int m;cin>>m;
  int i=8;
  for(;i>=0;i--)
  {
   if(a[i]<=m)
    m-=a[i];
   if(m==0){cout<<"Yes"<<endl;break;}
   if(i==0)cout<<"No"<<endl;
  }
 }
 return 0;
}*/

                                             //懒省事的小明
/*#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
 double n;cin>>n;
 while(n--)
 {
  double kind;cin>>kind;
  double i,t;
  double sum=0;
  vector<double>fruit;
  for(i=0;i<kind;i++){cin>>t;fruit.push_back(t);}
  for(i=0;i<kind-1;i++)
  {
   sort(fruit.begin(),fruit.end());
   fruit[1]+=fruit[0];
   sum+=fruit[1];
   fruit.erase(fruit.begin());
  }
  cout<<sum<<endl;
 }
 return 0;
}*/
/*#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void half_insert_sort(vector<int>&fruit,int n);
int main()
{
 int n;cin>>n;
 while(n--)
 {
  int kind;cin>>kind;
  int i,t;
  double sum=0;
  vector<int>fruit;
  vector<int>Temp;
  for(i=0;i<kind;i++){cin>>t;fruit.push_back(t);}
  sort(fruit.begin(),fruit.end());
  for(i=0;i<kind-2;i++)
  {
   int temp=fruit[1]+fruit[0];
   Temp.push_back(temp);
   fruit.erase(fruit.begin());
   fruit.erase(fruit.begin());
   half_insert_sort(fruit,temp);
  }
  for(i=0;i<Temp.size();sum+=Temp[i++]);
  sum+=fruit[1]+fruit[0];
  cout<<sum<<endl;
 }
 return 0;
}

void half_insert_sort(vector<int>&fruit,int n)
{
 int base=0,top=fruit.size()-1;
 int mid=(base+top)/2;
 while(1)
 if(fruit[mid]>n)
 {
  if(top==base)
  {fruit.insert(fruit.begin()+mid,n);return;}
  top=mid-1;
 }
 else if(fruit[mid]<n)
 {
  if(top==base)
  {fruit.insert(fruit.begin()+mid+1,n);return;}
  base=mid+1;
 }
 else {fruit.insert(fruit.begin()+mid,n);return;}
}*/
/*#include<set>
#include<cstdio>

int main()
{
 int num;
 scanf("%d",&num);
 while(num--)
 {
  int i,kind;
  double sum=0;
  scanf("%d",&kind);
  std::set<int>fruit;
  std::set<int>::iterator add;
  for(i=0;i<kind;++i)
  {
   int temp;
   scanf("%d",&temp);
   fruit.insert(temp);
  }
  for(i=0;i<kind-1;i++)
  {
   int a,b;
   add=fruit.begin();
   a=*add++;
   b=*add;
   sum+=a+b;
   fruit.erase(fruit.begin());
      fruit.erase(fruit.begin());
   fruit.insert(a+b);
  }
  printf("%1.f\n",sum);
 }
 return 0;
}*/


                                            //我排第几个
/*#include<iostream>
#include<string>
using namespace std;
void math(char s,double n,double a[],double &sum);
double chen(double n);
double main()
{
 double n;cin>>n;
 while(n--)
 {
  string s;cin>>s;
  double sum=1,i,a[12]={1,1,1,1,1,1,1,1,1,1,1,1};
  for(i=0;i<s.size();i++)
   math(s.at(i),11-i,a,sum);
  cout<<sum<<endl;}
 return 0;
}
void math(char s,double n,double a[],double &sum)
{
 double b=s-97;
 double i,sum_=0;
 for(i=0;i<b;sum_+=a[i++]);
 a[b]=0;
 sum+=sum_*chen(n);
}
double chen(double n)
{
 double sum=1,i;
 for(i=2;i<=n;sum*=i++);
 return sum;
}*/
                                           //三点顺序
/*#include<iostream>
using namespace std;
double main()
{
 while(1){
 double x1,y1,x2,y2,x3,y3;
 cin>>x1>>y1>>x2>>y2>>x3>>y3;
 if(x1==0&&x2==0&&x3==0)break;
 //斜率k=(y2-y1)/(x2-x1),代入点斜式,得y=k*(x-x1)+y1  ==>>  y-kx=y1-kx1
 if(x1!=x2)
 {
  double k=(y2*1.0-y1*1.0)/(x2*1.0-x1*1.0);
  double a=y1*1.0-k*x1;
  if(x2>x1)
  {
   if((y3*1.0-k*x3)<a){cout<<1<<endl;continue;}
   else {cout<<0<<endl;continue;}
  }
  else if(x2<x1)
  {
   if((y3*1.0-k*x3)>a){cout<<1<<endl;continue;}
   else {cout<<0<<endl;continue;}
  }
 }
 else
 {
  if(y2>y1)
  {
   if(x3<x1){cout<<0<<endl;continue;}
   else{cout<<1<<endl;continue;}
  }
  else
  {
   if(x3>x1){cout<<0<<endl;continue;}
   else{cout<<1<<endl;continue;}
  }
 }
 }
 return 0;
}
*/

                                            //计算题Kia's Calculation

/*#include<iostream>
#include<vector>
using namespace std;
double main()
{
 double n;cin>>n;double N=1;
 while(n--)
 {
  double a,b;cin>>a>>b;
  vector<double>c[2];
  if(a==0)c[0].push_back(0);
  else while(a)
  {
   c[0].push_back(a%10);a/=10;
  }
  a=c[0].size();
  if(b==0)c[1].push_back(0);
  else while(b)
  {
   c[1].push_back(b%10);b/=10;
  }
  double i,j,k,max=0;k=a;
  while(k--)
  {
   double max_[3]={-1};
   for(i=a-1;i>=0;i--)
   {
    if(c[0][i]==-1||(k==a-1&&c[0][i]==0&&a!=1))continue;
    for(j=a-1;j>=0;j--)
    {
     if(c[1][j]==-1||(k==a-1&&c[1][j]==0&&a!=1))continue;
     if(max_[0]<(c[0][i]+c[1][j])%10){max_[0]=(c[0][i]+c[1][j])%10;max_[1]=i;max_[2]=j;}
    }
   }
   c[0][max_[1]]=-1;c[1][max_[2]]=-1;
   if(k==a-1)max=max_[0];
   else max=max*10+max_[0];
  }
  cout<<"Case #"<<N++<<": "<<max<<endl;
 }
 return 0;
}*/

                                           //大数斐波那契
/*描述
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束

输出
对于输入的每一行输出A99的值
样例输入
1 1 1样例输出
69087442470169316923566147
*//*
#include<iostream>
#include<sstream>
#include<string>
#include <stdio.h>
using namespace std;
double a[3];
double main()
{while(scanf("%d %d %d",&a[0],&a[1],&a[2])!=EOF)
{
 string A[100];
 double i;
 for(i=0;i<3;i++)
 {
 stringstream temp;
 string temp1;
 temp<<a[i];
 temp>>temp1;
 A[i]=temp1;
 }
 for(i=0;i<3;i++)
 {
  double j;
  for(j=0;j<A[i].size()/2;j++)
   swap(A[i].at(j),A[i].at(A[i].size()-j-1));
 }
 for(i=3;i<100;i++)
 {
  double jin=0,T=0;//记录进位的数,和当前位数
  while(1)
  {
   double t=0;
   t+=jin;
   if(A[i-1].size()>T)          
    t+=(double)(A[i-1].at(T)-48);
   if(A[i-2].size()>T)          
    t+=(double)(A[i-2].at(T)-48);
   if(A[i-3].size()>T)          
    t+=(double)(A[i-3].at(T)-48);
   stringstream temp;//将double转换成为string
   string temp1;//
   temp<<t%10;//
   temp>>temp1;//
   A[i]=A[i]+temp1;//把前三项当前位数的数赋给下一个地方;
   jin=t/10; //获得当前位数的进位数传递给下一位数上
   T++;
   if(T>=A[i-1].size()&&T>=A[i-2].size()&&T>=A[i-3].size())
   {
    if(jin!=0)
    {
     stringstream temp;
     string temp1;
     temp<<jin;
     temp>>temp1;
     A[i]=A[i]+temp1;
    }
    break;
   }
  }
 }
 for(i=A[99].size()-1;i>=0;cout<<A[99].at(i--));cout<<endl;
}
 return 0;
}*/


                                          //乘积最大问题
/*#include<iostream>
#include<vector>
using namespace std;
void paixu(vector<double>&zf,double t);
double main()
{
 double n,sum=1;cin>>n;
 vector<double>zf[2];
 for(double i=0;i<n;i++)
 {
  double t;cin>>t;
  if(t>0)paixu(zf[0],t);
  else paixu(zf[1],t);
 }
 double m;cin>>m;double z=0,f=0;
 if(zf[0].size()>=m)
 {
  z=m;f=0;
  while(1)
  {
   if(zf[1].size()>=2&&z>=2)
   {
    double p=zf[1].size();
    if(zf[1][p-1]*zf[1][p-2]>zf[0][m-1]*zf[0][m-2])
    {
     zf[0].push_back(zf[1][p-1]);
     zf[0].push_back(zf[1][p-2]);
     zf[1].erase(zf[1].begin()+p-1);
     zf[1].erase(zf[1].begin()+p-2);
     z-=2;f+=2;
    }
    else break;
   }
   else break;
  }
 }
 else if((m-zf[0].size())%2==0)
 {
  z=zf[0].size();f=m-zf[0].size();
  for(double i=0;i<f;i++)
  {
   zf[0].push_back(*(zf[1].end()-1));
   zf[1].erase(zf[1].end()-1);
  }
  while(1)
  {
   if(zf[1].size()>=2&&z>=2)
   {
    double p=zf[1].size();
    if(zf[1][p-1]*zf[1][p-2]>zf[0][m-1]*zf[0][m-2])
    {
     zf[0].push_back(zf[1][p-1]);
     zf[0].push_back(zf[1][p-2]);
     zf[1].erase(zf[1].begin()+p-1);
     zf[1].erase(zf[1].begin()+p-2);
     z-=2;f+=2;
    }
    else break;
   }
   else break;
  }
 }
 else
 {
  z=zf[0].size();f=m-zf[0].size();
  if(zf[1].size()>f&&z>0)
  {
   z--;f++;
   for(double i=0;i<f;i++)
   {
    zf[0].push_back(*(zf[1].end()-1));
    zf[1].erase(zf[1].end()-1);
   }
   while(1)
  {
   if(zf[1].size()>=2&&z>=2)
   {
    double p=zf[1].size();
    if(zf[1][p-1]*zf[1][p-2]>zf[0][m-1]*zf[0][m-2])
    {
     zf[0].push_back(zf[1][p-1]);
     zf[0].push_back(zf[1][p-2]);
     zf[1].erase(zf[1].begin()+p-1);
     zf[1].erase(zf[1].begin()+p-2);
     z-=2;f+=2;
    }
    else break;
   }
   else break;
  }
  }
  else
  {
   for(double i=0;i<f;i++)
   {
    zf[0].push_back(zf[1][i]);
   }
  }
 }
 for(i=0;i<z;i++)
 {sum*=zf[0][i];cout<<zf[0][i]<<"*";}
 double k=zf[0].size()-1;
 for(i=0;i<f;i++)
 {
  sum*=zf[0][k--];
  if(i==f-1)cout<<'('<<zf[0][k+1]<<")=";
  else cout<<'('<<zf[0][k+1]<<")*";
 }
 cout<<sum<<endl;
 return 0;
}

void paixu(vector<double>&zf,double t)
{
 double n=zf.size();
 if(n==0){zf.push_back(t);return;}
 for(double i=n-1;i>=0;i--)
 {
  if(zf[i]>t)
  {
   zf.insert(zf.begin()+i+1,t);
   return;
  }
  else if(i==0)
   zf.insert(zf.begin(),t);
 }
}
*/
                                          //历届试题 分糖果 

/*#include<iostream>
using namespace std;
double main()
{
 double n;cin>>n;
 double i,k=1,sum=0;
 double a[101];
 for(i=0;i<n;i++)
 {
  cin>>a[i];
 }
 while(k)
 {
  for(i=0;i<n-1;i++)
   if(a[i]!=a[i+1])break;
   else if(i==n-2)k=0;
  if(k)
  {
   double x,y;
   a[n-1]/=2;y=a[n-1];
   for(i=n-2;i>=0;i--)
   {
    a[i]/=2;x=a[i];
    a[i]+=y;
    y=x;
   }
   a[n-1]+=y;
   for(i=0;i<n;i++)
    if(a[i]%2){a[i]++;sum++;}
  }
 }
 cout<<sum<<endl;
 return 0;
}*/
                                          //历届试题 兰顿蚂蚁 
/*#include<iostream>
using namespace std;
double main()
{
 double a[101][101];
 double n,m;
 cin>>n>>m;
 double i,j;
 for(i=0;i<n;i++)
 {
  for(j=0;j<m;j++)
   cin>>a[i][j];
 }
 double x,y,k;char s;cin>>x>>y>>s>>k;
 while(k--)
 {
  switch(s)
  {
  case 'U':
   {
    if(a[x][y])
    {
     a[x][y]=0;
     s='R';
     y++;
    }
    else
    {
     a[x][y]=1;
     s='L';
     y--;
    }
   }break;
  case 'D':
   {
    if(a[x][y])
    {
     a[x][y]=0;
     s='L';
     y--;
    }
    else
    {
     a[x][y]=1;
     s='R';
     y++;
    }
   }break;
  case 'L':
   {
    if(a[x][y])
    {
     a[x][y]=0;
     s='U';
     x--;
    }
    else
    {
     a[x][y]=1;
     s='D';
     x++;
    }
   }break;
  case 'R':
   {
    if(a[x][y])
    {
     a[x][y]=0;
     s='D';
     x++;
    }
    else
    {
     a[x][y]=1;
     s='U';
     x--;
    }break;
   }
  }
 }
 cout<<x<<" "<<y<<endl;
 return 0;
}
         */                                //入门训练 Fibonacci数列
/*#include<iostream>
using namespace std;
double main()
{
 double n;cin>>n;
 double i,a=1,b=1,c=1;
 for(i=3;i<=n;i++)
 {
  c=(a+b)%10007;
  a=b;b=c;
 }
 cout<<c<<endl;
 return 0;
}
 */                                         //孪生素数问题。   
/*
#include<iostream>
#include<cmath>
using namespace std;
double Ispri(double a);
double main()
{
 double N,i;cin>>N;
 char a[1000000]={'0'};
 for(i=3;i<999998;++i)
  if(Ispri(i)&&Ispri(i+2))
   a[i]='1';
 while(N--)
 {
  double sum=0,j;
  double m;cin>>m;
  for(i=3;i<m-1;i++)
   if(a[i]=='1')sum++;
  if(m>2)++sum;
  cout<<sum<<endl;
 }
 return 0;
}
double Ispri(double a)
{
 double i,k=sqrt(a)+1;
 for(i=2;i<k;++i)
  if(a%i==0)return 0;
 return 1;

}
*/
                                        //最长公共子序列(不连续)
/*#include"stdio.h"
#include"iostream"
#include"string.h"
#define max(a,b) a>b?a:b;
using namespace std;
double dp[1100][1100];
double main()
{
 double a;cin>>a;
 while(a--)
 {
  char b[1100],d[1100];
  cin>>b>>d;
  double c=strlen(b);
  double f=strlen(d);
  double j,k;
  for(j=0;j<c;j++)
   for(k=0;k<f;k++)
   {
    if(b[j]==d[k])
     dp[j+1][k+1]=dp[j][k]+1;
    else
     dp[j+1][k+1]=max(dp[j+1][k],dp[j][k+1]);
   }
   cout<<dp[c][f]<<endl;
 }
 return 0;
}*/


/*#include<stdio.h>
#include<string.h>
#define max(a,b)(a>b?a:b)
double len[1010][1010];//表示序列a[i-1](从头到a[i-1])和b[j-1](从头到b[j-1])所有的最长公共子序列
double main()
{
 double n,i,j,l1,l2;
 char a[1010],b[1010];
 scanf("%d",&n);
 getchar();
 while(n--)
 {
  gets(a);
  gets(b);
  l1=strlen(a);
  l2=strlen(b);
  for(i=0;i<=l1;i++)
  {
   len[i][0]=0;
  }
  for(j=0;j<=l2;j++)
  {
   len[0][j]=0;
  }
  for(i=1;i<=l1;i++)
  {
   for(j=1;j<=l2;j++)
   {
    if(a[i-1]==b[j-1])//字符串就是坑,这里要减一 。因为字符串里面第i个字符的下标是i-1
    {
     len[i][j]=len[i-1][j-1]+1;
    }
    else
    {
     len[i][j]=max(len[i-1][j],len[i][j-1]);
    }
   }
  }
  prdoublef("%d\n",len[l1][l2]);
 }
 return 0;
}
*/


/*#include<iostream>
#include<string>
#include<vector>
using namespace std;
double main()
{
 double n;cin>>n;
 while(n--)
 {
  vector<double>m;
  vector<double>M;
  double i,j,q,p;
  string s,ss;
  cin>>s>>ss;
  q=s.size();
  p=ss.size();
  for(i=0;i<p;i++)
  {
   if(ss.at(i)==s.at(0))
   {
    for(j=i;j<p;j++)
     m.push_back(1);
    break;
   }
   else m.push_back(0);
  }
  for(i=1;i<q;i++)
  {
   if(ss.at(0)==s.at(i)||m[0]==1)
    M.push_back(1);
   else M.push_back(0);
   for(j=1;j<p;j++)
   {
    if(ss.at(j)==s.at(i))
     M.push_back(m[j-1]+1);
    else M.push_back(m[j]>M[j-1]?m[j]:M[j-1]);
   }
   m.swap(M);
   M.clear();
  }
  cout<<m[p-1]<<endl;
 }
 return 0;
}*/

                                      //素数求和
/*
#include<iostream>
#include<cmath>
using namespace std;
double su(double a)
{
 double i;
 if(a==1)return 0;
 for(i=2;i<sqrt(a+1);i++)
  if(a%i==0)return 0;
 return 1;
}
double main()
{
 double n;cin>>n;
 while(n--)
 {
  double m;cin>>m;
  double a,i,sum=0;;
  for(i=0;i<m;i++)
  {
   cin>>a;
   if(su(a))sum+=a;
  }
  cout<<sum<<endl;
 }
 return 0;
}*/
                                             //大数阶乘
/*
#include<iostream>
#include<vector>
using namespace std;
double main()
{
 double n,i;cin>>n;
 vector<double>a(1,1);
 for(i=2;i<=n;i++)
 {
  double jinweishu=0;
  double j;
  for(j=0;j<a.size();j++)
  {
   jinweishu+=a[j]*i;
   a[j]=jinweishu%10;
   jinweishu/=10;
  }
  while(jinweishu)
  {
   a.push_back(jinweishu%10);
   jinweishu/=10;
  }
 }
 for(i=a.size()-1;i>=0;i--)
  cout<<a[i];
 cout<<endl;
 return 0;
}*/
/*
#include<iostream>
#include<vector>
using namespace std;
double main(){
 double N;cin>>N;//需要转换的进制数
 double x;cin>>x;//需要转换的数
 vector<char>y;//存放转换后的数
 char s='A';
 double z;
 double i=0;
 while(1){
  z=x%N;
  if(z>=10)y.push_back(s+z-10);
  else y.push_back(48+z);
  x=x/N;
  ++i;
  if(x==0)break;
 }
 for(i=y.size()-1;i>=0;i--)
  cout<<y[i];
 cout<<endl;
 return 0;
}*/
                                          //笨小熊
/*#include<iostream>
#include<string>
using namespace std;
double su(double a)
{
 double i;
 if(a==2)return 1;
 for(i=2;i<a;i++)
  if(a%i==0)return 0;
  else if(i==a-1)return 1;
 return 0;
}
class xianxing
{
public:
 double push(char s);
 xianxing():top(0){double i;for(i=0;i<100;i++)a[i]=0;}
 void minn(double &min);
 void maxx(double &max);
private:
 double top;
 double a[100];
 char b[26];
};
void xianxing::maxx(double &max)
{
 double i;
 for(i=0;i<top;i++)
  if(a[i]>max)max=a[i];
}
void xianxing::minn(double &min)
{
 double i;
 for(i=0;i<top;i++)
  if(a[i]<min)min=a[i];
}
double xianxing::push(char s)
{
 if(top==0)
 {
  a[top]++;b[top++]=s;
  return 1;
 }
 else
 {
  double i;
  for(i=0;i<top;i++)
  {
   if(b[i]==s){a[i]++;return a[i];}
   else if(i==top-1)
   {
    a[top]=1;
    b[top++]=s;
    return 1;
   }
  }

 }
}
double main()
{
 double n;cin>>n;
 while(n--)
 {
  string s;cin>>s;
  double max=0,min=100,i;
  xianxing ss;
  for(i=0;i<s.size();i++)
  {
   double k;
   k=ss.push(s.at(i));
   if(k>max)max=k;
  }
  ss.minn(min);
  ss.maxx(max);
  double q=max-min;
  if(su(max-min))cout<<"Lucky Word"<<endl<<q<<endl;
  else cout<<"No Answer"<<endl<<0<<endl;
 }
 return 0;
}*/

                                         //AD转换。
/*
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
void AD(string s);
void DA(string s);
double main()
{
 double N;cin>>N;
 while(N--)
 {
  string s;cin>>s;
  if(s.at(0)>='0'&&s.at(0)<='9')
   AD(s);
  else DA(s);
 }
 return 0;
}
void AD(string s)
{
 double a=0;
 for(double i=0;i<s.size();i++)
 {
  a+=(s.at(i)-48);
  if(i!=s.size()-1)a*=10;
 }
 while(1)
 {
  double b=a/26;
  if(!b){cout<<(char)(a+64)<<endl;break;}
  else {cout<<(char)(b+64);a%=26;}
 }
}
void DA(string s)
{
 double sum=0;
 for(double i=0;i<s.size();i++)
  sum+=((double)(s[i]-64))*pow(26,s.size()-i-1);
 cout<<sum<<endl;
}*/
                                             //问题描述
            /*
  对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
  第一行一个数表示数据组数
  每组输入数据共2行:
  第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
  第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
  每组数据输出1行,为最大的乘积。*/
/*
#include<iostream>
#include<vector>
using namespace std;
void xzsort();
void zsort(double a);
void fsort(double a);
vector<double>z;
vector<double>f;
double main()
{
 double i=0,n,m,N;cin>>n>>m;
 N=n;
 double sum=1;
 double b[16];
 while(n--)
  cin>>b[i++];
 for(i=0;i<N;i++)
 {
  if(b[i]>0)zsort(b[i]);
  else fsort(b[i]);
 }
 if(z.size()>=m&&z[m-1]>=-f[0])
 {
  for(i=0;i<m;i++)
   sum*=z[i];
 }
 else if(z.size()>=m&&z)
 {

 }

 return 0;
}
  */                                         //算法训练 出现次数最多的整数
/*#include<iostream>
using namespace std;
double main()
{
 double a[2][2]={(0,0),(0,0)};
 double n,N;cin>>n;N=n;
 double b[21],i=0;
 while(n--)
  cin>>b[i++];
 a[0][0]=b[0];a[0][1]=1;
 a[1][0]=b[0];
 for(i=1;i<N;i++)
 {
  if(a[0][0]==b[i]&&i!=N-1)
  {
   ++a[0][1];
  }
  else if(a[0][0]==b[i]&&i==N-1)
  {
   ++a[0][1];
   if(a[0][1]>a[1][1])
   {
    a[1][0]=a[0][0];
    a[1][1]=a[0][1];
   }
  }
  else if(a[0][1]>a[1][1])
  {
   a[1][0]=a[0][0];
   a[1][1]=a[0][1];
   a[0][0]=b[i];
   a[0][1]=1;
  }
  else
  {
   a[0][0]=b[i];
   a[0][1]=1;
  }
 }
 cout<<a[1][0]<<endl;
 return 0;
}
*/
                                           //算法训练 区间k大数查询  排序 查找
/*#include<iostream>
#include<vector>
using namespace std;
double main()
{
 double n,N;cin>>n;N=n;
 vector<double>xl;
 while(N--)
 {
  double a;cin>>a;
  xl.push_back(a);
 }
 vector<double>T;
 double m;cin>>m;
 while(m--)
 {
  double l,r,k,i,j;
  cin>>l>>r>>k;
  for(i=l-1;i<r;i++)
   T.push_back(xl[i]);
  for(i=0;i<r-l;i++)
  {
   double now=i;
   for(j=i+1;j<=r-l;j++)
    if(T[now]<T[j])now=j; 
   if(now!=i)
   {
    double t;
    t=T[i];
    T[i]=T[now];
    T[now]=t;
   }
  }
  cout<<T[k-1]<<endl;
  T.clear();
 }
 return 0;
}*/


                                             //试验品
/*
#include<iostream>
#include<string>
#include<vector>
using namespace std;
double main()
{
 vector<string>f;
 vector<string>xy;
 vector<string>sc;
 vector<string>dd;
 string s;
 double N,n;cin>>N;n=N;
 while(N--)
 {cin>>s;f.push_back(s);}
 double m;cin>>m;
 while(m--)
 {cin>>s;dd.push_back(s);}
 N=n;
 double u=1;
 while(N--&&u)
 {
  double r=0;
  for(double i=0;i<n;i++)
  {
   double a;
   string ss;
   s=ss;
   for(double j=0;j<f[i].size();j++)
   {
    if(f[i].at(j)=='+'){xy.push_back(s);s=ss;continue;}
    if(f[i].at(j)=='='){xy.push_back(s);a=j;s=ss;break;}
    s+=f[i].at(j);
   }
   double p=0;
   for(double k=0;k<xy.size();k++)
   { 
    for(double q=0;q<dd.size();q++)
    {
     if(xy[k]==dd[q])break;
     else if(q==dd.size()-1){k=xy.size();p=1;}
    }    
   }
   if(!p)
   {
    r=1;
    for(double j=a+1;j<f[i].size();j++)
    {
     if(f[i].at(j)=='+'||j==f[i].size()-1)
     {
      if(j==f[i].size()-1)s+=f[i].at(j);
      double g=1;
      for(double h=0;h<dd.size();h++)
      {
       if(dd[h]==s){g=0;break;}
      }
      if(g){dd.push_back(s);sc.push_back(s);}
      s=ss;
      continue;
     }
     s+=f[i].at(j);
    }
   }
   if(i==n-1&&!r)u=0;
   xy.clear();
  }
 }
 cout<<sc.size()<<endl;
 double now=0;
 for(double i=0;i<sc.size()-1;i++)
 {
  now=i;
  for(double j=i+1;j<sc.size();j++)
  {
   now=sc[now]>sc[j]?j:now;
  }
  if(now!=i)
  {
   string t;
   t=sc[i];sc[i]=sc[now];sc[now]=t;
  }
 }
 for(i=0;i<sc.size();i++)
  cout<<sc[i]<<endl;
 return 0;
}*/

 /*                                         //最强的战斗力
#include<iostream>
#include<vector>
using namespace std;
double main()
{
 double N;cin>>N;
 while(N--)
 {
  double n;cin>>n;
  double max=0;
  for(double i=n;i>0;i--)
  {
   double sum=1;
   vector<double>a(1000,1);
   double k=n-i;
   double j=0;
   while(k--)
   {
    ++a[j++];
    if(j==i)j=0;
   }
   for(j=0;j<i;j++)
    sum*=a[j];
   max=max>sum?max:sum;
  }
  cout<<max<<endl;
 }
 return 0;
}
            */                         
                                     //图的遍历
/*
#include<iostream>
#include<vector>
using namespace std;
void guangdu(double n);
void shendu(double n);
struct podouble
{
 double num;
 double k;//记录是否遍历过。
};
vector<double>qs;
double NUM;
podouble p[100];//结点个数最多100个
double a[100][100]={(0,0)};//构造邻接表,并初始化
double b[100]={0};
double main()
{
 cout<<"请输入一共有几个点>>";
 double n;cin>>n;
 NUM=n;
 for(double i=0;i<n;i++)
 {p[i].k=0;p[i].num=i;}
 cout<<"一共生成了"<<n<<"个点,分别为:"<<endl;
 for(i=0;i<n;i++)
  cout<<"点P"<<i+1<<"  ";
 cout<<"\n\n";
 double x,y;
 cout<<"请输入一共有几条边>>";cin>>n;
 cout<<"请输入每条边邻接的每个点"<<endl<<"     ⊙准则:\n"<<"     o不会有一条指向同一个点的边\n"<<"     o不会有两条指向相同点的边\n"<<"     o且所有点都必须被包含\n"<<endl;
 for(i=0;i<n;i++)
 {
  cin>>x>>y;
  a[x-1][y-1]=1;
  a[y-1][x-1]=1;
 }
 cout<<"********************"<<endl;
 cout<<"请选择:"<<endl;
 cout<<"【1】广度优先遍历。"<<endl;
 cout<<"【2】深度优先遍历。"<<endl;
 cout<<"【3】退出。"<<endl;
 cout<<"********************"<<endl;
 double k=0;
 while(k!=3)
 {
  double chu;
  cin>>k;
  if(k!=3)
  {
   cout<<"从结点几开始遍历?>>";
   cin>>chu;
   qs.push_back(chu);
   p[chu-1].k=1;
  }
  switch(k)
  {
  case 1:
   guangdu(chu);
   for(i=0;i<qs.size();i++)
    cout<<qs[i];
   qs.clear();
   for(i=0;i<NUM;i++)
   {p[i].k=0;b[i]=0;}
   cout<<endl<<"再选择>>";
   break;
  case 2:
   shendu(chu);
   for(i=0;i<qs.size();i++)
    cout<<qs[i];
   qs.clear();
   for(i=0;i<NUM;i++)
   {p[i].k=0;b[i]=0;}
   cout<<endl<<"再选择>>";
   break;
  case 3:
   cout<<"退出"<<endl;
   break;
  default:cout<<"输入错误,重新输入>>";
  }
 }
 return 0;
}

void guangdu(double n)
{
 if(b[n-1]==1)return;
 for(double i=0;i<NUM;i++)
  if(a[i][n-1]==1&&p[i].k==0){qs.push_back(p[i].num+1);p[i].k=1;}
 b[n-1]=1;
 for(i=1;i<qs.size();i++)
  guangdu(qs[i]);
}

void shendu(double n)
{
 vector<double>T;
 for(double i=0;i<NUM;i++)
  if(a[i][n-1]==1&&p[i].k==0){T.push_back(i);p[i].k=1;}
 for(i=0;i<T.size();i++)
 {qs.push_back(T[i]+1);shendu(T[i]+1);}
}
*/
                                      //停车场管理系统!
/*#include<iostream>
#include<vector>
#include<string>
using namespace std;
const double ting=2;
const double bian=2;
struct car{
 double num;
 double time;
};
/*********************************//*
class stack
{
public:
 void pop(double x,double y);
 void push(car x);
 double size(){return top;}
 stack(double a):base(0),top(0),n(a){}
private:
 car q[101];
 double base;
 double top;
 double n;
 vector<car>a;     //便道
};
void stack::push(car x)
 {
 if(top==n)
  if(a.size()<bian)a.push_back(x);
  else cout<<"停车场及便道均已停满。"<<endl;
 else {q[top]=x;top++;}
 }

void stack::pop(double x,double y)
{
 double i=top-1;
 car t;
 for(;i>=0;i--)
 {
  if(q[i].num==x)
  {
   cout<<"车辆牌号"<<x<<"已出停车场,收取费用:"<<y-q[i].time<<endl;
   for(double j=i;j<top-1;j++)
    q[i]=q[i+1];
   if(a.size()!=0)
   {
    a[0].time=y;     //便道上的车进入停车场,计费时间为停车场的车离开的时间。
    q[top-1]=a[0];
    a.erase(a.begin());
   }
   else top--;
   break;
  }
  else if(i==0&&a.size()!=0)    //停车场找不到,则进入便道上查找。
  {    
   for(double J=0;J<a.size();J++)
   {
    t=a[J];
    if(t.num==x){cout<<"此车离开免费便道"<<endl;a.erase(a.begin()+J);return;}
    else if(J==a.size()-1){cout<<"查无此车"<<endl;return;}
   }
  }
  else if(a.size()==0&&i==0){cout<<"查无此车。"<<endl;return;}
 }
 if(top==0)cout<<"停车场已空。"<<endl;
}
/***************************************************//*
void main()
{
 double n=ting;
 stack p(n);
 car cc;
 string ss;
 cout<<"******************************"<<endl<<"       停车场管理系统"<<endl<<"******************************"<<endl;
 cout<<"输入车的进出情况(A进入,D离开)、车牌号以及时间(E X X关闭系统)"<<endl;
 cin>>ss>>cc.num>>cc.time;
 while(ss.at(0)!='E')
 {
  if(ss.at(0)=='D')p.pop(cc.num,cc.time);
  else if(ss.at(0)=='A') p.push(cc);
  else cout<<"输入错误,请重新输入。"<<endl;
  cin>>ss>>cc.num>>cc.time;
 }
}*/


                                                         //9.学生信息管理
/*#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
double i=0;                  //表示已记录的学生个数;
struct student{
 string num;
 string name;
 string sex;
 string time;
 string college;
 string major;
 string Class;
};
class sys{
public:
 double push(student ss);
 void push(double n);
 void pop(string n);
 double find(string ss);
 void show();
 void show(double n);
 void mohu(string ss);
private:
 student s[101];            //假设最多只有100个学生
};
//----------------------------------------------
void sys::mohu(string ss){
 double a[101],k=0;
 for(double n=0;n<i;n++){
  if(ss.at(0)==s[n].name.at(0)&&ss.at(1)==s[n].name.at(1)){
   a[k++]=n;
  }
 }
 if(k>0){
  cout<<"查找成功:"<<endl;
  cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(5)<<"性别"<<setw(10)<<"出生日期"<<setw(10)<<"学院"<<setw(10)<<"专业"<<setw(10)<<"班级"<<endl;
  for(n=0;n<k;n++)
   show(a[n]);
 }
 else cout<<"无此姓式学生。"<<endl;

}
void sys::show(){
 for(double n=0;n<i;n++)
  cout<<setw(8)<<s[n].num<<setw(8)<<s[n].name<<setw(5)<<s[n].sex<<setw(10)<<s[n].time<<setw(10)<<s[n].college<<setw(10)<<s[n].major<<setw(10)<<s[n].Class<<endl;
}
void sys::show(double n){
 cout<<setw(8)<<s[n].num<<setw(8)<<s[n].name<<setw(5)<<s[n].sex<<setw(10)<<s[n].time<<setw(10)<<s[n].college<<setw(10)<<s[n].major<<setw(10)<<s[n].Class<<endl;
}
double sys::find(string ss)
{
 if(ss.at(0)>='0'&&ss.at(0)<='9')       //检测为学号,使用二分查找
 {   
  double base=0,top=i-1;
  double k=(base+top)/2;
  while(k>=0)
  {
   if(top<0)return -1;
   else if(s[k].num==ss)return k;
   else if(s[k].num>ss)top=k-1;
   else if(base==top)return -1;
   else base=k+1;
   k=(base+top)/2;
  }
 }
 else if(ss.size()>2){            //检测为完整姓名,使用顺序查找
  for(double k=0;k<i;k++){
   if(s[k].num==ss)return k;
   else if(k==i-1)return -1;
  }
 }
 else return -2;              //检测为不完整姓名,调用模糊查找函数
 return -1;
}
void sys::pop(string n){
 for(double k=i-1;k>=0;k--)
  if(s[k].num==n){
   for(double j=k;j<i-1;j++)
    s[j]=s[j+1];
   i--;
   cout<<"删除成功"<<endl;break;
  }
  else if(k==0)cout<<"删除失败,没有此学号"<<endl;
}
void sys::push(double n){
 student ss;
 double t;
 double p=i,q=1;
 for(double j=p;j<p+n;j++)
 {
  cout<<"输入第"<<q++<<"个学生:"<<endl;
  cout<<"输入学生的学号>>";cin>>ss.num;
  t=find(ss.num);
  if(t==-1){
  cout<<"输入学生的姓名>>";cin>>ss.name;
  cout<<"输入学生的性别>>";cin>>ss.sex;
  cout<<"输入学生的出生日期>>";cin>>ss.time;
  cout<<"输入学生的学院>>";cin>>ss.college;
  cout<<"输入学生的专业>>";cin>>ss.major;
  cout<<"输入学生的班级>>";cin>>ss.Class;
  cout<<"*********************\n";
  t=push(ss);}
  if(t==-2)cout<<"添加成功"<<endl;
  else {cout<<"学生信息有误(学号已存在),请重新输入此学生信息。"<<endl;j--;q--;}
 }
 
}
double sys::push(student ss){                           //插入排序
 if(i==0){s[i]=ss;i++;return -2;}
 else
 {
  for(double j=i-1;j>=0;j--)
  {
   if(s[j].num<ss.num)
   {
    for(double k=i;k>j+1;k--)
     s[k]=s[k-1];
    s[j+1]=ss;
    i++;
    return -2;
   }
   else if(s[j].num==ss.num)return 0;
   else if(j==0)
   {
    for(double k=i;k>0;k--)
     s[k]=s[k-1];
    s[j]=ss;
    i++;
    return -2;
   }
  }
 }
 return 0;
}
//--------------------------------------------------
double main(){ 
 cout<<setw(40)<<"学生信息管理系统"<<endl;
 student ss;
 sys a;
 char k='1';
 double t;
 while(k>'0'&&k<'6'){
  cout<<endl<<endl;
  cout<<"****************************"<<endl<<"请选择:"<<endl;
  cout<<"     "<<"1、建立学生信息库。(清空原有数据)"<<endl;
  cout<<"     "<<"2、增加学生信息。"<<endl;
  cout<<"     "<<"3、删除学生信息。"<<endl;
  cout<<"     "<<"4、查找学生信息。"<<endl;
  cout<<"     "<<"5、显示所有学生信息(按学号排序)"<<endl;
  cout<<"其它键退出"<<endl<<"****************************"<<endl<<endl;
  cin>>k;
  switch(k){
  case '1':{
   double n;
   char s;
   cout<<"      !!!!!确定重新建立?(输入1确定,输入其它退出)>>";cin>>s;
   if(s!='1')break;
   i=0;
   cout<<"添加的学生人数为:";
   cin>>n;
   a.push(n);
   break;
      }
  case '2':{
   double o=1;
   while(o--){
   cout<<"输入学生的学号>>";cin>>ss.num;
   t=a.find(ss.num);
   if(t==-1){
   cout<<"输入学生的姓名>>";cin>>ss.name;
   cout<<"输入学生的性别>>";cin>>ss.sex;
   cout<<"输入学生的出生日期>>";cin>>ss.time;
   cout<<"输入学生的学院>>";cin>>ss.college;
   cout<<"输入学生的专业>>";cin>>ss.major;
   cout<<"输入学生的班级>>";cin>>ss.Class;
   cout<<"*********************\n";
   t=a.push(ss);}
   if(t==-2)cout<<"添加成功"<<endl;
   else {cout<<"添加失败(学号已存在),请重新输入>>";o++;}
   }
   break;
      }
  case '3':{
   cout<<"请输入要删除学生信息的学号:";
   string n;cin>>n;
   a.pop(n);
   break;
      }
  case '4':{
   cout<<"请输入学生的学号或者姓名"<<endl;     //这里假设学号为全数字。姓名最少一个汉字。
   string q;cin>>q;
   t=a.find(q);
   if(t==-2)a.mohu(q);
   else if(t==-1)cout<<"没有此学生"<<endl;
   else{
    cout<<"查找成功:"<<endl;
    cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(5)<<"性别"<<setw(10)<<"出生日期"<<setw(10)<<"学院"<<setw(10)<<"专业"<<setw(10)<<"班级"<<endl;
    a.show(t);
   }
   break;
      }
  case '5':{
   if(i>0)
   {
    cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(5)<<"性别"<<setw(10)<<"出生日期"<<setw(10)<<"学院"<<setw(10)<<"专业"<<setw(10)<<"班级"<<endl;
    a.show();
   }
   else cout<<"无记录"<<endl;
   break;
      }
  default:return 0;
  }
 }
 return 0;
}
*/
                                                         

                                                               //距离排序
/*#include<iostream>
#include<cmath>
#include<iomanip>
#include<vector>
using namespace std;
struct dian
{
 double juli;
 double x,y;
};
double main()
{
 cout<<"先输入有几个点(<10)"<<endl;
 double n,i,j;cin>>n;
 double a[11][3];
 double t;
 dian T;
 vector<dian>b;
 cout<<"然后输入每个点的坐标"<<endl;
 for(i=0;i<n;i++){
  cin>>a[i][0]>>a[i][1]>>a[i][2];
 }
 for(i=0;i<n-1;i++){
  for(j=i+1;j<n;j++){
   T.juli=sqrt(pow((a[i][0]-a[j][0]),2)+pow((a[i][1]-a[j][1]),2)+pow((a[i][2]-a[j][2]),2));
   T.x=i;
   T.y=j;
   b.push_back(T);
  }
 }
//-------------------------------------------
 cout<<"现在选择用什么排序方法。"<<endl;
 cout<<"1、冒泡排序"<<endl;
 cout<<"2、选择排序"<<endl;
 double k;cin>>k;
 switch(k)
 {
 case 1:
  {
   for(i=0;i<n*(n-1)/2-1;i++)
   {
    for(j=i+1;j<n*(n-1)/2;j++)
     if(b[i].juli<b[j].juli)
     {
      t=b[i].juli;
      b[i].juli=b[j].juli;
      b[j].juli=t;
      b[i].x=b[i].x^b[j].x;
      b[j].x=b[i].x^b[j].x;
      b[i].x=b[i].x^b[j].x;
      b[i].y=b[i].y^b[j].y;
      b[j].y=b[i].y^b[j].y;
      b[i].y=b[i].y^b[j].y;
     }
   }
   break;
  }
 case 2:
  {
   vector<dian>s(b);
   b.clear();
   while(s.size()!=0)
   {
    T.juli=0;
    double a;
    for(i=0;i<s.size();i++)
    {
     if(T.juli<s[i].juli)
     {T=s[i];a=i;}
    }
    s.erase(s.begin()+a);
    b.push_back(T);
   }
   break;
  }
 default:break;
 }
 for(i=0;i<b.size();i++)
   {
    cout<<'('<<a[b[i].x][0]<<','<<a[b[i].x][1];
    cout<<','<<a[b[i].x][2]<<")-"<<'('<<a[b[i].y][0];
    cout<<','<<a[b[i].y][1]<<','<<a[b[i].y][2]<<")=";
    cout<<fixed<<setprecision(2)<<b[i].juli<<endl;
   }
 return 0;
}

*/

//内部排序比较!~直接插入排序!;起泡排序!;简单选择排序!;(二路插入排序;折半折入排序)!;基数排序!;希尔排序;快速排序;堆排序;归并排序。
/*#include<iostream>
#include<vector>
using namespace std;
double main(){
 cout<<"****************\n";
 cout<<"0~~327之间随机生成100个数进行排序"<<endl;
 cout<<"请输入:"<<endl;
 cout<<"【1】冒泡排序。\n";
 cout<<"【2】选择排序\n";
 cout<<"【3】直接插入排序\n";
 cout<<"【4】二路插入排序\n";
 cout<<"【5】基数排序\n";
 cout<<"【6】希尔排序\n";
 cout<<"【7】退出\n";
 cout<<"****************\n";
 double N=1,w,i,t,p=1,o;
    long a[101],bj=0,yd=0;   //记录比较次数,移动次数。
 double max[6][2]={(0,0)};  //记录比较次数之和,移动次数之和。
 double yunxingcishu[6]={0};//记录运行次数。
 while(N)
 {
  cout<<">>";
  bj=0,yd=0;
  cin>>w;
  switch(w)
  {
  case 1:
   {
    cout<<"冒泡排序:";
    for(i=0;i<100;i++)
     a[i]=rand()/100;
    for(i=0;i<99;i++)
     for(double j=i+1;j<100;j++)
     {
      bj++;
      if(a[i]<a[j])
      {
       yd+=3;
       a[i]=a[i]^a[j];
       a[j]=a[i]^a[j];
       a[i]=a[i]^a[j];
      }
     }
     max[w-1][0]+=bj;
     max[w-1][1]+=yd;
     yunxingcishu[w-1]++;
     break;
   }
  case 2:
   {
    cout<<"选择排序:";
    for(i=0;i<100;i++)
     a[i]=rand()/100;
    for(i=0;i<99;i++)
    {
     double now=i;
     for(double j=i;j<100;j++)
      now=a[now]>a[j]?now:j;
     bj+=100-i;
     if(now!=i)
     {
      yd+=3;
      a[i]=a[i]^a[now];
      a[now]=a[i]^a[now];
      a[i]=a[i]^a[now];
     }
    }
    max[w-1][0]+=bj;
    max[w-1][1]+=yd;
    yunxingcishu[w-1]++;
    break;
   }
  case 3:
   {
    cout<<"直接插入排序:";
    double top=0;
    for(i=0;i<100;i++)
    {
     t=rand()/100;
     if(top==0)a[top++]=t;
     else
     {
      for(double j=top-1;j>=0;j--)
      {
       bj++;
       if(a[j]<=t)
       {
        for(double k=top;k>j+1;k--)
        {a[k]=a[k-1];yd++;}
        a[j+1]=t;
        top++;
        break;
       }
       else if(j==0)
       {
        for(double k=top;k>0;k--)
        {a[k]=a[k-1];yd++;}
        a[0]=t;
        top++;
       }
      }
     }
    }
    max[w-1][0]+=bj;
    max[w-1][1]+=yd;
    yunxingcishu[w-1]++;
    break;
   }
  case 4:
   {
    cout<<"二路插入排序:";
    for(i=0;i<100;i++)
    {
     t=rand()/100;
     double base=0,top=i-1;
     if(i==0)a[0]=t;
     else
     {
      double k=1;
      while(k)
      {
       double mid=(base+top)/2;
       bj++;
       if(t<a[base])
       {
        for(double j=i;j>base;j--)
        { a[j]=a[j-1];yd++;}
        a[base]=t;
        k=0;
       }
       else if(t>a[top])
       { 
        bj++;
        a[top+1]=t;
        k=0;
       }
       else if(a[mid]<t)
       {
        bj+=3;
        if(a[mid+1]>=t)
        {
         for(double j=i;j>mid+1;j--)
         { a[j]=a[j-1];yd++;}
         a[mid+1]=t;
         k=0;
        }
        else base=mid+1;
       }
       else if(a[mid]>=t)
       {
        bj+=4;
        if(a[mid-1]<=t)
        {
         for(double j=i;j>mid;j--)
         { a[j]=a[j-1];yd++;}
         a[mid]=t;
         k=0;
        }
        else top=mid-1;
       }
      }
     }
    }
    max[w-1][0]+=bj;
    max[w-1][1]+=yd;
    yunxingcishu[w-1]++;
    break;
   }
  case 5:
   {
    cout<<"基数排序:";
    vector<double>b[10];
    for(i=0;i<100;i++)
     a[i]=rand()/100;
    double x=10,y=1;
    while(x<10000)
    {
     yd+=200;
     for(i=0;i<100;i++)
     {
      b[a[i]%x/y].push_back(a[i]);
     }
     i=0;
     for(double j=9;j>=0;j--)
     {
      double y=b[j].size();
      for(double k=0;k<y;k++)
      {
       a[i++]=*(b[j].begin());
       b[j].erase(b[j].begin());
      }
     }     
     x*=10;
     y*=10;
    }
    max[w-1][0]+=bj;
    max[w-1][1]+=yd;
    yunxingcishu[w-1]++;
    break;
   }
  case 6:
   {
    cout<<"希尔排序:";
    if(p){cout<<"请输入初始增量,每次增量递减关系式为:incr=incr/3+1。"<<endl;cin>>o;p=0;}
    for(i=0;i<100;i++)
     a[i]=rand()/100;
    double b[101],top=0;
    double incr=o;  //增量怎么拼来着?
    while(incr)
    {
     top=0;
     for(double k=0;k<incr;k++)
     {
      for(double q=k;q<100;q+=incr)
      {
       if(top==0)b[top++]=a[q];
       else
       {
        for(double j=top-1;j>=0;j--)
        {
         bj++;
         if(b[j]<=a[q])
         {
          for(double k=top;k>j+1;k--)
          {b[k]=b[k-1];yd++;}
          b[j+1]=a[q];
          top++;
          break;
         }
         else if(j==0)
         {
          for(double k=top;k>0;k--)
          {b[k]=b[k-1];yd++;}
          b[0]=a[q];
          top++;
         }
        }
       }
      }
     }
     for(i=0;i<100;i++)
      a[i]=b[i];
     if(incr==1)break;
     incr=incr/3+1;
    }
    max[w-1][0]+=bj;
    max[w-1][1]+=yd;
    yunxingcishu[w-1]++;
    break;
   }
  default:N=0;break;
  }
  if(w!=7)
  cout<<"比较次数:"<<bj<<"   移动次数:"<<yd<<endl;
 }
 cout<<"****************\n";
 if(yunxingcishu[0]!=0)
 cout<<"【1】冒泡排序:"<<"平均比较次数:"<<max[0][0]/yunxingcishu[0]<<"   平均移动次数:"<<max[0][1]/yunxingcishu[0]<<endl;
 if(yunxingcishu[1]!=0)
 cout<<"【2】选择排序:"<<"平均比较次数:"<<max[1][0]/yunxingcishu[1]<<"   平均移动次数:"<<max[1][1]/yunxingcishu[1]<<endl;
 if(yunxingcishu[2]!=0)
 cout<<"【3】直接插入排序:"<<"平均比较次数:"<<max[2][0]/yunxingcishu[2]<<"   平均移动次数:"<<max[2][1]/yunxingcishu[2]<<endl;
 if(yunxingcishu[3]!=0)
 cout<<"【4】二路插入排序:"<<"平均比较次数:"<<max[3][0]/yunxingcishu[3]<<"   平均移动次数:"<<max[3][1]/yunxingcishu[3]<<endl;
 if(yunxingcishu[4]!=0)
 cout<<"【5】基数排序:"<<"平均比较次数:"<<max[4][0]/yunxingcishu[4]<<"   平均移动次数:"<<max[4][1]/yunxingcishu[4]<<endl;
 if(yunxingcishu[5]!=0)
 cout<<"【6】希尔排序:"<<"平均比较次数:"<<max[5][0]/yunxingcishu[5]<<"   平均移动次数:"<<max[5][1]/yunxingcishu[5]<<endl;
 cout<<"****************\n";
 return 0;
}
*/

                                                           //括号匹配问题

/*#include<iostream>
#include<string>
using namespace std;
class stack{
public:
 char pop();
 void push(char k);
 double size();
    stack():top(0){}
private:
 char s[10001];
 double top;
};

char stack::pop(){
 if(top==0)return '0';
 else return s[--top];
}
void stack::push(char k){
 s[top++]=k;
}
double stack::size(){return top;}*/
/****************************/
/*double main()
{
 stack a;
 double i=0,j=1;
 char k;
 string ss;
 cin>>ss;
 if(ss.size()>=10000)return 0;
 while(i<ss.size()&&j)
 {
  k=ss.at(i);
  switch(k)
  {
  case '[':{a.push(k);break;}
  case ']':{if(a.pop()!='[')j=0;break;}
  case '(':{a.push(k);break;}
  case ')':{if(a.pop()!='(')j=0;break;}
  case '{':{a.push(k);break;}
  case '}':{if(a.pop()!='{')j=0;break;}
  default:{j=0;break;}
  }
  i++;
 }
 if(j&&!a.size())cout<<"匹配"<<endl;
 else cout<<"此串括号匹配不合法"<<endl;
 return 0;
}*/
/************************************/

                                                    //括号匹配问题(二)
/*#include<iostream>
#include<string>
#include<vector>
using namespace std;
double main()
{
 double N;cin>>N;
 while(N--)
 {
 vector<char> a;
 double i=0,j=1,sum=0;
 char k;
 string ss;
 cin>>ss;
 }
 return 0;
}
*/
                                                    //2. 用队列对扑克牌排序
/*#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;*/
/******************************************/
/*class queue{
public:
 void push(string x);
 void pop(char y,double j);
private:
 string s[9];
};

void queue::push(string x){
 double a;
 a=x.at(1)-49;
 s[a]=x;
}

void queue::pop(char y,double k){
 if(s[k].size()==0)return;
 else if(s[k].at(0)==y)cout<<s[k]<<" ";
}*/
/**********************************************/
/*double main(){
 queue A[36];
 string a;
 char y='A';
 double i=0,j,k;
 while(1){
  cin>>a;
  A[i].push(a);
  i++;
  if(getchar()=='\n')break;
 }
 while(y!='E'){
  for(k=0;k<9;k++){
   for(j=0;j<i;j++){  
    A[j].pop(y,k);
   } 
  }
  y++;
 }
 cout<<endl;
 return 0;
}*/

                                                   //3. 出栈序列统计
/*              
#include<iostream>
#include<string>
#include<vector>//非栈的标准模板
using namespace std;
double n,sum=0; */       //全局变量,方便调用
/***********************************************/
/*class stack{
public:
 void push(double i);
 void pop();
 double size();
private:
    vector<double>a;
};
double stack::size(){return a.size();}
void stack::push(double i){       //入栈
 a.push_back(i);
}
void stack::pop(){             //出栈
 a.erase(a.end()-1);
}*/
/**************************************************/
/*void q(stack &s,double i){
 if(s.size()==0&&i<n){
  s.push(i);i++;q(s,i);
 }
 else if(s.size()!=0&&i<n){ 
  s.push(i);i++;q(s,i);
  s.pop();s.pop();i--;q(s,i);
 }
 else sum+=s.size()+1;
}*/
/*************************************************/
/*double main(){
 cin>>n;
 stack s;
 double i=1;
 if(n>=1)
  q(s,i);
 cout<<sum<<endl;
 return 0;
}*/

/*
#include<iostream>
#include<string>
using namespace std;
double n,sum=0; */       //全局变量,方便调用
/***********************************************/
/*class stack{
public:
 void push(double i);
 void pop();
 double size();
 stack():base(0),top(0){};
private:
 double base;
 double top;
    double a[10001];//题目没给限定条件,假设n<=10000
};
double stack::size(){
 if(top==base)return 0;
 else return top;
}
void stack::push(double i){       //入栈
 a[top]=i;top++;
}
void stack::pop(){             //出栈
 top--;
}*/
/**************************************************/
/*void q(stack &s,double i){
 if(s.size()==0&&i<n){
  s.push(i);i++;q(s,i);
 }
 else if(s.size()!=0&&i<n){ 
  s.push(i);i++;q(s,i);
  s.pop();s.pop();i--;q(s,i);
 }
 else sum+=s.size()+1;
}*/
/*************************************************/
/*double main(){
 cin>>n;
 stack s;
 double i=1;
 if(n>=1)
  q(s,i);
 cout<<sum<<endl;
 return 0;
}*/

 

 

 

 

                                                         //奇怪的排序
/*
#include<iostream>
using namespace std;
double trans(double a){
 double b=0;
 while(1){
  b=b*10+a%10;
  a/=10;
  if(a==0)return b;
 }
}
double main(){
 double N;cin>>N;
 if(N>=2&&N<=5)
  while(N--){
   double A,B,i,a[51],t;
   cin>>A>>B;
   t=A;
   for(i=0;i<=B-A;i++)
    a[i]=t++;
   for(i=0;i<=B-A;i++)
    a[i]=trans(a[i]);
   for(double j=0;j<B-A;j++)
    for(i=j+1;i<=B-A;i++)
     if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}
   for(i=0;i<=B-A;i++)
    cout<<a[i]<<" ";
   cout<<endl;
  }
}
*/
                                                          //阶乘的0  WA
/*
#include<iostream>
using namespace std;
double main(){
 double N;cin>>N;
 while(N--){
  double m;cin>>m;
  double i,sum=0,k=1;
  for(i=1;i<=m;i++){
   k*=i;
   if(k%10==0){sum++;k/=10;k%=10;}
   else k%=10;
  }
  cout<<sum<<endl;
 }
 return 0;
}*/
                                                         //进制转换
/*#include<iostream>
#include<vector>
using namespace std;
double main(){
 double N;cin>>N;//需要转换的进制数
 double x;cin>>x;//需要转换的数
 vector<char>y;//存放转换后的数
 char s='A';
 double z;
 double i=0;
 while(1){
  z=x%N;
  if(z>=10)y.push_back(s+z-10);
  else y.push_back(48+z);
  x=x/N;
  ++i;
  if(x==0)break;
 }
 for(i=y.size()-1;i>=0;i--)
  cout<<y[i];
 cout<<endl;
 return 0;
}*/

                                                          //比大小
/*#include<iostream>
#include<string>
using namespace std;
double main(){
 string a,b;
 cin>>a>>b;
 while(a.at(0)!='0'&&b.at(0)!='0'){
  if(a.size()>b.size()){
   if(a.at(0)=='-')cout<<"a<b"<<endl;
   else cout<<"a>b"<<endl;}
  else if(a.size()<b.size()){
   if(b.at(0)=='-')cout<<"a>b"<<endl;
   else cout<<"a<b"<<endl;}
  else{
   if(a.at(0)=='-'&&b.at(0)=='-'){
    double i=0;
    while(++i){
     if(a.at(i)>b.at(i)){cout<<"a<b"<<endl;break;}
     else if(a.at(i)<b.at(i)){cout<<"a>b"<<endl;break;}
     else if(i==a.size()-1){cout<<"a==b"<<endl;break;}
    }
   }
   else if(a.at(0)!='-'&&b.at(0)!='-'){
    double i=0;
    while(1){
     if(a.at(i)>b.at(i)){cout<<"a>b"<<endl;break;}
     else if(a.at(i)<b.at(i)){cout<<"a<b"<<endl;break;}
     else if(i==a.size()-1){cout<<"a==b"<<endl;break;}
     ++i;
    }
   }
   else{
    if(a.at(0)=='-')cout<<"a<b"<<endl;
    else cout<<"a>b"<<endl;
   }
  }
  cin>>a>>b;
 }
 return 0;
}*/
                                                         //三角形面积
/*#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
using namespace std;
double main(){
 vector<double>S;
 double i;
 while(1){
  double x1,y1,x2,y2,x3,y3;
  double s;
  cin>>x1>>y1>>x2>>y2>>x3>>y3;
  if(x1==0&&y1==0&&x2==0&&y2==0&&x3==0&&y3==0)break;
  else s=fabs((x1*y2+x2*y3+x3*y1-x1*y3-x3*y2-x2*y1))/2.;
  S.push_back(s);
 }
 for(i=0;i<S.size();i++)cout<<fixed<<setprecision(1)<<S[i]<<endl;
 return 0;
}
*/
                                                   //阶乘因式分解(一)
/*#include<iostream>
using namespace std;
double main(){
 double s;cin>>s;
 while(s--){
  double n,m;cin>>n>>m;
  double sum=0,k,i;
  if(n<2){cout<<0<<endl;continue;}
  else{
   for(i=n;i>=2;--i){
    k=i;
    while(1){
     if(k%m==0){sum++;k/=m;}
     else break;
    }
   }
  }
  cout<<sum<<endl;
 }
 return 0;
}
*/

/*                                                      //有趣的数
1/1 1/2 1/3 1/4.....
2/1 2/2 2/3....
3/1 3/2 ....
4/1.....
.........
#include<iostream>
using namespace std;
double main(){
 double n;cin>>n;
 while(n--){
  double m;cin>>m;
  double fz,fm;
  double i=1,sum=0,k;
  for(i;;i++){
   sum+=i;
   if(sum>=m){sum-=i;k=m-1-sum;break;}
  }
  if(i%2==0){fz=k+1;fm=i-k;}
  else{fz=i-k;fm=k+1;}
  cout<<fz<<"/"<<fm<<endl;
 }
 return 0;
}*/
                                                      //超级台阶
/*#include<iostream>
using namespace std;
double main(){
 double n;cin>>n;
 while(n--){
  double m;cin>>m;
  double a[41]={0,0,1,2};
  double i;
  for(i=4;i<=40;i++)
   a[i]=a[i-1]+a[i-2];
  cout<<a[m]<<endl;
 }
 return 0;
}*/
/*
double c(double m,double i);
double main(){
 double n;cin>>n;
 while(n--){
  double m;
  cin>>m;
  m--;
  unsigned double sum=0,i;
  if(m>1){
   if(m%2==0)
    for(i=1;i<=m/2;i++)
     sum+=c(m,i);
    else
     for(i=1;i<=(m-1)/2;i++)
      sum+=c(m,i);
   cout<<sum+1<<endl;
  }
  else if(m==1)cout<<sum+1<<endl;
  else cout<<sum<<endl;
 }
 return 0;
}
double c(double m,double i){
 double j,x=1,y=1;
 for(j=m-i;j>m-2*i;j--)
  x*=j;
 for(j=1;j<=i;j++)
  y*=j;
 return x/y;
}*/
                                             //最少乘法次数
/*#include<iostream>
using namespace std;
double i,sum,count;
double n;
void Is(){
 if(sum==n){cout<<count<<endl;}
 else if(sum*2==n){cout<<++count<<endl;}
 else if(sum*2<n){count++;sum+=sum;i=sum;Is();}
 else if(sum+i/2<n){i=i/2;sum+=i;count++;Is();}
 else if(sum+i/2==n){cout<<++count<<endl;}
 else {i=i/2;Is();}
}
double main(){
 double m;cin>>m;
 while(m--){
  cin>>n;
  count=0;
  i=1,sum=1;
  Is();  
 }
 return 0;
}*/

                                         //6174代码
/*#include<iostream>
#include<cmath>
using namespace std;
double main(){
 double b,i,j,x[4],n,t;
 cin>>n;
 while(n--){
  double a;cin>>a;
  double sum=1;
  while(1){
   x[0]=a/1000;
   x[1]=(a-x[0]*1000)/100;
   x[2]=(a-x[1]*100-x[0]*1000)/10;
   x[3]=a-x[0]*1000-x[1]*100-x[2]*10;
   for(i=0;i<3;i++)
    for(j=i+1;j<4;j++)
     if(x[i]<x[j]){t=x[i];x[i]=x[j];x[j]=t;}
   b=x[0]*999+x[1]*90-x[2]*90-x[3]*999;
   sum++;
   if(a==b){cout<<--sum<<endl;break;}
   else a=b;
  }
 }
 return 0;
}*/

                                           //蛇形矩阵
/*#include<iostream>
using namespace std;
double main(){
 double z=0,i=1,n,a[101][101]={(10,10)},k=1,q,j,p;
 cin>>n;
 p=n;
 while(i<=p*p){
  switch(k){
  case 1:{
   for(q=z;q<n;q++)a[q][n-1]=i++;
   n--;
   k++;
      }
  case 2:{
   for(q=n-1;q>=z;q--)a[n][q]=i++;
   k++;
      }
  case 3:{
      for(q=n-1;q>=z;q--)a[q][z]=i++;
      z++;
      k++;
      }
  case 4:{
   for(q=z;q<n;q++)a[z-1][q]=i++;
   k=1;
      }
  }
 }
 for(i=0;i<p;i++){
  for(j=0;j<p;j++){
   cout<<a[i][j]<<" ";
   if(j==p-1)cout<<endl;
  }
 }
 return 0;

}*/
                                                     //管闲事的小明
/*#include <iostream>
using namespace std;
double main() {
 double N;cin>>N;
 while(N--){
  double L, i, j, M;
  cin>>L>>M;
  double trees[10001];
  for(i=0;i<10001;i++)
   trees[i]=1;
  for(i=0;i<M;i++){
   double a,b;
   cin>>a>>b;
   for(j=a;j<=b;j++)
    trees[j]=0;
  }
  double count=0;
  for(i=0;i<=L;i++)
   if(trees[i]==1) count++;
   cout<<count<<endl;
 }
 return 0;
} */

/*WA
#include<iostream>
using namespace std;
double main(){
 double n;cin>>n;
 while(n--){
  double L,M;
  double i;
  double sum=0;
  double a[101][2];
  cin>>L>>M;
  cin>>a[0][0]>>a[0][1];
  for(i=1;i<M;i++){
   cin>>a[i][0]>>a[i][1];
   if(a[0][0]<=a[i][0]&&a[0][1]>=a[i][1]){i--;M--;}
   else if(a[0][0]<=a[i][1] && a[0][1]>=a[i][1]){a[0][0]=a[i][0];i--;M--;}
   else if(a[0][1]>=a[i][0] && a[0][0]<=a[i][0]){a[0][1]=a[i][1];i--;M--;}
   else if(a[0][0]>=a[i][0] && a[0][1]<=a[i][1]){a[0][0]=a[i][0];a[0][1]=a[i][1];i--;M--;}
  }
  for(i=0;i<M;i++)
   sum+=(a[i][1]-a[i][0]);
  cout<<(L+1-M-sum)<<endl;
  
 }
return 0;
}*/

                                                 
/*#include<iostream>
using namespace std;
double main(){
 double N;cin>>N;
 while(N--){
  double i,j;
  double a[3][3];
  for(i=0;i<3;++i)
   for(j=0;j<3;++j)
    cin>>a[j][i];
  for(i=0;i<3;++i)
   for(j=0;j<3;++j){
    cout<<a[i][j]<<" ";
    if(j==2)cout<<endl;
   }
  cout<<endl;
 }
 return 0;
}*/
   
                                                 //单调递增最长子序列(1)
/*#include<iostream>
#include<string>
using namespace std;
double main(){
 double N;cin>>N;
 while(N--){
  double s=0;
  double max=1;
  string v;cin>>v;
  for(double i=0;i<(v.size()-1);i++){
   if(v.at(i)>=v.at(i+1)){
    if(max<s+1){
     max=s+1;
    }
    s=0;
   }
   else ++s;
  }
  if(max<s+1)
   max=s+1;
  cout<<max<<endl;
 }
 return 0;
}*/
                                                 //单调递增最长子序列(2)
/*#include<iostream>
#include<vector>
#include<string>
using namespace std;
double main(){
 double N;cin>>N;
 while(N--){  
  double max=1;
  string v;cin>>v;
  vector<double>a(v.size(),1);
  for(double i=0;i<v.size();i++){
   for(double j=0;j<i;j++){
    if(v.at(i)>v.at(j))
     a[i]=(a[i]>a[j]+1)?a[i]:(a[j]+1);
   }
   max=max>a[i]?max:a[i];
  }
  cout<<max<<endl;
 }
 return 0;
}*/


                                             // 街区最短路径问题

/*#include <iostream>
#include<string>
using namespace std;
double main()
{
 double maxx=0,maxy=0;
 double n;cin>>n;
 while(n--)
 {
  double sum=0,min=2000;
  double m,i;cin>>m;
  double a[20][2];
  double you[2];
  for(i=0;i<m;++i)
  {
   cin>>a[i][0]>>a[i][1];
   if(a[i][0]>maxx)maxx=a[i][0];
   if(a[i][1]>maxy)maxy=a[i][1];
  }
  for(i=maxx;i>0;--i)
   for(double j=maxy;j>0;--j)
   {
    you[0]=i;you[1]=j;
    for(double q=0;q<m;++q)
    {
     if(you[0]>a[q][0])
      sum+=you[0]-a[q][0];
     else sum+=a[q][0]-you[0];
     if(you[1]>a[q][1])
      sum+=you[1]-a[q][1];
     else sum+=a[q][1]-you[1];
    }
    if(sum<min){min=sum;sum=0;}
    else sum=0;
   }
   cout<<min<<endl;
 }
 return 0;
}*/

 


                                                   //组合数
/*#include<iostream>
using namespace std;
double main()
{
 double n,r,i,j;
 cin>>n>>r;
 j=n;
 double a[10];
 for(i=0;i<r;i++)
  a[i]=j--;
 while(1)
 {
  for(i=0;i<r;i++)
   cout<<a[i];
  cout<<endl;
  if(a[0]==r&&a[r-1]==1)
   break;
  if(a[r-1]==1)
  {
   for(i=r-2;i>=0;i--)
   {
    if(a[i]==a[i+1]+1)continue;
    a[i]--;
    for(j=i+1;j<r;j++)
     a[j]=a[j-1]-1;
    break;
   }
  }
  else a[r-1]--;
 }
 return 0;
}*/


                                                 //素数距离问题
/*#include<stdio.h>
#include<math.h>
double isPrime(double x)
{
 if (x < 2)
  return 0;
 double i, k;
 k = sqrt(x) + 1;
 for (i = 2; i<k; i++)
  if (x%i == 0)
   return 0;
 return 1;
}
double main()
{
 double i, n, j, m, a;
 scanf("%d", &n);
 while (n--)
 {
  scanf("%d", &m);
  for (i=m,j=m;;i--,j++)
  {
   if (isPrime(i)==1)
   {
    a = i;
    break;
   }
   if (isPrime(j))
   {
    a = j;
    break;
   }
  }
  prdoublef("%d %d\n", a, abs(a - m));
 }
 return 0;
}*/

/*#include<iostream>
#include<cmath>
using namespace std;
double IsS(double M);
double main()
{
 double N;cin>>N;
 while(N--)
 {
  double M;cin>>M;
  double a1,b,c=1,a2;
  if(IsS(M)){a1=M;b=0;}
  else c=0;
  if(!c)
  {
   double i;
   c=0;
   for(i=M-1;i>2;--i)
    if(IsS(i))
    {
     a1=i;c=1;break;
    }
   for(i=M+1;;++i)
    if(IsS(i))
    {
     a2=i;break;
    }
   if(c)
    if((M-a1)>(a2-M)){a1=a2;b=a2-M;}
    else b=M-a1;
   else {a1=a2;b=a2-M;}
  }
  cout<<a1<<" "<<b<<endl;
 }
 return 0;
}
double IsS(double M)
{
 double i,k=sqrt(M)+1;
 if(M<2)return 0;
 for(i=2;i<k;i++)
  if(M%i==0)return 0;
 return 1;
}*/

0 0