Problem:
Problem D: The Great Summer Contest
現在、人々の娯楽はプログラミングコンテストに限られている。彼女が所属しているとある中学校の娯楽部の活動内容は、プログラミングコンテストを企画し運営することだ。彼女の仕事は問題を作成することではない。多くの人から問題を募り、審判団を組織し、またコンテストの宣伝を行う、いわば裏方のお仕事だ。カリスマ作題者や著名なアルゴリズマーと違い、そういった仕事をする人に光が当たることはほとんどない。存在感はないけれども欠かすことのできないその仕事に、彼女は誇りを持って取り組んでいた。
娯楽部は常に問題を募集しているが、それらの問題は以下の 6 種類に分類される。
Math
Greedy
Geometry
DP
Graph
Other
幸いにも多くの問題が集まったので、彼女はたくさんコンテストを開こうと考えた。コンテストは 3 問の問題からなるが、彼女はコンテストがより教育的になるようにと、以下の 4 種類のコンテストを開くことに決めた。
数学ゲーコンテスト: Math の問題と DP の問題合わせて3問の問題セット
アルゴリズムゲーコンテスト: Greedy の問題と Graph の問題合わせて3問の問題セット
実装ゲーコンテスト: Geometry の問題と Other の問題合わせて3問の問題セット
バランスの良いコンテスト: Math または DP から 1 問、Greedy または Graph から 1 問、Geometry または Other から 1 問、合わせて3問の問題セット
もちろん、あるコンテストに出題した問題は他のコンテストに出題することはできない。彼女の望みは、できるだけ多くのコンテストを開くことだ。6 種類の問題のストック数は分かっているが、さて、最大何回コンテストを開けるだろうか。彼女にとってこれは難しい問題だが、カリスマアルゴリズマーであるあなたなら解決できるはずだ。
Input
入力は複数のケースからなる。
各ケースは以下のフォーマットで与えられる。
n
Math
n
Greedy
n
Geometry
n
DP
n
Graph
n
Other
各入力の値はそれぞれの種類の問題のストックの数を表す。
入力の終わりは
0 0 0 0 0 0
からなる行によって与えられる。
各値は以下の条件を満たす。
n
Math
+
n
Greedy
+
n
Geometry
+
n
DP
+
n
Graph
+
n
Other
≤ 100,000,000
またテストケースの数は20,000個を超えない。
Output
開催可能なコンテストの最大数を1行に出力せよ。
Sample input
1 1 1 1 1 1
1 1 1 0 0 0
1 0 0 0 1 1
3 0 0 3 0 0
3 1 0 1 3 1
1 2 0 2 0 1
0 0 1 1 0 3
1 0 0 1 1 0
0 0 0 0 0 0
Sample output
2
1
1
2
3
1
1
0
The University of Aizu Programming Contest 2011 Summer
原案: Tomoya Sakai
問題文: Takashi Tayama

Submitted solutions:

code_snippet: #include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <cstring>
#include <utility>
#include <map>
#include <queue>
using namespace std;
typedef pair<int,int> P;
typedef long long ll;

