1. Python / Говнокод #26010

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    x = 0; y = 0
     
    def gcd(a, b):
    #{
        global x, y
        if (a == 0):
        #{
            x = 0; y = 1;
            return b;
        #}
        d = gcd(b%a, a);
        t = x
        x = y - (b // a) * x;
        y = t;
        return d;
    #}
     
    #int main()
    #{
    #ios_base::sync_with_stdio(0); in.tie(0);
    #I n, p, w, d, dd, ww;
    #in >> n >> p >> w >> d;
    n, p, w, d = map(int, input().split())
    gc = gcd(d, w);
    dd = x; ww = y
    g = w * d // gc;
    if (p % gc):
        print(-1); exit(0)
    dd *= p // gc;
    ww *= p // gc;
    if (ww < 0):
    #{
        di = (-ww + g // w - 1) // (g // w);
        ww += g // w * di;
        dd -= g // d * di;
        if (dd < 0):
            print(-1); exit(0)
    #}
    elif (dd < 0):
    #{
        di = (-dd + g // d - 1) // (g // d);
        dd += g // d * di;
        ww -= g // w * di;
        if (dd < 0):
            print(-1); exit(0)
    #}
    if (ww < 0 or dd < 0):
        print(-1); exit(0)
    di = dd // (g // d);
    dd -= g // d * di;
    ww += g // w * di;
    if (ww + dd <= n):
        print(ww, dd, n - ww - dd)
    else:
        print(-1);
    #}

    Когда на соревновании по спортивному программированию пишешь код на C++ и внезапно понимаешь, что int64_t тебе недостаточно.

    Запостил: fyodor95, 04 Ноября 2019

    Комментарии (52) RSS

    • Синхронный перевод
      Ответить
      • А почему б не перевести на GMP (GNU Multi-Precision Library) не меняя язык? Или олимпиадникам нельзя внешние библиотеки использовать?
        Ответить
        • Нельзя.
          Ответить
        • В этом и заключается одна из главных проблем олимпиадников как программистов. Олимпиадники привыкли, что использовать можно только стандартную либу, а всё остальное надо писать ручками. Собственно, их даже серьёзно натаскивают на это, а умение быстро-быстро нахуярить стандартные алгоритмы считается чуть ли не самым важным скиллом: любой уважающий себя олимпиадник обязан уметь без ошибок напечатать длинную арифметику слепым десятипальцевым методом не глядя в монитор. Именно поэтому я против «олимпиадников» получился, к примеру, эпический говнокод в «Телеграме».
          Ответить
    • Перевёл на «Haxe»:
      class Gcd {
      public var x = 0;
      public var y = 0;
      
      public function new(){}
       
      public function gcd(a:Int, b:Int) 
      {
          if (a == 0)
          {
              x = 0; y = 1;
              return b;
          }
          var d = gcd(b%a, a);
          var t = x;
          x = y - Std.int(b / a) * x;
          y = t;
          return d;
      }
      }
      
      class Main {
      
      static function main():Int
      {
      var n = Std.parseInt(Sys.stdin().readLine());
      var p = Std.parseInt(Sys.stdin().readLine());
      var w = Std.parseInt(Sys.stdin().readLine());
      var d = Std.parseInt(Sys.stdin().readLine());
      var gcd = new Gcd();
      var gc = gcd.gcd(d, w);
      var dd = gcd.x; 
      var ww = gcd.y;
      var g = Std.int(w * d / gc);
      if (p % gc != 0) {
          Sys.println(-1); Sys.exit(0);
      }
      dd *= Std.int(p / gc);
      ww *= Std.int(p / gc);
      var di:Int;
      if (ww < 0)
      {
          di = Std.int((-ww + Std.int(g / w) - 1) / Std.int(g / w));
          ww += Std.int(g / w) * di;
          dd -= Std.int(g / d) * di;
          if (dd < 0) {
              Sys.println(-1); Sys.exit(0);
          }
      }
      else if (dd < 0)
      {
          di = Std.int((-dd + Std.int(g / d) - 1) / Std.int(g / d));
          dd += Std.int(g / d) * di;
          ww -= Std.int(g / w) * di;
          if (dd < 0) {
              Sys.println(-1); Sys.exit(0);
          }
      }
      if (ww < 0 || dd < 0) {
          Sys.println(-1); Sys.exit(0);
      }
      di = Std.int(dd / Std.int(g / d));
      dd -= Std.int(g / d) * di;
      ww += Std.int(g / w) * di;
      if (ww + dd <= n) {
          Sys.println(ww); Sys.println(dd); Sys.println(n - ww - dd);
      } else {
          Sys.println(-1);
      }
      return 0;
      }
      
      }


      Компилируется в «C++», «C#», «PHP», «Java», «Python», «Lua».

      В «JS» и в «AS» компилировать не хочет, потому что нужно реализовать ввод-вывод.
      Ответить
      • Покажи выхлопы
        Ответить
        • Не влезает в 2к. Могу показать кусочки.
          Ответить
        • int Gcd_obj::gcd(int a,int b){
                      	HX_STACKFRAME(&_hx_pos_9d2287ae0d4cf6c8_8_gcd)
          HXLINE(   9)		if ((a == (int)0)) {
          HXLINE(  11)			this->x = (int)0;
          HXDLIN(  11)			this->y = (int)1;
          HXLINE(  12)			return b;
                      		}
          HXLINE(  14)		int d = this->gcd(hx::Mod(b,a),a);
          HXLINE(  15)		int t = this->x;
          HXLINE(  16)		int _hx_tmp = this->y;
          HXDLIN(  16)		int _hx_tmp1 = ::Std_obj::_hx_int(((Float)b / (Float)a));
          HXDLIN(  16)		this->x = (_hx_tmp - (_hx_tmp1 * this->x));
          HXLINE(  17)		this->y = t;
          HXLINE(  18)		return d;
                      	}
          Ответить
        • public virtual int gcd(int a, int b) {
          		unchecked {
          			if (( a == 0 )) {
          				this.x = 0;
          				this.y = 1;
          				return b;
          			}
          			
          			int d = this.gcd(( b % a ), a);
          			int t = this.x;
          			this.x = ( this.y - ( ( b / a ) * this.x ) );
          			this.y = t;
          			return d;
          		}
          	}
          Ответить
        • public int gcd(int a, int b)
          	{
          		//line 9 "C:\\8\\Main.hx"
          		if (( a == 0 )) 
          		{
          			//line 11 "C:\\8\\Main.hx"
          			this.x = 0;
          			//line 11 "C:\\8\\Main.hx"
          			this.y = 1;
          			//line 12 "C:\\8\\Main.hx"
          			return b;
          		}
          		
          		//line 14 "C:\\8\\Main.hx"
          		int d = this.gcd(( b % a ), a);
          		//line 15 "C:\\8\\Main.hx"
          		int t = this.x;
          		//line 16 "C:\\8\\Main.hx"
          		this.x = ( this.y - ( ((int) (( b / a )) ) * this.x ) );
          		//line 17 "C:\\8\\Main.hx"
          		this.y = t;
          		//line 18 "C:\\8\\Main.hx"
          		return d;
          	}
          Ответить
        • public function gcd($a, $b) {
          		if($a === 0) {
          			$this->x = 0;
          			$this->y = 1;
          			return $b;
          		}
          		$d = $this->gcd(_hx_mod($b, $a), $a);
          		$t = $this->x;
          		$tmp = $this->y;
          		$tmp1 = Std::int($b / $a);
          		$this->x = $tmp - $tmp1 * $this->x;
          		$this->y = $t;
          		return $d;
          	}
          Ответить
        • Gcd.prototype = _hx_a(
            'gcd', function(self,a,b) 
              if (a == 0) then 
                self.x = 0;
                self.y = 1;
                do return b end;
              end;
              local d = self:gcd(_G.math.fmod(b, a),a);
              local t = self.x;
              self.x = self.y - (Std.int(b / a) * self.x);
              self.y = t;
              do return d end
            end
            ,'__class__',  Gcd
          )
          Ответить
        • def gcd(self,a,b):
                  if (a == 0):
                      self.x = 0
                      self.y = 1
                      return b
                  d = self.gcd(HxOverrides.mod(b, a),a)
                  t = self.x
                  tmp = self.y
                  tmp1 = None
                  try:
                      tmp1 = int((b / a))
                  except Exception as _hx_e:
                      _hx_e1 = _hx_e.val if isinstance(_hx_e, _HxException) else _hx_e
                      e = _hx_e1
                      tmp1 = None
                  self.x = (tmp - ((tmp1 * self.x)))
                  self.y = t
                  return d
          Ответить
        • Без ввода-вывода ещё могу показать фрагмент JS:
          Gcd.prototype = {
          	gcd: function(a,b) {
          		if(a == 0) {
          			this.x = 0;
          			this.y = 1;
          			return b;
          		}
          		var d = this.gcd(b % a,a);
          		var t = this.x;
          		this.x = this.y - (b / a | 0) * this.x;
          		this.y = t;
          		return d;
          	}
          };


          И AS3:
          public function gcd(a : int,b : int) : int {
          			if(a == 0) {
          				this.x = 0;
          				this.y = 1;
          				return b;
          			};
          			var d : int = this.gcd(b % a,a);
          			var t : int = this.x;
          			this.x = this.y - Std._int(b / a) * this.x;
          			this.y = t;
          			return d;
          		}
          Ответить
          • Целочисленное деление в JS: (b / a | 0). Какое говно )))
            Ответить
        • Фрагменты показал. Угадайте языки программирования по фрагментам кода.
          Ответить
        • Нашёл недописанный форк «Haxe», который умеет генерировать выхлоп на языке «Яибу»:
          https://github.com/paulfitz/haxe

          Бинарников нет, поэтому придётся его собирать. Для сборки нужен «OCaml».
          Ответить
    • Warning: mysqli_real_connect(): (08004/1040): Too many connections in /home/g/guestinho/govnokod.xyz/public_html/wp-includes/wp-db.php on line 1531
      Ответить
      • мартышкина эвристика
        The first block or so of the file is examined for strange characters such as control codes or bytes with the high bit set (that don't look like UTF-8). If more than a third of the bytes appear to be strange, it's a binary file; otherwise, it's a text file. Also, any file containing ASCII NUL (\0) in the first block is considered a binary file. docstore.mik.ua/orelly/perl/prog3/ch03_10.htm
        Ответить
        • >> If more than a third of the bytes appear to be strange, it's a binary file

          Почему именно треть? Есть академические исследования на эту тему?
          Ответить
          • Использующие латинский алфавит: ok.
            Весь остальной мир: Ясно. Пошел я на хуй.
            Ответить
            • Там примечание: that don't look like UTF-8. Эта штука проверяет каждый байт с установленным старшим битом, может ли он быть частью цепочки UTF-8, или сразу все забраковывает?
              Ответить
              • А, ну да, не заметил. Ну, правда однобитные кодировки тоже идут лесом, но тут уж сами виноваты.
                Ответить
                • однобитные кодировки -- это когда у тебя один бит на символ?

                  Типа "ку" и "кю"?
                  Ответить
            • не латниский, а английский

              туркам с исландцами тоже не айс
              Ответить
              • А что не так? Большинство букв-то латинские. Ну разве что если там написано какое-нибудь Źdźbło Żółć в однобайтовой кодировке. Ну так сбои эвристики случаются, см. Notepad и "Bush hid the facts" или текст, начинающийся с "яю".
                Ответить
                • >> As of Windows Vista, Notepad has been modified to use a different detection algorithm that does not exhibit the bug, but IsTextUnicode remains unchanged in the operating system, so any other tools that use the function are still affected.

                  Какой багор )))
                  Ответить
        • Досовская программа FC для сравнения файлов считала файл двоичным, если среди первых ста байтов встретится байт, равный нулю.
          Ответить
          • А между тем в Яунде 28 градусов тепла вероятность того, что в бинарном файле с равномерным распределением байт в первых ста не встретится нулевой, равна примерно 0.6761. Какой багор )))
            Ответить

    Добавить комментарий