C3EQUALZ

Задание 27 ЕГЭ

Apr 8th, 2022 (edited)
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.02 KB | None | 0 0
  1. //Необходимо выбрать из каждой пары ровно одно число так,
  2. //чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной
  3. ###
  4. ReadLines('C:\Users\danko\OneDrive\Рабочий стол\27-B_demo.txt').Skip(1).Sel(s->s.ToIs).
  5. Agr(|0|,(a,b)->a.Cart(b,(x,y)->x+y).GrBy(x->x mod 3).Sel(s->s.Max).ToA).Wh(x->x mod 3>0).Max.Pr;
  6. //если просят выбрать два числа, то в Cart закидываем Cmb(2).Sel(p->p.Sum)
  7. //по методу мчс каждый раз фильтруем
  8. ------------------------------------------------------------------------------------------------------------------------
  9. //подпоследовательность, где есть максимальная сумма, которая делится на 89
  10. ###
  11. var (sum,maxl,s1):=(0,0,0);
  12. var csum:=|int64(10**20)|*89;
  13. var s:=ReadAllText('C:\Users\danko\OneDrive\Рабочий стол\27_A.txt').ToIs.Skip(1).ToA;
  14. for var i:=1 to s.Length -1 do begin
  15.   sum+=s[i];
  16.   if sum.D(89) then maxl:=max(maxl,sum) else begin
  17.     s1:=sum - csum[sum mod 89];
  18.     maxl:=max(maxl,s1);
  19.     end;
  20.   csum[sum mod 89]:=min(csum[sum mod 89],sum);
  21.   end;
  22.   print(maxl);
  23.  -------------------------------------------------------------------------------------------------------------------------
  24. //количество пар, где произведение кратно 15
  25. ###
  26. var f:=ReadAllText('C:\Users\danko\OneDrive\Рабочий стол\27-B_demo.txt').ToIs.Skip(1).ToA;
  27. var (count,k,k15):=(0,0,0);
  28. var (k3,k5):=(0,0);
  29. for var i:=0 to f.Length-1 do begin
  30.   if f[i].D(15) then count+=k else
  31.     if f[i].D(5) then count+=k3 else
  32.       if f[i].D(3) then count+=k15 else
  33.         count+=k15;
  34.   k+=1;
  35.   if f[i].D(3) then k3+=1;
  36.   if f[i].D(5) then k5+=1;
  37.   if f[i].D(15) then k15+=1;
  38.   end;
  39.   print(count);
  40. ----------------------------------------------------------------------------------------------------------------------------
  41. //количество пар, где сумма кратна 127
  42. ###
  43. var f:=ReadAllText('C:\Users\danko\OneDrive\Рабочий стол\27-B_demo.txt').ToIs.Skip(1).ToA;
  44. var (ost,count):=(0,0);
  45. var k:=|0|*127;
  46. for var i:=0 to f.Length-1 do begin
  47.   if f[i].D(127) then ost:=0 else ost:=127-(f[i] mod 127);
  48.   count+=k[ost];
  49.   k[f[i] mod 127]+=1;
  50.   end;
  51.   print(count);
  52. -------------------------------------------------------------------------------------------------------------------------------
  53. //максимальная сумма пары, которая кратна 107
  54. ###
  55. var f:=ReadAllText('C:\Users\danko\OneDrive\Рабочий стол\27-B_demo.txt').ToIs.Skip(1).ToA;
  56. var (ost,maxs):=(0,0);
  57. var k:=|-1000|*107;
  58. for var i:=0 to f.Length-1 do begin
  59.   if f[i].D(107) then ost:=0 else ost:=107-(f[i] mod 107);
  60.   remax(maxs,f[i]+k[ost]);
  61.   remax(k[f[i] mod 107],f[i]);
  62.   end;
  63.   print(maxs);
  64. -----------------------------------------------------------------------------------------------------------------------------------
  65. //Минимальная сумма пары, где одно из чисел кратно 17
  66. ###
  67. var f:=ReadAllText('C:\Users\danko\OneDrive\Рабочий стол\27-B_demo.txt').ToIs.Skip(1).ToA;
  68. var (m,min17,sum):=(10000,10000,10000);
  69. for var i:=0 to f.Length-1 do begin
  70.   if f[i].D(17) then sum:=min(sum,f[i]+m) else sum:=min(sum,f[i]+min17);
  71.   m:=min(m,f[i]);
  72.   if f[i].D(17) then min17:=min(min17,f[i]);
  73.   end;
  74.   print(sum);
  75. ---------------------------------------------------------------------------------------------------------------------------------------
  76. ///Задачи на пары с расстоянием
  77. ###
  78. var q:= new List<int>;
  79. var (m,count,x):=(7,0,0);
  80. var k:=|0|*999;
  81. assign(input,'C:\Users\danko\OneDrive\Рабочий стол\26.txt');
  82. var n:=ri;
  83. loop m do q.Add(ri);
  84. loop n-m do begin
  85.   x:=ri;
  86.   count+=k[abs(x) mod 999];
  87.   k[q[0] mod 999]+=1;
  88.   q.Append(x);
  89.   q.Remove(0);
  90.   end;
  91. print(count);
  92.  
Add Comment
Please, Sign In to add comment