https://atcoder.jp/contests/agc008/tasks/agc008_c
一开始没看到不能反转,被坑了一下
然后就发现只有3种情况可以放
1是直接放O,ans+=1,2是2个I或者2个J或者2个L,ans+=2,3是一个I,J,L使得ans+=2
那么当I,J,L中至少有两个是奇数时,我们才会选择第3种,不然的话全选第二种更优
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxl=3e5+10;
int n,m,k,cnt,tot,cas;
ll a[maxl];
bool vis[maxl];
char s[maxl];
inline void prework()
{
for(int i=1;i<=7;i++)
scanf("%lld",&a[i]);
}
inline void mainwork()
{
ll ans=a[2];
if(a[1] && a[4] && a[5] && (a[1]&1)+(a[4]&1)+(a[5]&1)>=2)
ans+=3,--a[1],--a[4],--a[5];
ans+=2*(a[1]/2);
ans+=2*(a[4]/2+a[5]/2);
printf("%lld\n",ans);
}
inline void print()
{
}
int main()
{
int t=1;
//scanf("%d",&t);
for(cas=1;cas<=t;cas++)
{
prework();
mainwork();
print();
}
return 0;
}