summaryrefslogtreecommitdiff
path: root/trees/blog/obi2018-cinco.typ
diff options
context:
space:
mode:
Diffstat (limited to 'trees/blog/obi2018-cinco.typ')
-rw-r--r--trees/blog/obi2018-cinco.typ46
1 files changed, 46 insertions, 0 deletions
diff --git a/trees/blog/obi2018-cinco.typ b/trees/blog/obi2018-cinco.typ
new file mode 100644
index 0000000..0b9115e
--- /dev/null
+++ b/trees/blog/obi2018-cinco.typ
@@ -0,0 +1,46 @@
+#import "html_elements.typ": post
+#import "./lib.typ": flex, svg_inline
+
+#show: post
+
+- #link("https://olimpiada.ic.unicamp.br/pratique/ps/2018/f3/cinco/")[Enunciado]
+
+Podemos criar um algoritmo guloso simples, trocar sempre (em ordem):
+
+1. O dígito mais significativo que for trocado por um número maior do que ele
+2. (na falha do primeiro) O dígito menos significativo que for trocado por um número menor do que ele
+
+ ```cpp
+ #include <bits/stdc++.h>
+ using namespace std;
+
+ int main() {
+
+ int n;
+ scanf("%d",&n);
+ int arr[n];
+
+ for(int i=0;i<n;i++) scanf("%d",&arr[i]);
+
+ for(int i=0;i<n;i++) {
+ if(arr[i]<arr[n-1]&&(arr[i]==0||arr[i]==5)) {
+ swap(arr[i],arr[n-1]);
+ for(int j=0;j<n;j++) printf("%d%c",arr[j],j==n-1?'\n':' ');
+ exit(0);
+ }
+ }
+
+ for(int i=n-1;i>=0;i--) {
+ if(arr[i]==0||arr[i]==5) {
+ swap(arr[i],arr[n-1]);
+ for(int j=0;j<n;j++) printf("%d%c",arr[j],j==n-1?'\n':' ');
+ exit(0);
+ }
+ }
+
+ puts("-1");
+
+ return 0;
+ }
+ ```
+