开始想了一个自己误以为很对的思路,结果一直wa;
结束之后知道了一个神奇的东西,棋盘染色,棋盘染色可以做大部分多米诺这种1x2方格的问题。就是把这个看成一个国际象棋棋盘,用黑白染色,黑色只与白色相连,白色只与黑色相连,那么能够放上一个多米诺骨牌也就需要一个黑色和一个白色,这样就统计一下黑白棋盘格子各自有多少个就可以了,小的哪个就是答案,下面代码,码风略丑
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
int n;
scanf("%d", &n);
ll x = 0, y = 0;
for(int i = 0; i < n; i++)
{
ll b;
scanf("%lld", &b);
if(i & 1)
x += b % 2;
else
y += b % 2;
x += b / 2;
y += b / 2;
}
printf("%lld\n", min(x, y));
return 0;
}