int main()
{
    ll a,b,c,d,e,f;
    cin>>a>>b>>c>>d>>e>>f;
    while(a||b||c||d||e||f)
    {
        a=a+d;
        b=b+e;
        c=c+f;
        vector<int>m;
        m.push_back(a%3);
        m.push_back(b%3);
        m.push_back(c%3);
        ll sum=0;
        int cnt=0;
        int cnt1=0;
        for(int i=0;i<3;i++)
        {
            if(m[i]==2)
                cnt++;
            else if(m[i]==0)
                cnt1++;
        }
        if(cnt==2&&cnt1==1&&(a>=2||b>=2||c>=2))
        {
            a-=2;
            b-=2;
            c-=2;
            sum+=2;
        }
        sum+=a/3+b/3+c/3;
        sum+=min(min(a%3,b%3),c%3);
        
        
        
        cout<<sum<<endl;
        
        cin>>a>>b>>c>>d>>e>>f;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3124
final_rank: 18

code_snippet: #pragma GCC optimize("Ofast")
#define _GLIBCXX_DEBUG
#include<bits/stdc++.h>
using namespace::std;
struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<<fixed<<setprecision(15);}} __init;
// random_device rd;
// mt19937 mt(rd());
// #include <boost/numeric/interval.hpp>
// #include <boost/numeric/interval/io.hpp>
// #include <boost/intrusive/rbtree.hpp>
// #include <boost/geometry.hpp>
// #include <boost/geometry/geometries/linestring.hpp>
// #include <boost/geometry/geometries/polygon.hpp>
// #include <boost/geometry/geometries/point_xy.hpp>
// #include <boost/multiprecision/cpp_dec_float.hpp>
// #include <boost/multiprecision/cpp_int.hpp>
// namespace mp = boost::multiprecision;
// typedef mp::number<mp::cpp_dec_float<0>> cfloat;
// typedef mp::cpp_int cint;

#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/priority_queue.hpp>
#include<ext/pb_ds/tag_and_trait.hpp>
using namespace __gnu_pbds;
template<typename T=long long>using pbds=tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
template<typename T=long long>using pqueue =__gnu_pbds::priority_queue<T, less<T>,rc_binomial_heap_tag>;
typedef long long lint;
typedef long long ll;
typedef long double ldouble;
typedef vector<lint> vec;
typedef vector<vector<lint>> mat;
typedef vector<vector<vector<lint>>> mat3;
typedef vector<double> dvec;
typedef vector<vector<double>> dmat;
typedef vector<vector<vector<double>>> dmat3;
typedef vector<string> svec;
typedef vector<vector<string>> smat;
typedef vector<vector<vector<string>>> smat3;
typedef vector<pair<lint,lint>> pvec;
typedef vector<vector<pair<lint,lint>>> pmat;
typedef vector<vector<vector<pair<lint,lint>>>> pmat3;
#define rep(i, n) for(lint i = 0; i < (lint)(n); i++)
#define irep(i) for(lint i = 0;; i++)
#define irep1(i) for(lint i = 1;; i++)
#define irep2(i) for(lint i = 2;; i++)
#define rrep(i, n) for(lint i = (lint)(n-1); i >-1; i--)
#define rrepi(i,a,b) for(lint i = (lint)(b-1); i >a-1; i--)
#define repi(i,a,b) for(lint i=lint(a);i<lint(b);i++)
#define rep2(i,a,b,c) for(lint i=lint(a);i>lint(b);i+=c)
#define all(x) (x).begin(),(x).end()
//#define PI 3.141592653589793
#define dist(x1,y1,x2,y2) (pow(pow(x2-x1,2)+pow(y2-y1,2),0.5))
#define output(v) do{bool f=0;for(auto i:v){cout<<(f?" ":"");if(i>INF/2)cout<<"INF";else cout<<i;f=1;}cout<<"\n";}while(0)
#define output2(v) for(auto j:v)output(j);
#define _output(v) do{bool f=0;rep(i,v.size()){cout<<(f?" ":"");if(v[i]>INF/2)cout<<"INF";else cout<<v[i];f=1;}cout<<"\n";}while(0)
#define _output2(v) rep(j,v.size()){_output(v[j]);}
#define input(a,n) lint n;cin>>n;vector<lint>a(n);rep(i,n)cin>>a[i];
#define SUM(v) accumulate(all(v),0LL)
#define INF (1LL<<60)
#define IINF (1<<30)
#define EPS (1e-10)
#define LINF 9223372036854775807
#define MOD 100000007
#define endl "\n"
template<typename T=lint>T in(){return *istream_iterator<T>(cin);}
inline lint gcd(lint a,lint b){return b?gcd(b,a%b):a;}
template<typename T=lint>inline T lcm(T a,T b){return a/gcd(a,b)*b;}
template<typename T=lint>inline T add(T a,T b){return a+b;}
template<typename T=lint>inline T minq(T a,T b){return min(a,b);}
inline bool chmin(auto& s,const auto& t){bool res=s>t;s=min(s,t);return res;}
inline bool chmax(auto& s,const auto& t){bool res=s<t;s=max(s,t);return res;}
vector<lint> dx={-1,1,0,0,1,1,-1,-1};
vector<lint> dy={0,0,-1,1,1,-1,1,-1};



