From c4fbb0ad7fe9e3f5035a7f431b6887427556690c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Sun, 24 Mar 2024 12:42:20 +0100 Subject: dn04a in dn04b failed attempt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dn04b: ni vseeno, a se premaknemo levo ali desno, ko a+b ni enako k, treba se je pomakniti v smer, kjer pomik najmanj spremeni vrednost a. ampak obstaja boljši in lažji implementacijski način za dn04b --- "\305\241ola/p2/dn/DN04a_63230317.c" | 30 +++++++++++++++++++++++++++ "\305\241ola/p2/dn/DN04b_63230317.c" | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 "\305\241ola/p2/dn/DN04a_63230317.c" create mode 100644 "\305\241ola/p2/dn/DN04b_63230317.c" diff --git "a/\305\241ola/p2/dn/DN04a_63230317.c" "b/\305\241ola/p2/dn/DN04a_63230317.c" new file mode 100644 index 0000000..9c1c1b1 --- /dev/null +++ "b/\305\241ola/p2/dn/DN04a_63230317.c" @@ -0,0 +1,30 @@ +#include +#include +int main (void) { + int n; + scanf("%d", &n); + int a[2*n]; + unsigned int lsum = 0; + unsigned int rsum = 0; + for (int i = 0; i < 2*n; i++) + scanf("%d", &a[i]); + for (int k = 0;; k++) { + if (lsum == rsum) { + bool pravilno = true; + for (int j = 0; j < n; j++) { + // fprintf(stderr, "%d\t%d\t%d\t%d\n", j, a[j], (n+(n-k+j) % n), a[(n+(n-k+j) % n)]); + if (a[j] == a[n+(n-k+j) % n]) + continue; + pravilno = false; + break; + } + if (pravilno) { + printf("%d\n", k); + break; + } + } + lsum += a[k]; + rsum += a[2*n-1-k]; + + } +} diff --git "a/\305\241ola/p2/dn/DN04b_63230317.c" "b/\305\241ola/p2/dn/DN04b_63230317.c" new file mode 100644 index 0000000..105890a --- /dev/null +++ "b/\305\241ola/p2/dn/DN04b_63230317.c" @@ -0,0 +1,39 @@ +#include +#include +int main (void) { + int n, k, s = 0; + scanf("%d %d", &n, &k); + int a[n]; + for (int i = 0; i < n; i++) + scanf("%d", &a[i]); + int d, l = n-1; + for (int i = 0; i < n-1; i++) + if (2*a[i] <= k && 2*a[i+1] > k) + l = i; + d = l; + fprintf(stderr, "l je %d, d je %d\n", l, d); + do { + if (a[l]+a[d] == k) { + int lc = l; + int dc = d; + int add = 0; + while (lc >= 0 && a[lc] == a[l]) + lc--; + while (dc <= n-1 && a[dc] == a[d]) + dc++; + if (a[l] == a[d]) // (dc-lc) choose 2 + add = ((dc-lc-1)*n)/2; + else + add = (d-dc+1)*(lc-l+1); + fprintf(stderr, "l=%d, d=%d, a[l]=%d, a[d]=%d, lc=%d, dc=%d, add=%d\n", l, d, a[l], a[d], lc, dc, add); + l = lc; + d = dc; + s += add; + } + if (l-1 >= 0) + l--; + if (d+1 < n) + d++; + } while (d < n-1 || l > 0); + printf("%d\n", s); +} -- cgit v1.2.3