Заметим, что игра должна закончиться в 2 хода. Минимальное значение количества камней в обеих кучах, при котором игра заканчивается — 77. Эта ситуация возможна, например, когда в первой куче 7 камней, а во второй — 70. Значит, чтобы Ваня мог выиграть своим первым ходом, количество камней во второй куче должно быть ≥35. Поскольку удваиванием число 35 получить нельзя, после первого хода Пети во второй куче должно получиться 36 камней. Это возможно при значении S = 18. При таком минимальном значении S Ваня выиграет своим первым ходом после неудачного хода Пети.
bool ok1(int a, int b, int c){
return (a+b > c && a+c > b && b+c > a) && min(a,min(b,c)) > 0;
}
bool ok2(int a, int b, int c){
return ok1(a,b,c) && (a == b || a == c || b == c);
}
signed main(){
const int n = 3, m = 7;
int arr[n][m];
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
cin >> arr[i][j];
vector<int> ans;
for(int j = 0; j < m; j++)
if(ok2(arr[0][j],arr[1][j],arr[2][j]))
ans.push_back(j+1);
cout << ans.size() << "\n";
for(auto i: ans)
cout << i << " ";
}
Подробнее - на -
Объяснение:
Заметим, что игра должна закончиться в 2 хода. Минимальное значение количества камней в обеих кучах, при котором игра заканчивается — 77. Эта ситуация возможна, например, когда в первой куче 7 камней, а во второй — 70. Значит, чтобы Ваня мог выиграть своим первым ходом, количество камней во второй куче должно быть ≥35. Поскольку удваиванием число 35 получить нельзя, после первого хода Пети во второй куче должно получиться 36 камней. Это возможно при значении S = 18. При таком минимальном значении S Ваня выиграет своим первым ходом после неудачного хода Пети.
ответ:18.