int main(){
    while(1){
        lint a,b,c,d,e,f;
        cin>>a>>b>>c>>d>>e>>f;
        if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)break;
        lint s=min({(a+d)/3});
        lint t=min({(b+e)/3});
        lint u=min({(c+f)/3});
        vec tmp={a+d-s*3,b+e-t*3,c+f-u*3};
        sort(all(tmp));
        if(tmp==vec{0,2,2}&&a+d-s*3==0&&a+d>0)cout<<s+t+u+min({a+d-s*3,b+e-t*3,c+f-u*3})+1<<endl;
        else if(tmp==vec{0,2,2}&&b+e-t*3==0&&b+e>0)cout<<s+t+u+min({a+d-s*3,b+e-t*3,c+f-u*3})+1<<endl;
        else if(tmp==vec{0,2,2}&&c+f-u*3==0&&c+f>0)cout<<s+t+u+min({a+d-s*3,b+e-t*3,c+f-u*3})+1<<endl;
        else cout<<s+t+u+min({a+d-s*3,b+e-t*3,c+f-u*3})<<endl;
    }
}
accuracy: 1
time_ms: 20
memory_kb: 3100
final_rank: 7

code_snippet: #include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;

#define fi first
#define se second
#define repl(i,a,b) for(ll i=(ll)(a);i<(ll)(b);i++)
#define rep(i,n) repl(i,0,n)
#define all(x) (x).begin(),(x).end()
#define dbg(x) cout<<#x"="<<x<<endl
#define mmax(x,y) (x>y?x:y)
#define mmin(x,y) (x<y?x:y)
#define maxch(x,y) x=mmax(x,y)
#define minch(x,y) x=mmin(x,y)
#define uni(x) x.erase(unique(all(x)),x.end())
#define exist(x,y) (find(all(x),y)!=x.end())
#define bcnt __builtin_popcountll

#define INF 1e16
#define mod 1000000007

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);

  while(1){
    ll n=6;
    vector<ll> a(n);
    rep(i,n)cin>>a[i];
    {
      bool done=true;
      rep(i,n)if(a[i]>0)done=false;
      if(done)break;
    }

    ll A=a[0]+a[3],B=a[1]+a[4],C=a[2]+a[5];
    ll res=0;
    rep(i,min(3LL,min({A+1,B+1,C+1}))){
      maxch(res,(((A-i)/3)+((B-i)/3)+((C-i)/3))+i);
    }
    cout<<res<<endl;
  }

  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3124
final_rank: 5

code_snippet: #include <bits/stdc++.h>
using namespace std;

long long cnt[3] = {0};

long long solve();

int main() {
  while(1) {
    bool allzero = 1;
    for(int i = 0; i < 3; ++i) cnt[i] = 0;
    for(int i = 0; i < 6; ++i) {
      long long a;
      cin >> a;
      if(a != 0) allzero = 0;
      cnt[i % 3] += a;
    }
    if(allzero) break;
    cout << solve() << endl;
  }
  return 0;
}

long long solve() {
  long long ans = 0;
  for(int i = 0; i < 3; ++i) {
    long long now = i;
    bool ch = 1;
    for(int j = 0; j < 3; ++j) {
      if(cnt[j] - i < 0) {
        ch = 0;
        break;
      }
      now += (cnt[j] - i) / 3;
    }
    if(ch) ans = max(ans, now);
  }
  return ans;
}
accuracy: 1
time_ms: 30
memory_kb: 3088
final_rank: 16

