제출 #50860

#제출 시각아이디문제언어결과실행 시간메모리
50860NicksechkoGift (IZhO18_nicegift)C++14
49 / 100
2068 ms109420 KiB
//Solution by Zhusupov Nurlan #include <iostream> #include <sstream> #include <fstream> #include <string> #include <vector> #include <deque> #include <queue> #include <stack> #include <set> #include <map> #include <algorithm> #include <functional> #include <utility> #include <bitset> #include <cmath> #include <cstdlib> #include <ctime> #include <cstdio> #include <cstring> #include <climits> #include <string.h> #include <stdio.h> #include <assert.h> using namespace std; typedef long long LL; typedef map<string , int> MSI; typedef vector<int> VI; typedef pair<int, int> PII; #define endl '\n' #define pb(x) push_back(x) #define sqr(x) ((x) * (x)) #define F first #define S second #define SZ(t) ((int) t.size()) #define len(t) ((int) t.length()) #define base LL(1e9 + 7) #define fname "" #define sz 2000 * 1002 #define EPS (1e-8) #define INF ((int)1e9 + 9) #define mp make_pair LL mx, n, k, a[sz]; LL s; set <pair <LL, LL> > b; pair <LL, LL> g[sz]; vector <pair<LL, VI> > ans; int main() { // freopen(fname"in", "r", stdin); // freopen(fname"out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; s += a[i]; mx = max(mx, a[i]); } if (s % k != 0 || mx > s / k) { cout << -1; return 0; } for (int q = 1; q <= 10; q++) { ans.clear(); b.clear(); for (int i = 1; i <= n; i++) b.insert(mp(a[i], i)); int cnt; LL ss = s; while (1) { if (b.size() < k) break; set <pair<LL, LL> >::iterator it = b.end(); LL mi = 1e18; for (int i = 0; i < k; i++) { it--; g[i] = *it; mi = min(mi, g[i].F); } if (it != b.begin()) { it--; mi = min(mi, (ss / k - (*it).F)); } // sum / k >= mx for (int i = 0; i < k; i++) b.erase(*b.rbegin()); VI p; for (int i = 0; i < k; i++) { g[i].F -= mi; ss -= mi; if (g[i].F != 0) b.insert(g[i]); p.pb(g[i].S); } ans.pb(mp(mi, p)); } if (b.size() == 0) { cout << ans.size() << "\n"; for (int i = 0; i < ans.size(); i++) { cout << ans[i].F << " "; for (int j = 0; j < ans[i].S.size(); j++) cout << ans[i].S[j] << " "; cout << "\n"; } return 0; } } }

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

nicegift.cpp: In function 'int main()':
nicegift.cpp:81:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if (b.size() < k) break;
           ~~~~~~~~~^~~
nicegift.cpp:107:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for (int i = 0; i < ans.size(); i++) {
                       ~~^~~~~~~~~~~~
nicegift.cpp:109:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < ans[i].S.size(); j++)
                         ~~^~~~~~~~~~~~~~~~~
nicegift.cpp:78:9: warning: unused variable 'cnt' [-Wunused-variable]
     int cnt;
         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...