#575(DIV。3)(A.ラウンドCodeforces キャンディーズの三本の杭)(数学)

キャンディーズのA.三杭
test1の毎秒の制限時間
test256メガバイトあたりのメモリ制限
入力inputstandard
outputstandard出力
アリスとボブは、贈り物としてキャンディーの三本の大山を受けています。今、彼らはできる限り公正これらのキャンディーを分割したいです。これを行うために、アリスはボブが他の二つの山の一つを取り、その後、キャンディーの1つの山を取ります。例えば、アリスが全体の杭を取り、ボブはそれから何を得ないことがある:彼らが望むよう最後の杭は、アリスとボブの間で分割されます。

アリスはボブより多くのキャンディーを持っている場合、彼女が持っているキャンディーの数はボブが持っているキャンディーの数に等しくなるように、山からキャンディーを取った後、彼女はいくつかのキャンディーを破棄します。彼はより多くのキャンディーを持っている場合はもちろん、ボブは同じことを行います。

アリスとボブは、できるだけ多くのキャンディーを持ちたい、と彼らはそれに応じてキャンディーを分割する処理を計画しています。アリスは、この分割処理の後に持つことができますキャンディーの最大数を計算してください(もちろん、ボブは、キャンディーの数が同じになります)。

あなたは、Qの独立したクエリに応答する必要があります。

[1,3,4]:のは、次の例を見てみましょう。そして、アリスは三山を選択することができ、ボブは、第二の山を取ることができ、その後、最初の山からの唯一のお菓子は、ボブに行く - そしてアリスは、4つのキャンディーを持っており、ボブは4つのキャンディーを持っています。

別の例は、[1,10,100]です。次いで、アリスが二山を選択することができ、ボブはまずパイルを選択することができ、そして第三のパイルからキャンディーは、ボブ54のキャンディーをとり、アリスが46のキャンディーを取るような方法で分割することができます。今、ボブは55のキャンディーを持っている、とアリスは56のキャンディーを持っているので、彼女は1つのキャンディーを破棄しなければならない - その後、彼女はあまりにも55のキャンディーを持っています。

入力
クエリの数-入力の最初の行は1つの整数Q(1≤q≤1000)を含みます。そして、q個のクエリが続きます。

対応して、第一、第二及び第三重ねてキャンディーの数 - クエリの唯一のラインは三つの整数、b及びc(1≤a、B、c≤1016)を含みます。

出力
プリントQライン。最適両方アリスとボブ行為が(もちろん、ボブはキャンディーの数が同じになる)場合、アリスは、分割後の持つことができるキャンディーの最大数- i番目の行は、i番目のクエリに対する答えを含める必要があります。

例えば
inputCopy
4
1 3 4
1 10 100
10000000000000000 10000000000000000 10000000000000000
23 34 45
outputCopy
4
55
15000000000000000
51

質問の意味:思考:最も確かに、最終的な答えを得ることは困難であるではないです(A + B + C)/ 2




詳細コードを参照してください。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
ll a[5];
int main()
{
    //freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
    //freopen("D:\\common_text\code_stream\\out.txt","w",stdout);
 
    int q;
    cin>>q;
 
    while(q--)
    {
        repd(i,1,3)
        {
            cin>>a[i];
        }
        sort(a+1,a+1+3);
        ll x=a[1];
        ll y=a[2];
        ll z=(a[3]-(a[2]-a[1]));
        if(a[3]>a[2]-a[1])
        {
            x=a[2];
            x+=z/2;
            y+=z/2;
        }else
        {
            x+=a[3];
        }
        cout<<min(x,y)<<endl;
    }
 
 
    return 0;
}
 
inline void getInt(int* p) {
    char ch;
    do {
        ch = getchar();
    } while (ch == ' ' || ch == '\n');
    if (ch == '-') {
        *p = -(getchar() - '0');
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 - ch + '0';
        }
    }
    else {
        *p = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 + ch - '0';
        }
    }
}
 

おすすめ

転載: www.cnblogs.com/qieqiemin/p/11247850.html