#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
#if 0
long fibonacci1(int n)
{
if(n<=2)
return 1;
else
{
long num1=1;
long num2=1;
for(int i=2; i<n-1; i++)
{
num2=num1+num2;
num1=num2-num1;
}
return num1+num2;
}
}
int fibonacci(int n) ///递归求解的时间复杂度为o(n)
{
cout<<"calculating "<<n<<endl;
if (n<=0)
{
return 0;
}
if (n==1)
{
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}
long fibonacci2(int n)
{
if(n<=0)
{
return 0;
}
if(n==1)
{
return 1;
}
int min=0;
int max=1;
int i=2;
int result=0;
while(i<=n)
{
result=min+max;
min=max;
max=result;
++i;
}
return result;
}
int main(int argc,char *argv)
{
int N;
cin>>N;
cout<<fibonacci(N)<<endl;
return 0;
}
#endif
#if 0 ///十进制和十二进制的转换(华为17年校招)
void solve(int num);
int main()
{
int num;
while(cin>>num)
{
solve(num);
}
return 0;
}
void solve(int num)
{
if(num==0)
{
cout<<"0"<<endl;
return;
}
char c;
vector<char> s;
while(num)
{
if(num%12==10)
{
c='A';
}
else if(num%12==11)
{
c='B';
}
else
{
c=num%12+'0';
}
s.push_back(c);
num=num/12;
}
vector<char>::iterator vi;
for(vi=s.end()-1; vi>=s.begin(); vi--)
{
cout<<(*vi);
}
cout<<endl;
return;
}
#endif
#if 0 ///缘分匹配(华为17年校招)
int main(int argc,char *argv)
{
int N,M;
int i,j;
cin>>N;
M=2*N;
int array[50]= {0};
int man[20]= {0};
int man_var=0;
int woman[20]= {0};
int woman_var=0;
int totel;
for(i=0; i<M; i++)
{
cin>>array[i];
}
for(i=0; i<M; i++)
{
man_var +=array[i];
man[i] = man_var;
}
printf("man ");
for(i=0; i<M; i++)
{
printf("man[i]=%d ",man[i]);
}
printf("\n");
for(j=M-1; j>=0; j--)
{
woman_var +=array[j];
woman[j]=woman_var;
}
printf("woman ");
for(i=0; i<M; i++)
{
printf("woman[i]=%d ",woman[i]);
}
printf("\n");
int count=0;
for(i=0; i<M; i++)
{
for(j=0; j<M; j++)
{
if(man[i]==woman[j])
{
count++;
}
}
}
printf("count=%d\n",count);
return 0;
}
#endif // 1
///测试动态分配内存的传值或者传址
#if 0
void allocate(char *&p,int size)
{
cout<<&p<<endl;
p=(char *)malloc(size);
}
int main()
{
char *str=NULL;
cout<<&str<<endl;
allocate(str,100);
strcpy(str,"hello world!");
printf("%s\n",str);
free(str);
return 0;
}
#endif // 0
#if 0
struct elem{
int val;
int index;
};
int main()
{
int i,j;
int task[]= {0,30,155,1,80,300,170,40,99};
struct elem small[20];
int small_index=0;
struct elem big[20];
int big_index=0;
int length=sizeof(task)/sizeof(task[0]);
for(i=0;i<length;i++){
if(task[i]<50){
small[small_index].val=task[i];
small[small_index].index=i;
//printf("%d\n",small[small_index].val);
small_index++;
}else {
big[big_index].val=task[i];
big[big_index].index=i;
//printf("%d\n",big[big_index].val);
big_index++;
}
}
for(i=0;i<small_index;i++){
printf("%d %d\n",small[i].val,small[i].index);
}
for(i=0;i<big_index;i++){
printf("%d %d\n",big[i].val,big[i].index);
}
return 0;
}
#endif
#if 0 ///身份证验证
int str2num(char *src,int len)
{
int i=0;
int res=0;
int flag=1;
for(i=len-1;i>=0;i--){
res +=(src[i]-'0')*flag;
flag *=0;
}
return res;
}
int verifyIDCard(char *input)
{
int i=0;
int year=0;
int month=0;
int day=0;
int len=strlen(input);
if(len!=18)
return 1;
for(i=0;i<17;i++){
if((input[i]<'0')||(input[i]>'9'))
return 2;
}
if((input[17]<'0')||(input[17]>'9')||(input[17]!='x'))
return 3;
year=str2num(input+6,4);
month=str2num(input+10,2);
day=str2num(input+12,2);
if(year<1900 || year>2100)
return 4;
if(month<1 || month>12) return 5;
if(day<1 || day>31) return 6;
if(month==2){
if(year%4==0)&&(year%100!=0)||(year%400==0){
if(day>29) return 0;
}else{
if(day>28) return 6;
}
}
return 0;
}
int main(int argc,char *argv)
{
char input[]="412829198808015258";
verifyIDCard(input);
return 0;
}
#endif // 1
#if 0 ///华为oj平台基础题
int string2int(char *s,int len)
{
int res=0;
int f=1;
int i=0;
for(i=len-1;i>=0;i--){
res=res+(s[i]-'0)*f;
f=f*10;
}
return res;
}
bool isIPAdressValid(char *ip)
{
int len=0,i=0,j=0,k=0;
int count=0;
char src[100]={0};
char s[10]={0};
if(IP==0 || IP==" ")
return false;
while(ip[len]){
src[len]=ip[len];
len++;
}
src[len]='\0';
for(i=0;i<len;i++){
if((i==0||i=len-1)&&(src[i]==' '))
continue;
if((src[i]<'\0'||src[i]>'9')&&(src[i]!='.')&&(src[i]!=' '))
return false;
s[j++];
if(src[i]=='.'){
count++;
if(src[i+1]=='.' || src[i+1]=='\0')
return false;
if(j>4)
return false;
if(j>2 &&s[0]=='0')
return false;
for(k=0;k<j-1;k++){
if(s[k]==' ')
return false;
}
if(j==4){
if(string2int(s,3)>255)
return false;
}
j=0;
}
}
if(count!=3) return false;
return true;
}
int main(int argc,char *argv)
{
char IP[]="192.168.1.110";
isIPAddressValid(const char *pszIPAddr);
return 0;
}
#endif // 1
#if 0 ///京东17年秋招进制均值
int hexSum(int n,int a)
{
int sum=0;
while(n){
sum +=(n%a);
n=n/a;
printf("sum=%d,n=%d\n",sum,n);
}
return sum;
}
int main()
{
int A;
int tmp;
int temp1;
while(cin>>A){
int sum=0;
for(int i=2;i<=A-1;i++){
sum +=hexSum(A,i);
}
printf("total=%d\n",sum);
tmp=9;
temp1=3;
while(temp1!=tmp){
if (temp1>tmp) temp1=temp1-tmp;
else tmp=tmp-temp1;
}
printf("temp1=%d\n",temp1);
//int r=_gcd(sum,A-2);
cout<<sum<<'/'<<(A-2)<<endl;
}
return 0;
}
#endif
#if 0 ///京东17年秋招试题 通过考试
const int maxn=105;
int n,a[maxn];
double dp[maxn][maxn];
int main(int argc,char* argv)
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][0]*(100.0-a[i])/100;
for(int j=1;j<=i;j++){
dp[i][j]=dp[i-1][j]*(100.0-a[i])/100+dp[i-1][j-1]*1.0*a[i]/100;
}
}
int begin=(3*n+4)/5;
double ans=0;
for(int i=begin;i<=n;i++){
ans += dp[n][i];
}
printf("%.5f\n",ans);
return 0;
}
#endif // 1
#if 0 ///京东17年秋招-异或
int main(int argc,char *argv[])
{
int i=0;
char str1[]="1100";
char str2[]="0100";
int len=strlen(str1);
char str[5]={0};
for(i=0;i<len;i++){
int int_str1=str1[i]-'0';
int int_str2=str2[i]-'0';
printf("%d %d\n",int_str1,int_str2);
if(int_str1==int_str2){
str[i]='0';
}else {
str[i]='1';
}
}
for(i=0;i<len;i++){
printf("%c\n",str[i]);
}
int sum=0;
/*for(i=len-1;i<=0;i--){
if(i==len-1){
sum =(str[i]-'0');
}else{
sum += (str[i]-'0')*2;
}
}*/
for(i=0;i<len;i++){
sum *=2;
sum +=str[i]-'0';
}
printf("sum=%d\n",sum);
return 0;
}
#endif // 0
#if 1 ///京东17年校招拍卖产品
const int maxn=1005;
int a[maxn];
int main(int argc,char *argv)
{
int n,m,ans=0,pos=0;
scanf("%d%d",&n,&m);
int i=0;
for(i=1;i<=m;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+m);
for(i=1;i<=m;i++){
if(ans<a[i]*min(n,m-i+1)){
ans=a[i]*min(n,m-i+1);
pos=a[i];
}
}
printf("%d\n",pos);
return 0;
}
#endif // 1