기본 콘텐츠로 건너뛰기

1024 : 수열의 합 [C++]

#include <iostream>
#include <vector>

using namespace std;

class Sequence
{
private:
 vector<int> Vector;
 int N;
 int L;
public:
 Sequence(int n, int l);
 void GetSequence();
};

Sequence::Sequence(int n, int l)
{
 this->N = n;
 this->L = l;
 for (int i = 0; i < 100; i++)
  this->Vector.push_back(0);
}

void Sequence::GetSequence()
{
 if (this->N % 2 == 1 && this->L <= 2)
 {
  this->Vector[0] = this->N / 2;
  this->Vector[1] = this->Vector[0] + 1;

  cout << this->Vector[0] << " " << this->Vector[1] << " ";
 }
 else
 {
  int Count = 0;
  bool IsOk = false;

  for (int i = 2; i <= 100; i++)
  {
   if (this->N < i)
    break;
   int Center = this->N / i;
   int Sum = Center;
   Count = 0;
   IsOk = false;
   for (int j = 1; j <= ((i % 2 == 0) ? (i / 2) - 1 : i / 2); j++)
   {
    if (Center - j >= 0)
    {
     Sum += Center - j;
     this->Vector[Count++] = Center - j;
    }
    else break;
   }
   this->Vector[Count++] = Center;
   for (int j = 1; j <= i / 2; j++)
   {
    Sum += Center + j;
    this->Vector[Count++] = Center + j;
   }
   if (Sum == this->N && Count >= this->L)
   {
    IsOk = true;
    break;
   }
  }
  if (!IsOk)
   cout << "-1";
  else
  {
   int i = 0;
   int j = 0;

   if (Count % 2 == 0)
   {
    i = (Count / 2) - 2;
    j = (Count / 2) - 1;
   }
   else
   {
    i = (Count / 2) - 1;
    j = (Count / 2);
   }

   for (; i >= 0; i--)
    cout << this->Vector[i] << " ";
   for (; j < Count; j++)
    cout << this->Vector[j] << " ";
  }
 }
}

int main()
{
 int N, L;
 cin >> N >> L;

 Sequence S(N, L);

 S.GetSequence();
}

-----------------------간단한 방법------------------------

for (int l = L; l < 100; l++) 
{
 int end = N / l + l / 2;
 int start = end - l + 1;

 if (start < 0) continue;
 else if (end > N) continue;
 else if (N * 2 == end*(end + 1) - start*(start - 1)) 
        {
  for(int i = start; i < end; i++)
                    cout << i << " ";
  return 0;
 }
}

 cout << -1 << endl;

댓글

이 블로그의 인기 게시물

1978 : 소수 찾기 [C++]

# include < iostream > # include < vector > using namespace std ; int main ( ) { cin . tie ( NULL ) ; vector < int > Primes ; Primes . push_back ( 2 ) ; Primes . push_back ( 3 ) ; for ( int i = 4 ; i < 1000 ; i + + ) { bool IsPrime = true ; if ( i % 2 = = 0 | | i % 3 = = 0 ) continue ; for ( int j = 4 ; j < i ; j + + ) { if ( i % j = = 0 ) { IsPrime = false ; break ; } } if ( IsPrime ) Primes . push_back ( i ) ; } int N , Count = 0 ; cin > > N ; for ( int i = 0 ; i < N ; i + + ) { int Input ; cin > > Input ; for ( int j = 0 ; j < Primes . size ( ) ; j + + ) if ( Input = = Primes [ j ] ) Count + + ; } cout < < Count < < " \n " ; return 0 ; }

10828 : 스택 [Python]

Stack = [ ] def push ( num ) : Stack . append ( int ( num ) ) def pop ( ) : if len ( Stack ) > 0 : print ( Stack . pop ( ) ) else : print ( - 1 ) def size ( ) : print ( len ( Stack ) ) def empty ( ) : if len ( Stack ) == 0 : print ( 1 ) else : print ( 0 ) def top ( ) : if len ( Stack ) > 0 : print ( Stack [ len ( Stack ) - 1 ] ) else : print ( - 1 ) TestCase = int ( input ( ) ) while TestCase > 0 : Command = input ( ) if Command == 'top' : top ( ) elif Command == 'pop' : pop ( ) elif Command == 'empty' : empty ( ) elif Command == 'size' : size ( ) else : push ( Command [ 5 : ] ) TestCase - = 1