Submission #1083801

#TimeUsernameProblemLanguageResultExecution timeMemory
1083801ZeroCoolSorting (IOI15_sorting)C++14
100 / 100
177 ms32152 KiB
#include "sorting.h" #include<bits/stdc++.h> using namespace std; #define ar array #define ll long long #define ld long double vector<ar<int, 2>> ans, xy, swaps; bool check(vector<int> p, int m, int n) { int s = 0; vector<int> e = p; vector<int> co(n, 0); for (int i = 0; i < n; i++) co[p[i]] = i; for (int i = 0; i < m; i++) swap(p[xy[i][0]], p[xy[i][1]]); for (int i = 0; i < n; i++) { if (p[i] == i) continue; while(p[i] != i) { int j = p[i]; swaps.push_back({p[i], p[j]}); swap(p[i], p[j]); s++; } } if (swaps.size() > m)return 0; while(swaps.size() < m) swaps.push_back({0, 0}); for (int i = 0; i < m; i++) { swap(co[e[xy[i][0]]], co[e[xy[i][1]]]); swap(e[xy[i][0]], e[xy[i][1]]); auto [x, y] = swaps[i]; swaps[i] = {co[x], co[y]}; swap(e[co[x]], e[co[y]]); swap(co[x], co[y]); } return s <= m; } int findSwapPairs(int n, int A[], int m, int X[], int Y[], int P[], int Q[]) { vector<int> p(n); for (int i = 0; i < n; i++) p[i] = A[i]; for (int i = 0; i < m; i++) xy.push_back({X[i], Y[i]}); int l = 0, r = m - 1; while(l <= r) { int m = (l + r)/2; swaps.clear(); if(check(p, m, n)){ r = m - 1; ans = swaps; }else l = m + 1; } for (int i = 0; i < ans.size(); i++) { P[i] = ans[i][0]; Q[i] = ans[i][1]; } return ans.size(); }

Compilation message (stderr)

sorting.cpp: In function 'bool check(std::vector<int>, int, int)':
sorting.cpp:28:22: warning: comparison of integer expressions of different signedness: 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   28 |     if (swaps.size() > m)return 0;
      |         ~~~~~~~~~~~~~^~~
sorting.cpp:30:24: warning: comparison of integer expressions of different signedness: 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   30 |     while(swaps.size() < m) swaps.push_back({0, 0});
      |           ~~~~~~~~~~~~~^~~
sorting.cpp:35:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   35 |         auto [x, y] = swaps[i];
      |              ^
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:49:13: warning: declaration of 'int m' shadows a parameter [-Wshadow]
   49 |         int m = (l + r)/2;
      |             ^
sorting.cpp:42:39: note: shadowed declaration is here
   42 | int findSwapPairs(int n, int A[], int m, int X[], int Y[], int P[], int Q[]) {
      |                                   ~~~~^
sorting.cpp:57:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for (int i = 0; i < ans.size(); i++) {
      |                     ~~^~~~~~~~~~~~
sorting.cpp:61:20: warning: conversion from 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   61 |     return ans.size();
      |            ~~~~~~~~^~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...