码迷,mamicode.com
首页 > 其他好文 > 详细

Contest1814 - 2019年我能变强组队训练赛第七场

时间:2019-08-22 19:00:27      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:ast   char   std   lse   ras   optimize   print   cpp   nbsp   

Scores of Final Examination

技术图片

技术图片

On-Screen Keyboard

技术图片

技术图片

技术图片

技术图片

技术图片

Tally Counters

技术图片

技术图片

技术图片

Balance Scale

技术图片

技术图片

技术图片

技术图片

 

#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
 
using namespace std;
typedef long long ll;
unordered_map<ll,bool> m1;
int n,m,cnt;
const int maxn=6e4;
ll a[maxn],tot1,tot2,ans;
ll w[105],b[105];
 
inline void dfs(int now,ll sum)
{
    if(now>n)
    {
        m1[sum]=1;
        return;
    }
    dfs(now+1,sum);
    dfs(now+1,sum+w[now]);
    dfs(now+1,sum-w[now]);
}
inline ll read()
{
    ll res=0,f=1;
    char ch=getchar();
    while (!isdigit(ch))
    {
        if (ch==‘-‘)
        {
            f=-f;
        }
        ch=getchar();
    }
    while (isdigit(ch))
    {
        res=(res<<3)+(res<<1)+ch-‘0‘;
        ch=getchar();
    }
    return f*res;
}
 
int main() {
    while (1) {
        m=read();n=read();
        if (n == 0 && m == 0) break;
        m1.clear();
        cnt = tot1 = tot2 = 0;
        ans = 0x3f3f3f3f3f3f3f3f;
        for (int i = 1; i <= m; ++i) a[i]=read();
        for (int i = 1; i <= n; ++i) w[i]=read();
        dfs(1, 0);
        unordered_map<ll, bool>::iterator it;
        for (int i = 1; i <= m; ++i) {
            if (m1[a[i]])
                cnt++;
            else {
                b[tot2++] = a[i];
                m1.erase(a[i]);
            }
        }
        for (it = m1.begin(); it != m1.end(); ++it) a[tot1++] = it->first;
        if (cnt == m) {
            printf("0\n");
            continue;
        }
        for (int i = 0; i < tot1; ++i) {
            cnt = 1;
            ll x = abs(a[i] - b[0]);
            for (int j = 1; j < tot2; ++j) {
                if (m1.count(b[j] - x) || m1.count(b[j] + x)) {
                    cnt++;
                }
            }
            if (cnt == tot2) {
                ans = min(ans, x);
            }
        }
        if (ans == 0x3f3f3f3f3f3f3f3f) printf("-1\n");
        else printf("%lld\n", ans);
    }
}

  

Contest1814 - 2019年我能变强组队训练赛第七场

标签:ast   char   std   lse   ras   optimize   print   cpp   nbsp   

原文地址:https://www.cnblogs.com/Accpted/p/11396087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!