SRM 524 div2

4023 단어 div
250pt
처음엔 반응이 안 나왔어.폭력, 두 수를 매거하다.
 
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <string.h>

#include <cmath>

using namespace std;



class ShippingCubes

{

public:

    int minimalCost(int N)

	{

		int mins=2000000000;

		for(int i=1;i<=N;i++)

		{

			for(int j=1;j<=N;j++)

			{

			   if(N%(i*j)==0)

			   {

				   int k=N/(i*j);

				   if((i+j+k)<mins)

					   mins=(i+j+k);

			   }

			}

		}

		return mins;

	}

};


 
500pt
소수라면 두 번만 하면 돼, 1,p-1
소수가 아니라면 한 번만 하면 되는데,
특판 1, 2, 3.
많은 분들이 3이라는 특이한 수를 빠뜨리셨어요.
 
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <string.h>

#include <cmath>

using namespace std;



class MagicDiamonds

{

public:

   long long minimalTransfer(long long n)

   {

	   long long t = (int)sqrt((double)n);

	   t = t+1;

	   if(n==1)

		   return 1;

	   if(n==2)

		   return 2;

	   if(n==3)

		   return 3;

	   for(long long i=2;i<=t;i++)

	   {

	      if(n%i==0)

			  return 1;

	   }

	   return 2;

   }

};


 
1000pt.
시합 후에야 만들어진 것으로 큰 소의 코드를 참고했다.우선 선택할 수 있는 수를 일정한 순서에 따라 배열하다.작은 것부터 큰 것까지 매거에 주의하다.
여기서 좀 특별한 조건이 하나 있는데한 쌍의 N을 남기면 한 번만 확장하면 된다.왜냐하면 대열 앞에 하나가 있으면...
개수가 N에 대한 나머지가 같으면 현재 이 수는 대열에 들어갈 필요가 없다. 왜냐하면 앞의 그 수는 반드시 현재의 이 수보다 작기 때문이다.
 
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <string>

#include <cmath>

#include <queue>

using namespace std;



struct node

{

	string out;

	int res;

};

queue<node>q;

int used[10005];



string My_Format(string str)

{

    int num=str.length();

	if(num<9)

		return str;

	string ans="";

	ans+=str[0];

	ans+=str[1];

	ans+=str[2];

	ans+="...";

	ans+=str[num-3];

	ans+=str[num-2];

	ans+=str[num-1];

	ans+="(";

	//ans+=char(num+'0');

	string strnum="";

	while(num>0)

	{

		strnum+=(char)(num%10+'0');

		num/=10;

	}

	for(int i=strnum.length()-1;i>=0;i--)

		ans+=strnum[i];

	ans+=" ";

	ans+="digits";

	ans+=")";

	return ans;

}

class MultiplesWithLimit

{

  public:

	  string minMultiples(int N, vector<int> b)

	  {

		   vector<int>a;

		   a.clear();

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

		   {

		     int ok=1;

             for(int j=0;j<b.size();j++)

		     {

                 if(b[j]==i)

				 {

					 ok=0;

					 break;

				 }

		     }

			 if(ok==1)

				 a.push_back(i);

		   }



           int num=a.size();

		   memset(used,0,sizeof(used));

		   sort(a.begin(),a.end());

           while(q.size()>0)

			  q.pop();



		   node temp,next;

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

		   {

			   if(a[i]==0)

				   continue;

               temp.out='0'+a[i];

			   temp.res=a[i]%N;

			   if(temp.res==0)

                   return My_Format(temp.out);

			   if(used[temp.res]==0)

			      q.push(temp);

			   used[temp.res]=1;

		   }

		   while(q.size()>0)

		   {

			   temp = q.front();

			   q.pop();

			   if(temp.res==0)

				   return My_Format(temp.out);

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

			   {

			      next.out=temp.out+char(a[i]+'0');

				  next.res=(temp.res*10+a[i])%N;

				  if(used[next.res]==0)

					  q.push(next);

				  used[next.res]=1;

			   }

		   }

		   return "IMPOSSIBLE";

	  }

};


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기