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

fgfdsgfads

时间:2015-03-08 21:29:48      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

typedef long long ll;
const int Mod = 836131;
const int N = 1e6 + 3;
int T_T, n, a, K, temp, Case;
ll sum[N];
bool flag;

struct Hash_Type {
    int top, info[Mod], nxt[N];
    ll num[N];
    inline void Init() {
        memset(info, 0, sizeof(info));
        top = 0;
    }
    inline void Insert(const ll &y) {
        int x = y % Mod;
        if (x < 0) x += Mod;
        for (int k = info[x]; k; k = nxt[k])
            if (num[k] == y) return ;
        nxt[++top] = info[x];
        info[x] = top;
        num[top] = y;
        return ;
    }
    inline bool Query(const ll &y) {
        int x = y % Mod;
        if (x < 0) x += Mod;
        for (int k = info[x]; k; k = nxt[k])
            if (num[k] == y)
                return true;
        return false;
    }
} cnt;

char ch;
inline int read() {
    int res = 0, sgn = 0;
    while (ch = getchar(), ch < 0 || ch > 9) if (ch == -) sgn = 1;
    res = ch - 48;
    while (ch = getchar(), ch >= 0 && ch <= 9) res = res * 10 + ch - 48;
    return sgn ? -res : res;
}

int main() {
    freopen ("a.txt" , "r" , stdin) ;
    T_T = read();
    for (Case = 1; Case <= T_T; ++Case) {
        n = read(); K = read();
        flag = false;
        cnt.Init();
        for (int i = 1; i <= n; ++i) {
            temp = read();
            if (i & 1) sum[i] = sum[i - 1] + temp;
            else     sum[i] = sum[i - 1] - temp;
            if (temp == K) flag = true;
        }
        if (!flag) {
            for (int i = n; i >= 1; --i) {
                if (i & 1) {
                    ll cur = K + sum[i - 1];
                    if (cnt.Query(cur)) {
                        flag = true;
                        break;
                    }
                }
                else {
                    ll cur = -K + sum[i - 1];
                    if (cnt.Query(cur)) {
                        flag = true;
                        break;
                    }
                }
                cnt.Insert(sum[i]);
            }
        }
        if (flag) printf("Case #%d: Yes.\n", Case);
        else printf("Case #%d: No.\n", Case);
    }
    return 0;
}

 

fgfdsgfads

标签:

原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4322235.html

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