xxeell

12-15 не см

Oct 28th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 19.24 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Diagnostics;
  7.  
  8. namespace ForDZ
  9. {
  10.     static class pr_12_15
  11.     {
  12.         private static void generate_input1()
  13.         {
  14.             StreamWriter writer = new StreamWriter("input.txt");
  15.  
  16.             Random random = new Random();
  17.             int n = 10000;
  18.             for (int a = 0; a < n; a++)
  19.             {
  20.                 writer.Write(random.Next(1, 10));
  21.             }
  22.  
  23.             writer.Close();
  24.         }
  25.         private static void generate_input2()
  26.         {
  27.             StreamWriter writer = new StreamWriter("input.txt");
  28.  
  29.             Random random = new Random();
  30.             int n = 100000;
  31.             for (int a = 0; a < n; a++)
  32.             {
  33.                 writer.Write(random.Next(1, 10));
  34.             }
  35.  
  36.             writer.Close();
  37.         }
  38.  
  39.         static long GetHash(long[] h, int L, int R)
  40.         {
  41.             if (L > 0) return h[R] - h[L - 1];
  42.             return h[R];
  43.         }
  44.  
  45.         static long GetHashRevers(long[] h_r, int L, int R)
  46.         {
  47.             if (R < h_r.Length - 1) return h_r[L] - h_r[R + 1];
  48.             return h_r[L];
  49.         }
  50.  
  51.         static bool IsPalindrome(long[] h, long[] h_r, long[] pwp, int L, int R)
  52.         {
  53.             return GetHash(h, L, R) * pwp[h.Length - R - 1] == GetHashRevers(h_r, L, R) * pwp[L];
  54.         }
  55.  
  56.         static void Print(int[] oddCount, int[] evenCount, string s)
  57.         {
  58.             StreamWriter writer = new StreamWriter("input.txt");
  59.  
  60.             Console.WriteLine("Палиндромы:");
  61.             writer.WriteLine("Палиндромы:");
  62.             string t;
  63.  
  64.             int max = 0;
  65.             for (int i = 0; i < oddCount.Length; ++i)
  66.             {
  67.                 if (oddCount[i] > max)
  68.                 {
  69.                     max = oddCount[i];
  70.                 }
  71.             }
  72.             Console.WriteLine($"> {max * 2 - 1}:");
  73.             writer.WriteLine($"> {max * 2 - 1}:");
  74.             for (int i = 0; i < oddCount.Length; ++i)
  75.             {
  76.                 if (oddCount[i] == max)
  77.                 {
  78.                     t = s.Substring(i - oddCount[i] + 1, oddCount[i] * 2 - 1);
  79.                     Console.WriteLine(t);
  80.                     writer.WriteLine(t);
  81.                 }
  82.             }
  83.  
  84.             max = 0;
  85.             for (int i = 0; i < evenCount.Length; ++i)
  86.             {
  87.                 if (evenCount[i] > max)
  88.                 {
  89.                     max = evenCount[i];
  90.                 }
  91.             }
  92.             Console.WriteLine($"> {max * 2}:");
  93.             writer.WriteLine($"> {max * 2}:");
  94.             for (int i = 0; i < evenCount.Length; ++i)
  95.             {
  96.                 if (evenCount[i] == max)
  97.                 {
  98.                     t = s.Substring(i - evenCount[i], evenCount[i] * 2);
  99.                     Console.WriteLine(t);
  100.                     writer.WriteLine(t);
  101.                 }
  102.             }
  103.  
  104.             writer.Close();
  105.         }
  106.  
  107.         private static void func(string s)
  108.         {
  109.             int n = s.Length;
  110.             const long P = 11;
  111.  
  112.             long[] pwp = new long[n];
  113.             pwp[0] = 1;
  114.             for (int i = 1; i < n; i++)
  115.             {
  116.                 pwp[i] = pwp[i - 1] * P;
  117.             }
  118.  
  119.             long[] h = new long[n];
  120.             long[] h_r = new long[n];
  121.             int[] oddCount = new int[n];
  122.             int[] evenCount = new int[n];
  123.  
  124.             Stopwatch timer = new Stopwatch();
  125.             timer.Start();
  126.  
  127.             h[0] = (s[0] - '0') * pwp[0];
  128.             h_r[n - 1] = (s[n - 1] - '0') * pwp[0];
  129.             for (int i = 1; i < n; i++)
  130.             {
  131.                 h[i] = (s[i] - '0') * pwp[i];
  132.                 h_r[n - 1 - i] = (s[n - 1 - i] - '0') * pwp[i];
  133.  
  134.                 h[i] += h[i - 1];
  135.                 h_r[n - 1 - i] += h_r[n - i];
  136.             }
  137.  
  138.             for (int i = 0; i < n; i++)
  139.             {
  140.                 int left = 1, right = Math.Min(i + 1, n - i);
  141.                 while (left <= right)
  142.                 {
  143.                     int middle = (left + right) / 2;
  144.                     if (IsPalindrome(h, h_r, pwp, i - middle + 1, i + middle - 1))
  145.                     {
  146.                         oddCount[i] = middle;
  147.                         left = middle + 1;
  148.                     }
  149.                     else
  150.                     {
  151.                         right = middle - 1;
  152.                     }
  153.                 }
  154.             }
  155.  
  156.             for (int i = 0; i < n; i++)
  157.             {
  158.                 int left = 1, right = Math.Min(i, n - i);
  159.                 while (left <= right)
  160.                 {
  161.                     int middle = (left + right) / 2;
  162.                     if (IsPalindrome(h, h_r, pwp, i - middle, i + middle - 1))
  163.                     {
  164.                         evenCount[i] = middle;
  165.                         left = middle + 1;
  166.                     }
  167.                     else
  168.                     {
  169.                         right = middle - 1;
  170.                     }
  171.                 }
  172.             }
  173.  
  174.             timer.Stop();
  175.             Console.WriteLine($"{timer.ElapsedMilliseconds}ms ~ {timer.ElapsedTicks}tics");
  176.  
  177.             //Print(oddCount, evenCount, s);
  178.         }
  179.  
  180.         public static void Task()
  181.         {
  182.             StreamReader reader;
  183.             StringBuilder input = new StringBuilder();
  184.  
  185.             Console.WriteLine("> 10000 : ");
  186.             for (int i = 0; i < 10; i++)
  187.             {
  188.                 generate_input1();
  189.                 reader = new StreamReader("input.txt");
  190.                 input.Clear();
  191.                 while (!reader.EndOfStream)
  192.                 {
  193.                     input.Append(reader.ReadLine());
  194.                 }
  195.                 reader.Close();
  196.  
  197.                 func(input.ToString());
  198.             }
  199.  
  200.             Console.WriteLine("> 100000 : ");
  201.             for (int i = 0; i < 10; i++)
  202.             {
  203.                 generate_input2();
  204.                 reader = new StreamReader("input.txt");
  205.                 input.Clear();
  206.                 while (!reader.EndOfStream)
  207.                 {
  208.                     input.Append(reader.ReadLine());
  209.                 }
  210.                 reader.Close();
  211.  
  212.                 func(input.ToString());
  213.             }
  214.         }
  215.     }
  216.     static class pr_14_I_18
  217.     {
  218.         struct SPoint
  219.         {
  220.             public int X { get; private set; }
  221.             public int Y { get; private set; }
  222.             public int Z { get; private set; }
  223.  
  224.             public SPoint(int x, int y, int z)
  225.             {
  226.                 X = x;
  227.                 Y = y;
  228.                 Z = z;
  229.             }
  230.  
  231.             public int GetSqrLength(SPoint point)
  232.             {
  233.                 int tx = point.X - X;
  234.                 int ty = point.Y - Y;
  235.                 int tz = point.Z - Z;
  236.  
  237.                 return tx * tx + ty * ty + tz * tz;
  238.             }
  239.  
  240.             public override string ToString()
  241.             {
  242.                 return string.Format($"({X}, {Y}, {Z})");
  243.             }
  244.         }
  245.  
  246.         private static int GetPerimeterOfSqr(SPoint p1, SPoint p2, SPoint p3)
  247.         {
  248.             int l1 = p1.GetSqrLength(p2);
  249.             int l2 = p2.GetSqrLength(p3);
  250.             int l3 = p3.GetSqrLength(p1);
  251.             return l1 + l2 + l3;
  252.         }
  253.  
  254.         private static void generate_input()
  255.         {
  256.             StreamWriter writer = new StreamWriter("input.txt");
  257.  
  258.             Random random = new Random();
  259.             int n = 3;
  260.             for (int a = 0; a <= n; a++)
  261.             {
  262.                 for (int b = 0; b <= n; b++)
  263.                 {
  264.                     for (int c = 0; c <= n; c++)
  265.                     {
  266.                         writer.WriteLine($"{a} {b} {c}");
  267.                     }
  268.                 }
  269.             }
  270.  
  271.             writer.Close();
  272.         }
  273.  
  274.         struct Triangle
  275.         {
  276.             public SPoint a, b, c;
  277.             public Triangle(SPoint a, SPoint b, SPoint c)
  278.             {
  279.                 this.a = a;
  280.                 this.b = b;
  281.                 this.c = c;
  282.             }
  283.         }
  284.  
  285.         public static void Task()
  286.         {
  287.             generate_input();
  288.  
  289.             StreamReader reader = new StreamReader("input.txt");
  290.             List<SPoint> input = new List<SPoint>();
  291.             while (!reader.EndOfStream)
  292.             {
  293.                 string s = reader.ReadLine();
  294.                 if (s.Length == 0) continue;
  295.  
  296.                 int[] t_input_array = Array.ConvertAll(
  297.                     s.Trim().Split(
  298.                         new char[] { ' ' },
  299.                         StringSplitOptions.RemoveEmptyEntries),
  300.                     int.Parse);
  301.                 if (t_input_array.Length != 3) continue;
  302.  
  303.                 SPoint t_point = new SPoint(
  304.                     t_input_array[0],
  305.                     t_input_array[1],
  306.                     t_input_array[2]);
  307.                 input.Add(t_point);
  308.             }
  309.             reader.Close();
  310.  
  311.             SPoint[] points = input.ToArray();
  312.             Triangle max_triangle = new Triangle(points[0], points[0], points[0]);
  313.             int max_perimeter = -1;
  314.  
  315.             for (int a = 0, a_end = points.Length - 2; a < a_end; a++)
  316.             {
  317.                 for (int b = a + 1, b_end = points.Length - 1; b < b_end; b++)
  318.                 {
  319.                     for (int c = b + 1, c_end = points.Length; c < c_end; c++)
  320.                     {
  321.                         int t_perimeter = GetPerimeterOfSqr(points[a], points[b], points[c]);
  322.  
  323.                         //Console.Write($"> (");
  324.                         //Console.Write($"{points[a].ToString()} ");
  325.                         //Console.Write($"{points[b].ToString()} ");
  326.                         //Console.Write($"{points[c].ToString()}) -> ");
  327.                         //Console.WriteLine(t_perimeter);
  328.  
  329.                         if (t_perimeter > max_perimeter)
  330.                         {
  331.                             max_perimeter = t_perimeter;
  332.                             max_triangle = new Triangle(points[a], points[b], points[c]);
  333.                         }
  334.                     }
  335.                 }
  336.             }
  337.  
  338.             Console.Write($"Result: ");
  339.             Console.Write($"{max_triangle.a.ToString()} ");
  340.             Console.Write($"{max_triangle.b.ToString()} ");
  341.             Console.Write($"{max_triangle.c.ToString()} ");
  342.             Console.WriteLine();
  343.         }
  344.     }
  345.  
  346.     static class pr_14_II_10
  347.     {
  348.         struct Student : IComparable<Student>
  349.         {
  350.             public string FIO { get; private set; }
  351.             public int Groupe { get; private set; }
  352.             public int Result { get; private set; }
  353.  
  354.             public Student(string n, string ln, string sn, int g, int r)
  355.             {
  356.                 FIO = string.Format($"{n} {ln} {sn}");
  357.                 Groupe = g;
  358.                 Result = r;
  359.             }
  360.  
  361.             public int CompareTo(Student student)
  362.             {
  363.                 if (Result < student.Result) return -1;
  364.                 if (Result > student.Result) return 1;
  365.                 return 0;
  366.             }
  367.  
  368.             public override string ToString()
  369.             {
  370.                 return string.Format($"{FIO,30}, {Groupe} : {Result}");
  371.             }
  372.         }
  373.  
  374.         private static Student student_parse(string s)
  375.         {
  376.             string[] input = s.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  377.             Student res = new Student(
  378.                 input[0], input[1], input[2],
  379.                 int.Parse(input[3]), int.Parse(input[4]));
  380.             return res;
  381.         }
  382.  
  383.         private static void generate_input()
  384.         {
  385.             StreamWriter writer = new StreamWriter("input.txt");
  386.  
  387.             Random random = new Random();
  388.             int cnt = random.Next(200, 301);
  389.             int n;
  390.             StringBuilder builder = new StringBuilder(11);
  391.  
  392.             for (int oi = 0; oi < cnt; oi++)
  393.             {
  394.                 for (int names = 0; names < 3; names++)
  395.                 {
  396.                     n = random.Next(3, 11);
  397.                     builder.Clear();
  398.  
  399.                     builder.Append((char)random.Next((int)('А'), (int)('Я') + 1));
  400.                     for (int i = 0; i < n; i++)
  401.                     {
  402.                         builder.Append((char)random.Next((int)('а'), (int)('я') + 1));
  403.                     }
  404.                     builder.Append(" ");
  405.  
  406.                     writer.Write(builder.ToString());
  407.                 }
  408.  
  409.                 writer.Write($"{random.Next(111, 1000)} ");
  410.  
  411.                 writer.WriteLine(random.Next(10, 100));
  412.             }
  413.             writer.Close();
  414.         }
  415.  
  416.         public static void Task()
  417.         {
  418.             generate_input();
  419.             StreamReader reader = new StreamReader("input.txt");
  420.             List<Student> input = new List<Student>();
  421.  
  422.             while (!reader.EndOfStream)
  423.             {
  424.                 input.Add(student_parse(reader.ReadLine()));
  425.             }
  426.  
  427.             reader.Close();
  428.  
  429.             input.Sort();
  430.             Console.WriteLine(input[0].ToString());
  431.  
  432.             for (int i = 1, cnt = 0; i < input.Count; i++)
  433.             {
  434.                 if (input[i].Result != input[i - 1].Result)
  435.                 {
  436.                     cnt++;
  437.                 }
  438.                 if (cnt >= 3) break;
  439.                 Console.WriteLine(input[i].ToString());
  440.             }
  441.  
  442.             Console.WriteLine();
  443.         }
  444.     }
  445.  
  446.     static class pr_15_I_20
  447.     {
  448.         private static void generate_input()
  449.         {
  450.             StreamWriter writer = new StreamWriter("input.txt");
  451.  
  452.             Random random = new Random();
  453.             int n = 1000;
  454.  
  455.             for (int i = 0; i < n; i++)
  456.             {
  457.                 writer.Write($"{random.Next(1, 1000)} ");
  458.             }
  459.  
  460.             writer.Close();
  461.         }
  462.  
  463.         public static void Task()
  464.         {
  465.             generate_input();
  466.             StreamReader reader = new StreamReader("input.txt");
  467.             List<int> input = new List<int>();
  468.             char[] sep = { ' ' };
  469.  
  470.             while (!reader.EndOfStream)
  471.             {
  472.                 input.AddRange(
  473.                     from s in
  474.                         reader.ReadLine().Trim().Split(sep,
  475.                         StringSplitOptions.RemoveEmptyEntries)
  476.                     select int.Parse(s));
  477.             }
  478.             reader.Close();
  479.  
  480.             StreamWriter writer = new StreamWriter("input.txt");
  481.             foreach (int i in
  482.                 from n in input orderby n descending where n % 2 == 1 select 2 * n)
  483.             {
  484.                 writer.Write($"{i} ");
  485.                 Console.Write($"{i} ");
  486.             }
  487.             writer.Close();
  488.  
  489.             Console.WriteLine();
  490.         }
  491.     }
  492.  
  493.     static class pr_15_II_20
  494.     {
  495.         struct Student
  496.         {
  497.             public string Name { get; private set; }
  498.             public string Fak { get; private set; }
  499.             public int Course { get; private set; }
  500.             public int Groupe { get; private set; }
  501.             public int Res1 { get; private set; }
  502.             public int Res2 { get; private set; }
  503.             public int Res3 { get; private set; }
  504.  
  505.             public Student(string n, string f, int c, int g, int r1, int r2, int r3)
  506.             {
  507.                 Name = n;
  508.                 Fak = f;
  509.                 Course = c;
  510.                 Groupe = g;
  511.                 Res1 = r1;
  512.                 Res2 = r2;
  513.                 Res3 = r3;
  514.             }
  515.  
  516.             public override string ToString()
  517.             {
  518.                 return string.Format($"{Name,10}, {Fak,5}, {Course}, {Groupe} : {Res1}, {Res2}, {Res3}");
  519.             }
  520.         }
  521.  
  522.         private static Student student_parse(string s)
  523.         {
  524.             string[] input = s.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  525.             Student res = new Student(
  526.                 input[0], input[1],
  527.                 int.Parse(input[2]),
  528.                 int.Parse(input[3]),
  529.                 int.Parse(input[4]),
  530.                 int.Parse(input[5]),
  531.                 int.Parse(input[6]));
  532.             return res;
  533.         }
  534.  
  535.         private static void generate_input()
  536.         {
  537.             StreamWriter writer = new StreamWriter("input.txt");
  538.  
  539.             Random random = new Random();
  540.             int cnt = random.Next(200, 301);
  541.             int n;
  542.             StringBuilder builder = new StringBuilder(11);
  543.  
  544.             for (int oi = 0; oi < cnt; oi++)
  545.             {
  546.                 n = random.Next(3, 11);
  547.                 builder.Clear();
  548.                 builder.Append((char)random.Next((int)('А'), (int)('Я') + 1));
  549.                 for (int i = 0; i < n; i++)
  550.                 {
  551.                     builder.Append((char)random.Next((int)('а'), (int)('я') + 1));
  552.                 }
  553.                 builder.Append(" ");
  554.                 writer.Write(builder.ToString());
  555.  
  556.                 n = 5;
  557.                 builder.Clear();
  558.                 builder.Append((char)random.Next((int)('А'), (int)('Я') + 1));
  559.                 for (int i = 0; i < n; i++)
  560.                 {
  561.                     builder.Append((char)random.Next((int)('а'), (int)('я') + 1));
  562.                 }
  563.                 builder.Append(" ");
  564.                 writer.Write(builder.ToString());
  565.  
  566.                 writer.Write($"{random.Next(1, 5)} ");
  567.  
  568.                 writer.Write($"{random.Next(1, 10)} ");
  569.  
  570.                 writer.Write($"{random.Next(2, 6)} ");
  571.  
  572.                 writer.Write($"{random.Next(2, 6)} ");
  573.  
  574.                 writer.WriteLine(random.Next(2, 6));
  575.             }
  576.             writer.Close();
  577.         }
  578.  
  579.         public static void Task()
  580.         {
  581.             generate_input();
  582.             StreamReader reader = new StreamReader("input.txt");
  583.             List<Student> input = new List<Student>();
  584.             char[] sep = { ' ' };
  585.  
  586.             while (!reader.EndOfStream)
  587.             {
  588.                 input.Add(student_parse(reader.ReadLine().Trim()));
  589.             }
  590.             reader.Close();
  591.  
  592.             StreamWriter writer = new StreamWriter("input.txt");
  593.  
  594.             foreach (var students in
  595.                 from student in input
  596.                 orderby student.Course
  597.                 where student.Res1 == 5
  598.                 where student.Res2 == 5
  599.                 where student.Res3 == 5
  600.                 group student by student.Course)
  601.             {
  602.                 writer.WriteLine($"> {students.Key}:");
  603.                 Console.WriteLine($"> {students.Key}:");
  604.  
  605.                 foreach (Student student in students)
  606.                 {
  607.                     writer.WriteLine($"{student.ToString()}");
  608.                     Console.WriteLine($"{student.ToString()}");
  609.                 }
  610.             }
  611.  
  612.             writer.Close();
  613.  
  614.             Console.WriteLine();
  615.         }
  616.     }
  617.  
  618.     class Program
  619.     {
  620.         static void Main(string[] args)
  621.         {
  622.             //Console.BufferHeight = 3000;
  623.             //pr_12_15.Task();
  624.             pr_14_I_18.Task();
  625.             //pr_14_II_10.Task();
  626.             //pr_15_I_20.Task();
  627.             //pr_15_II_20.Task();
  628.  
  629.             Console.WriteLine("\n\nend.");
  630.             Console.ReadKey();
  631.         }
  632.     }
  633. }
Add Comment
Please, Sign In to add comment