Computer >> Máy Tính >  >> Lập trình >> C ++

Chơi với chip trong C ++


Giả sử có một số chip, chip thứ i hiện tại ở vị trí chip [i]. Chúng tôi có thể thực hiện bất kỳ trong số hai loại hoạt động sau bất kỳ số lần nào tùy ý (có thể làzero) trên bất kỳ chip nào -

  • Di chuyển chip thứ i 2 đơn vị sang bên trái hoặc sang bên phải với chi phí là 0.

  • Di chuyển chip thứ i 1 đơn vị sang bên trái hoặc sang bên phải với chi phí là 1.

Ban đầu, có thể có hai hoặc nhiều chip. Chúng tôi phải trả lại chi phí tối thiểu cần thiết để di chuyển tất cả các chip về cùng một vị trí. Vị trí cuối cùng có thể là bất cứ thứ gì. Vì vậy, nếu mảng của chip ban đầu là [2,2,2,3,3], thì sản lượng sẽ là 2. Cả chip thứ tư và thứ năm sẽ được chuyển đến vị trí thứ hai với chi phí 1. Vì vậy, tổng chi phí tối thiểu sẽ là 2

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • lẻ:=0 và chẵn:=0

  • cho tôi trong phạm vi từ 0 đến chiều dài của mảng

    • nếu chip [i] là lẻ thì tăng lẻ, ngược lại thì tăng chẵn

  • trả về tối thiểu là số lẻ và số chẵn.

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minCostToMoveChips(vector<int>& chips) {
      int odd =0;
      int even = 0;
      for(int i =0;i<chips.size();i++){
         if(chips[i]&1)odd++;
         else even++;
      }
      return min(odd,even);
   }
};
main(){
   Solution ob;
   vector<int> v1 = {2,2,2,3,3};
   cout << ob.minCostToMoveChips(v1);
}

Đầu vào

[2,2,2,3,3]

Đầu ra

2