제출 #1257178

#제출 시각아이디문제언어결과실행 시간메모리
1257178phanvinhSouvenirs (IOI25_souvenirs)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> 
#include "souvenirs.h" 
using namespace std;
/*pair <vector <int>, long long> transaction(long long M) {
  long long P[10] = {100, 94, 82, 44, 42, 30, 29, 28, 15, 4};
  int n = 10; 
  cout << "ask :   " << M << endl;
  vector <int> ret; 
  for (int i = 0; i < n; i++) {
    if (M >= P[i]) {
      ret.push_back(i); 
      M -= P[i]; 
    }  
  }                 
  return make_pair(ret, M);  
}   */
void buy_souvenirs(int n, long long P0) {
  vector <long long> value(n, 0LL);
  value[0] = P0;
  vector <int> cnt(n, 0);
  vector <pair <set <int>, long long>> save(n); 
  while (true) {
    bool still = false;
    for (int i = 0; i < n; i++) {
      if (value[i] == 0) {
        still = true; 
      }
    }
    if (still == false) {
      break; 
    }
    bool have = false; 
    for (int i = n - 1; i >= 0; i--) {
      if (value[i] == 0) {
        have = true; 
      }
      if (value[i] != 0 && have == false) {
        continue; 
      }
      if (value[i] != 0 && have == true) {
        pair <vector <int>, long long> info = transaction(value[i] - 1); 
        long long M = value[i] - 1 - info.second; 
        set <int> myset; 
        vector <int> &v = info.first; 
        for (int j = 0; j < (int) v.size(); j++) {
          cnt[v[j]]++; 
          if (value[v[j]] != 0) {
            M -= value[v[j]]; 
          }
          else {
            myset.insert(v[j]); 
          }
        }            
        if ((int) myset.size() == 1) {
          value[*myset.begin()] = M; 
        }
        else if ((int) myset.size() > 1) {
          set <int>::iterator it = myset.begin();
          save[*it] = make_pair(myset, M);     
        }
        break; 
      }
      if (save[i].first.size() > 1) {   
        for (int j = 1; j < n; j++) {
          if (save[i].first.find(j) != save[i].first.end() && value[j] != 0) {
            save[i].second -= value[j];
            save[i].first.erase(save[i].first.find(j));   
          }
        }
        if ((int) save[i].first.size() == 1) {
          value[*save[i].first.begin()] = save[i].second;
          save[i].first.clear(); 
        }
        else if ((int) save[i].first.size() > 1) {              
          long long need = save[i].second / (int) save[i].first.size(); 
          pair <vector <int>, long long> info = transaction(need); 
          long long M = need - info.second; 
          set <int> myset; 
          vector <int> &v = info.first; 
          for (int j = 0; j < (int) v.size(); j++) {
            cnt[v[j]]++; 
            if (value[v[j]] != 0) {
              M -= value[v[j]]; 
            }
            else {
              myset.insert(v[j]); 
            }
          }
          if ((int) myset.size() == 1) {
            value[*myset.begin()] = M; 
          }
          else if ((int) myset.size() > 1) {
            set <int>::iterator it = myset.begin();
            save[*it] = make_pair(myset, M);     
          }     
        }
        break;  
      }
    }
  }
  for (int i = 1; i < n; i++) {
    while (cnt[i] < i) {
      transaction(value[i]); 
      cnt[i]++; 
    }
  }   
}
int main() {
  buy_souvenirs(10, 100); 
  system("pause");
  return 0; 
}

컴파일 시 표준 에러 (stderr) 메시지

souvenirs.cpp: In function 'int main()':
souvenirs.cpp:110:9: warning: ignoring return value of 'int system(const char*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |   system("pause");
      |   ~~~~~~^~~~~~~~~
/usr/bin/ld: /tmp/ccHC2FFt.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccRReTQc.o:souvenirs.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status