zerojudge c561. Bert 愛搗蛋

 zerojudge c561. Bert 愛搗蛋


解法大全:

思路的大方向:

1.先選答案,再翻轉

優點:省時間(只要翻轉一次)

缺點:較不直覺,較難寫

答案要先比位數,再比末位數大小

先取位數較多的,再取末位數大的


其方法有: 

a.排序:

用內建sort搭配自寫的cmp函式


sort語法:

sort(s,s+n,cmp);


重要的是自寫cmp函式


自己寫的參考程式碼:

typedef struct obj
{
	int len;
	string s;
	char c;
	obj(string a){s=a,len=s.length(),c=s[len-1];}
}OBJ;
int cmp(string s1,string s2)
{
	OBJ obja(s1),objb(s2);
	
	if(obja.len==objb.len)
	{
		if(obja.c==objb.c)return 0;
		else if(obja.c<objb.c)return 1;
		else return -1;
	}
	return obja.len-objb.len;
}

註:在自訂測資中答案是正確的,但在正式測資時會出現NA(有時是SEGERROR,有時是答案錯誤)

b.直接選:

/*

DATE:2020/08/20

zerojudge c561

Version:3

status:not complete yet

*/


#include <iostream>

using namespace std;

#include <string>


#define RE_C 1


int cas=0,ti=1;

void check()

{

#ifdef RE_C==1

cout<<cas<<"er"<<ti++<<endl;

#endif

}

typedef struct obj

{

int len;

int last_digit;

int big;

string s;

obj(){big=1;}

void setdigit(){len--;last_digit=s[len-1]-'0';}

}OBJ;


int main()

{

int n=0;

  while(cas++,ti=1,cin>>n && n)

  {

OBJ *ob=new OBJ [n];

check();

int max_len=0;

for(int i=0;i<n;i++)

{

cin>>ob[i].s;

ob[i].len=ob[i].s.length();

ob[i].last_digit=ob[i].s[ob[i].len-1]-'0';

max_len=max(max_len,ob[i].len);

}

check();

int max_digit=0, cnt=0, flag=1,index=0;

while(flag)

{

cnt=0;

  for(int i=0;i<n;i++)

  {

if(ob[i].len==max_len)

{

if(max_digit<ob[i].last_digit && ob[i].big)

{

max_digit=ob[i].last_digit;

ob[i].big=1;

index=i;

}

else if(max_digit==ob[i].last_digit && ob[i].big)

{

ob[i].big=1;

index=i;

cnt++;

}

else 

{

ob[i].big=0;

}

}

else 

{

ob[i].big=0;

}

check();

  }

if(cnt==1)

{

flag=0;

cout<<ob[index].s<<endl;

break;

}

else

{

for(int i=0;i<n;i++)

{

ob[i].setdigit();

ob[i].len--;

}

max_len--;

}

}

delete []ob;

  }

  cout<<"bye"<<endl;

return 0;

}


2.先翻轉,在選答案

優點:較簡單

缺點:較花時間



翻轉方法:

考參考:

https://www.geeksforgeeks.org/reverse-a-string-in-c-cpp-different-methods/

其中方法3(直接返印)是偷雞的方法


Comments

Popular posts from this blog

zerojudge d122. Oh! My Zero!!