code_snippet: #include<iostream>
using namespace std;

int main(){
    int a, b, c, d, e, f;
    while(cin>>a>>b>>c>>d>>e>>f, a+b+c+d+e+f){
        a += d, b += e, c += f;
        int x = 0;
        for(int t = 0; t < 3; t++){
            if(a < t || b < t || c < t)   break;
            x = max(x, t + (a-t)/3 + (b-t)/3 + (c-t)/3);
        }
        cout << x << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3080
final_rank: 13

code_snippet: #include<iostream>
using namespace std;

int main(){
    int a, b, c, d, e, f;
    while(cin>>a>>b>>c>>d>>e>>f, a+b+c+d+e+f){
        a += d, b += e, c += f;
        int ans = 0;
        for(int bal = 0; bal < 3; bal++){
            if(a < bal || b < bal || c < bal)   break;
            ans = max(ans, bal + (a-bal)/3 + (b-bal)/3 + (c-bal)/3);
        }
        cout << ans << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3084
final_rank: 15

code_snippet: #include <bits/stdc++.h>
using namespace std;

#define DUMP(x) cerr << #x << "=" << x << endl
#define DUMP2(x, y) cerr<<"("<<#x<<", "<<#y<<") = ("<<x<<", "<<y<<")"<< endl
#define BINARY(x) static_cast<bitset<16> >(x)

#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,m,n) for (int i=m;i<(int)(n);i++)

#define in_range(x, y, w, h) (0<=(int)(x) && (int)(x)<(int)(w) && 0<=(int)(y) && (int)(y)<(int)(h))
#define ALL(a) (a).begin(),(a).end()

typedef long long ll;
const int INF   = 1e9;
const ll  INFLL = 1e18;
typedef pair<int, int> PII;
int dx[4]={0, -1, 1, 0}, dy[4]={-1, 0, 0, 1};

int main()
{
    ios::sync_with_stdio(false);

    int M, GRE, GEO, DP, GRA, O;
    while (cin >> M >> GRE >> GEO >> DP >> GRA >> O) {
        if (!M && !GRE && !GEO && !DP && !GRA && !O) break;

        int G1 = M + DP;
        int G2 = GRE + GRA;
        int G3 = GEO + O;

        int ans = 0;
        int mn = min({G1, G2, G3});

        /*
        {
            int tmp = mn;
            tmp += (G1 - mn) / 3;
            tmp += (G2 - mn) / 3;
            tmp += (G3 - mn) / 3;
            tmp += min({(G1 - mn)%3, (G2 - mn)%3, (G3 - mn)%3});
            ans = max(ans, tmp);
        }

        {
            int tmp = 0;
            tmp += G1/3; G1%=3;
            tmp += G2/3; G2%=3;
            tmp += G3/3; G3%=3;
            tmp += min({G1, G2, G3});
            ans = max(ans, tmp);
        }
        */

        // cerr << "------------" << endl;
        for (int m=max(0, mn-100); m<=mn; m++) {
            int tmp = m;
            tmp += (G1 - m) / 3;
            tmp += (G2 - m) / 3;
            tmp += (G3 - m) / 3;
            ans = max(ans, tmp);
            // DUMP(tmp);
        }

        cout << ans << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3228
final_rank: 8

code_snippet: #include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define fi first
#define se second
#define dbg(x) cout<<#x" = "<<((x))<<endl
template<class T,class U> ostream& operator<<(ostream& o, const pair<T,U> &p){o<<"("<<p.fi<<","<<p.se<<")";return o;}
template<class T> ostream& operator<<(ostream& o, const vector<T> &v){o<<"[";for(T t:v){o<<t<<",";}o<<"]";return o;}

int main()
{
    while(1)
    {
        int x[6];
        rep(i,6) cin >>x[i];

        int s = 0;
        rep(i,6) s += x[i];
        if(s==0) break;

        int a = x[0] + x[3];
        int b = x[1] + x[4];
        int c = x[2] + x[5];

        int m = min({a,b,c});

        int ans = 0;
        for(int i=m; i>=max(0,m-3); --i) ans = max(ans, i+(a-i)/3+(b-i)/3+(c-i)/3);
        cout << ans << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3064
final_rank: 9

code_snippet: #include <iostream>
using namespace std;

int main(){
	int a,b,c,d,e,f;
	while(1){
		cin >> a >> b >> c >> d >> e >> f;
		if(a + b + c + d + e + f == 0) break;
		a += d;
		b += e;
		c += f;
		int ma = 0;
		for(int i = 0;i < 3;i++){
			ma = max(ma,i + a / 3 + b / 3 + c / 3);
			a--;
			b--;
			c--;
			if(a < 0 || b < 0 || c < 0) break;
		}
		cout << ma << endl;
	}
	return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 2984
final_rank: 6

code_snippet: #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

int main(){
	
	int a[6];
	
	while(true){
		
		int hoge = 0;
		
		for(int i = 0; i < 6; i++){
			cin >> a[i];
			hoge += a[i];
		}
		
		if(hoge == 0){
			break;
		}
		
		a[0] += a[3];
		a[1] += a[4];
		a[2] += a[5];
		
		int ans = 0;
		
		ans = max(ans, a[0] / 3 + a[1] / 3 + a[2] / 3);
		a[0]--;
		a[1]--;
		a[2]--;
		if(a[0] >= 0 && a[1] >= 0 && a[2] >= 0){
			ans = max(ans, a[0] / 3 + a[1] / 3 + a[2] / 3 + 1);
		}
		a[0]--;
		a[1]--;
		a[2]--;
		if(a[0] >= 0 && a[1] >= 0 && a[2] >= 0){
			ans = max(ans, a[0] / 3 + a[1] / 3 + a[2] / 3 + 2);
		}
		
		cout << ans << endl;
		
	}
	
	return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3080
final_rank: 13

code_snippet: #include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;

int main() {
	int a, b, c, d, e, f;
	while (cin >> a >> b >> c >> d >> e >> f, a || b || c || d || e || f) {
		a += d; b += e; c += f;
		int Max = 0;
		for (int i = 0; i <= min(2, min(a, min(b, c))); i++)
			Max = max(Max, (a - i) / 3 + (b - i) / 3 + (c - i) / 3 + i);
		cout << Max << endl;
	}
}
accuracy: 1
time_ms: 30
memory_kb: 3088
final_rank: 16

code_snippet: #include "bits/stdc++.h"
#include<unordered_map>
#include<unordered_set>
#pragma warning(disable:4996)
using namespace std;
using ld = long double;
const ld eps = 1e-9;

//// < "d:\d_download\visual studio 2015\projects\programing_contest_c++\debug\a.txt" > "d:\d_download\visual studio 2015\projects\programing_contest_c++\debug\b.txt"


int main() {
	while(1){
		int a, b, c, d, e, f; cin >> a >> b >> c >> d >> e >> f;
		int x = a + d, y = b + e, z = c+ f;
		if (!x&&!y&&!z)break;
		int ans = 0;
		int amin = min(min(x, y), z);
		for (int i = 0; i <= min(2,amin); ++i) {
			int sum = i;
			sum += (x - i) / 3 + (y - i) / 3 + (z - i) / 3;
			ans = max(ans, sum);
		}
		cout << ans << endl;
	}
	
	return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3064
final_rank: 9

code_snippet: #include<bits/stdc++.h>
using namespace std;

#define int long long
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,f,n) for(int i=(f);i<(n);i++)
#define all(v) (v).begin(),(v).end()
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define fi first
#define se second
template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}


signed main(){
    int a,b,c,d,e,f;
    while(cin>>a>>b>>c>>d>>e>>f,a||b||c||d||e||f){
        a+=d;b+=e;c+=f;

        int t=min(min(a,b),c);
        int ma=0;
        for(int i=max(t-2,0ll);i<=t;i++){
            chmax(ma,i+(a-i)/3+(b-i)/3+(c-i)/3);
        }
        cout<<ma<<endl;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3068
final_rank: 11

code_snippet: #include <bits/stdc++.h>
using namespace std;

#define REP(i, s, e) for(int i = (int)s; i < (int) e; i++)
#define rep(i, n) REP(i, 0 ,n)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()

#define fi first
#define se second
#define pb push_back
#define mp nake_pair

typedef long long ll;

typedef vector<int> vi;

int calc(int m, const vi& d){
    int ret = m;
    rep(i, 3) if(m > d[i]) return -1e9;
    rep(i, 3) ret += (d[i]-m)/3;
    return ret;
}

int main(){
    vi v(6);
    while(1){
        rep(i, 6) cin>>v[i];
        if(v[0]==0 && v[1] == 0 && v[2] == 0 && v[3] == 0 && v[4] == 0 && v[5] == 0) break;
        vi d(3);
        rep(i, 6) d[i%3] += v[i];
        double l = 0, r = 1e9;
        rep(i, 1000){
            double m1 = l + (r - l) / 3.0, m2 = l + (r - l) * 2.0/ 3.0;
            int f1 = calc(m1, d), f2 = calc(m2, d);
            if(f1 < f2) l = m1;
            else r = m2;
        }
        cout<<calc(r, d)<<endl;
    }
}
accuracy: 1
time_ms: 220
memory_kb: 3012
final_rank: 20

code_snippet: #include <iostream>
#include <algorithm>

using namespace std;
 
int main(){
    int Math,Greedy,Geometry,DP,Graph,Other;
 
    while(cin >> Math >> Greedy >> Geometry >> 
	  DP >> Graph >> Other){
 
	if(!Math && !Greedy && !Geometry && !DP &&
	   !Graph && !Other) break;
 
	int MD = Math + DP , GG = Greedy + Graph;
	int GO = Geometry + Other;
 
	int ans = 0;
	if(MD >= 0 && GG >= 0 && GO >= 0){
	    ans = max(ans, MD/3 + GG/3 + GO/3);
	}
	if(MD >= 1 && GG >= 1 && GO >= 1){
	    ans = max(ans, ((MD-1)/3 + (GG-1)/3 + (GO-1)/3) + 1);
	}
	if(MD >= 2 && GG >= 2 && GO >= 2){
	    ans = max(ans, ((MD-2)/3 + (GG-2)/3 + (GO-2)/3) + 2);
	}
	cout << ans << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3076
final_rank: 12

code_snippet: #include <iostream>
#include <algorithm>
#ifdef _MSC_VER
#define __builtin_popcount(x) (__popcnt(x))
#endif
using namespace std;
int a, b, c, d, e, f;
int main() {
	while (cin >> a >> b >> c >> d >> e >> f, a | b | c | d | e | f) {
		int x[3] = { a + d, b + e, c + f }, r = 0;
		for (int i = 0; i < 8; i++) {
			int ok = 1;
			for (int j = 0; j < 3; j++) {
				if ((i & (1 << j)) && x[j] < 3) ok = 0;
			}
			if (!ok) continue;
			int y[3] = { x[0], x[1], x[2] };
			int z = y[0] / 3 + y[1] / 3 + y[2] / 3 - __builtin_popcount(i), w = 999999999;
			for (int j = 0; j < 3; j++) w = min(w, y[j] % 3 + ((i & (1 << j)) ? 3 : 0));
			r = max(r, z + w);
		}
		cout << r << endl;
	}
}
accuracy: 1
time_ms: 40
memory_kb: 3080
final_rank: 19

code_snippet: #include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<utility>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<sstream>
#define loop(i,a,b) for(int i=a;i<b;i++) 
#define rep(i,a) loop(i,0,a)
#define pb push_back
#define mp make_pair
#define all(in) in.begin(),in.end()
const double PI=acos(-1);
const double EPS=1e-10;
const int inf=1e9;
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
int main(){
	int a,b,c,d,e,f;
	while(cin>>a>>b>>c>>d>>e>>f,a+b+c+d+e+f){
		vi in(3);
		vector<pii>tmp(3);
		in[0]=a+d;in[1]=b+e;in[2]=c+f;
		int out=0;
		rep(i,3){
			out+=in[i]/3;
			tmp[i]=pii(in[i]%3,in[i]);
		}
		sort(all(tmp));
		if(tmp[0].first>0)out+=tmp[0].first;
		else if(tmp[1].first==2&&tmp[0].second>2)out++;
		cout<<out<<endl;
	}
}
accuracy: 1
time_ms: 50
memory_kb: 1196
final_rank: 3

code_snippet: #include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <map>
#include <set>

#define REP(i,k,n) for(int i=k;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1<<30
#define pb push_back
#define mp make_pair

using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int main() {
	ll a, b, c, d, e, f;
	while(cin >> a >> c >> e >> b >> d >> f) {
		if(a == 0 && b == 0 && c == 0 && d == 0 && e == 0 && f == 0) break;

		ll ans = 0, A = 0, B = 0, C = 0;
		ll res = min(a + b, min(c + d, e + f));

		A = (a + b) - res;
		B = (c + d) - res;
		C = (e + f) - res;
		ans = res + (A / 3) + (B / 3) + (C / 3);

		if(res >= 1) {
			A++; B++; C++;
			res--;
		}
		else if(res >= 2) {
			A += 2; B += 2; C += 2;
			res -= 2;
		}

		cout << max(ans, res + (A / 3) + (B / 3) + (C / 3)) << endl;
	}
	return 0;
}
accuracy: 1
time_ms: 50
memory_kb: 1156
final_rank: 1

code_snippet: #include<bits/stdc++.h>
using namespace std;
 
int main(){
  int a,b,c,d,e,f;
  int A,B,C,mins,ans,ans2;
  while(1){
    cin>>a>>b>>c>>d>>e>>f;
    if(!a&&!b&&!c&&!d&&!e&&!f)break;
    A=a+d;
    B=b+e;
    C=c+f;
    mins=min(A,min(B,C));
    ans2=0;
    for(int i=0;i<2;i++){
      ans=0;
      ans+=(A-mins)/3;
      ans+=(B-mins)/3;
      ans+=(C-mins)/3;
      A=A-((A-mins)/3)*3;
      B=B-((B-mins)/3)*3;
      C=C-((C-mins)/3)*3;
      ans=max(ans+A/3+B/3+C/3,ans+mins);
      ans2=max(ans2,ans);
      if(mins>=1)mins--;
      else break;
      A=a+d;
      B=b+e;
      C=c+f;
    }
    cout<<ans2<<endl;
  }
  return 0;
}
accuracy: 1
time_ms: 50
memory_kb: 1160
final_rank: 2

code_snippet: #include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

int main(){
  int a,b,c,d,e,f;
  int g,h,i,sum;
  
  cin >> a >> b >> c >> d >> e >> f;
  while(a!=0||b!=0||c!=0||d!=0||e!=0||f!=0){
    g=a+d;
    h=b+e;
    i=c+f;
    sum=0;
    if((g>1&&h>1&&i>1)&&((g%3==2&&h%3==2&&i%3==0)||(g%3==2&&h%3==0&&i%3==2)||(g%3==0&&h%3==2&&i%3==2))) sum++;
    sum+=g/3;
    g=g%3;
    sum+=h/3;
    h=h%3;
    sum+=i/3;
    i=i%3;
    while(g>0&&h>0&&i>0){
      g--;h--;i--;
      sum++;
    }
    
    cout << sum << endl;
    
    cin >> a >> b >> c >> d >> e >> f;
  }
  return 0;
}
accuracy: 1
time_ms: 60
memory_kb: 1160
final_rank: 4