Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแข่งขันเอาท์พุทการแข่งขันใน C ++


สมมุติว่าเรามี n ทีมและเรามักจะจัดทีมที่ค่อนข้างแข็งแกร่งให้เล่นกับทีมที่ค่อนข้างอ่อนแอ เช่น ให้ทีมอันดับ 1 เล่นกับทีมที่มีอันดับ n กลยุทธ์นี้จะทำให้การแข่งขันน่าสนใจยิ่งขึ้น ตอนนี้เราต้องหาแมตช์สุดท้ายของการแข่งขันในรูปแบบของสตริง

ทีมเหล่านี้จะได้รับในรูปแบบของจำนวนเต็มบวกตั้งแต่ 1 ถึง n ซึ่งแสดงถึงอันดับเริ่มต้น ดังนั้น อันดับ 1 คือทีมที่แข็งแกร่งที่สุด และอันดับ n คือทีมที่อ่อนแอที่สุด เราจะใช้วงเล็บและลูกน้ำเพื่อแสดงการจับคู่ทีมแข่งขัน - วงเล็บ ('(', ')') สำหรับการจับคู่ และเครื่องหมายจุลภาค (',') สำหรับการแบ่งพาร์ติชัน ในระหว่างกระบวนการจับคู่ในแต่ละรอบ เรามักจะต้องปฏิบัติตามกลยุทธ์ในการสร้างคู่ที่แข็งแกร่งกับคู่ที่อ่อนแอ

ดังนั้น หากอินพุตเท่ากับ 4 เอาต์พุตจะเป็น ((1,4), (2,3))

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน create() ซึ่งจะใช้เวลาต่ำ สูง อาร์เรย์ v2 อาร์เรย์ v1

  • ถ้าต่ำ>=สูง แล้ว −

    • กลับ

  • แทรก "(" concatenate v1[low] concatenate "," concatenate v1[high] concatenate ") ที่ส่วนท้ายของ v2

  • สร้าง(ต่ำ + 1, สูง - 1, v2, v1)

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

  • กำหนดอาร์เรย์ v1, v2

  • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <=n อัปเดต (เพิ่ม i ขึ้น 1) ทำ -

    • แทรกแปลง i เป็นสตริงที่ส่วนท้ายของ v1

  • ในขณะที่ขนาดของ v1> 1 ทำ -

    • สร้าง(0, ขนาดของ v1, v2, v1)

    • v1 :=v2

    • ล้างอาร์เรย์ v2

  • คืนค่าองค์ประกอบสุดท้ายของ v1

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   void create(int low, int high, vector <string>& v2, vector <string>& v1){
      if (low >= high)
         return;
      v2.push_back("(" + v1[low] + "," + v1[high] + ")");
      create(low + 1, high - 1, v2, v1);
   }
   string findContestMatch(int n) {
      vector v1, v2;
      for (int i = 1; i <= n; i++) {
         v1.push_back(to_string(i));
      }
      while (v1.size() > 1) {
         create(0, v1.size() - 1, v2, v1);
         v1 = v2;
         v2.clear();
      }
      return v1.back();
   }
};
main(){
   Solution ob;
   cout << (ob.findContestMatch(4));
}

อินพุต

4

ผลลัพธ์

((1,4),(2,3))