白駿2875:大会または実習生


https://www.acmicpc.net/problem/2875

1.近接

  • n,m,kの範囲が小さいため,階調アルゴリズムを採用した.
    (グリンディアルゴリズム:現在最も速い答えを見つける)
  • そのため、まずkを考慮せずにチームを組んでからkを減算します.
  • kがない場合のグループ数は、男子が少なければ男子数(5-21->2グループ)に等しく、女子数が少なければ女子/2に等しい.(6103->3グループ)#1
  • 彼によって残りの人を助けに来て、すぐに実習生を派遣します.2
  • でも足りない人はすでに配属されているチームの中から抽選されるはずですが、チームの総人数は3名なので必ず抽選しなければなりません、#3、あと1、2名残っていれば、もう1つのチーム#4を抽選しなければなりません.
  • 2.私の回答

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(NULL);
    	cout.tie(NULL);
    
    	int n, m, k;
    	cin >> n >> m >> k;
    
    	if (n == 0 || m == 0) cout << 0 << "\n";
    
    	int answer = 0;
    
    	answer =min(n / 2,m); //#1
    
    	n = n - answer * 2; //#2
    	m = m - answer;
    	
    	if (n + m < k) {
    		int lack = k - (n + m);
    
    		if (lack % 3 == 0)	answer -= lack / 3; //#3
    		else answer -= (lack / 3)+1; #4
    	}
    
    	cout << answer << "\n";
    
    	return 0;
    }
    
    简単な问题ですが、デバッグに苦労しています.家族制ですか.