CF#248A、B题题解

第一次不用翻译来打CF,中国人的英文有共鸣啊^_^

不过没做出C题,很可惜啊.D题看了不敢碰,我对mod10^9+7的题目有阴影...

A题,题意是一堆苹果,能不能分成两堆一样重的,我一开始没读清楚题目,拍了个背包(以总和一般作背包容量是否能刚好装满),后来看真一点,才发现只有两种重量的,一种是100,一种是200。之后我就YY了,是不是sum%200==0就输出YES,否则就是NO。。我还无耻地交了,获得了一个WA,马上想明白了,200,200,200明显即不对啦。之后继续YY…思路就是计算200的有多少个,记做cnt1,100的有多少个,记做cnt2。

如果cnt1%2==0,判断cnt1%2==0,能YES,否NO

否则 判断cnt<2,是,输出NO,

否则 判断(cnt-2)%2==0,是输出YES(就是用两个100的苹果充当一个200的)

否则 输出NO

代码:

/*************************************************************************
	> OS     : Linux 3.2.0-60-generic #91-Ubuntu
	> Author : yaolong
	> Mail   : [email protected]
	> Created Time: 2014年05月24日 星期六 14:52:20
 ************************************************************************/

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
   int tmp, n,i,sum=0;
    cin>>n;
    int cnt1=0,cnt2=0;
    for( i=0;i<n;i++){
        cin>>tmp;
        if(tmp==100){
            cnt1++;
        }else{
            cnt2++;
        }
    }
    if(cnt2%2==0){
        if(cnt1%2==0){
            puts("YES");
        }else{
            puts("NO");
        }
    }else{
        if(cnt1>=2){
            cnt1-=2;
            if(cnt1%2==0){
                puts("YES");
            }else{
                puts("NO");
            }

        }else{
            puts("NO");
        }

    }

    return 0;
}

B题,一种强烈的线段树的味道……不过是两"棵"线段树。一棵是没排序的,一棵是排序的!之前看胡浩大神的线段树,

官方做法好想是做了预处理,计算a[k]=sum(1~k),之后计算sum[l,r]时候就是a[r]-a[l-1],显然我是弄麻烦了~不过算了。。 done is better than perfect.贴我的代码吧..

/*************************************************************************
	> OS     : Linux 3.2.0-60-generic #91-Ubuntu
	> Author : yaolong
	> Mail   : [email protected]
	> Created Time: 2014年05月24日 星期六 14:52:45
 ************************************************************************/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 123456
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
long long  sum[2][N<<4],stmp[N];
void PushUP(int type,int rt){
    sum[type][rt]=sum[type][rt<<1]+sum[type][rt<<1|1];
}
int cnt=0;
void Build(int rt,int l,int r){

    if(l==r){
        int tmp;
        scanf("%d",&tmp);
        sum[0][rt]=stmp[cnt]=tmp;
        cnt++;

        return ;
    }
    int m=(l+r)>>1;
    Build(lson);
    Build(rson);
    PushUP(0,rt);
}
long long  Query(int type,int L,int R,int rt,int l,int r){
    if(L<=l&&r<=R){
        return sum[type-1][rt];
    }
    int m=(l+r)>>1;
    long long ans=0;
    if(L<=m) ans+=Query(type,L,R,lson);
    if(R>m) ans+=Query(type,L,R,rson);
    return ans;
}
void Build2(int rt,int l,int r){ //sort了之后的
    if(l==r){
        sum[1][rt]=stmp[cnt];
        cnt++;

        return ;
    }
    int m=(l+r)>>1;
    Build2(lson);
    Build2(rson);
    PushUP(1,rt);

}
int main(){
    int n;
    scanf("%d",&n);
    Build(1,1,n);
    sort(stmp,stmp+cnt);
    cnt=0;
    Build2(1,1,n);
    int M,t,lt,rt;
    scanf("%d",&M);
    while(M--){
        scanf("%d%d%d",&t,<,&rt);
        cout<<Query(t,lt,rt,1,1,n)<<endl;
    }

    return 0;
}

CF#248A、B题题解

时间: 2024-10-25 17:40:09

CF#248A、B题题解的相关文章

我要cf破1000题!!!

我现在cf是292题,还差1000-292=708题. 水平的提高确实和题数不完全相关,但是问题是现在训练强度确实太低了. 我打算在两个月之内达到1000题,也就是说1天至少10题,两个月60天,720/60=12题/天,平均每天做12题就完成任务了. 为了提高效率,我应该不会在一道题卡两个小时以上,会直接看题解,保证平均40分钟补一个题.

CF#254中文全题解简要版

xyz的英文题解更详细一点把.只是翻译一下. Div2A 奇偶染色 Div2B 考虑对答案的贡献 2^(n-联通块个数) Div1A 最优的情况是只选一条边 可以用反证法,考虑将导出子图分裂 Div1B 一句话:数量多从大到小暴力,数量少只扫1的位置. Div1C xyz集训队论文 Div1D 询问的串有出现次数多的暴力,都是出现次数少的归并 Div1E 看起来像E题的做法是 二分答案 然后边分建网络流图 跑的很快  [然后发现有人dsu排序复杂度过了.] CF#254中文全题解简要版,布布扣,

CSDN高校俱乐部第二届战神杯第二题题解

两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负, 首先得到0的人获胜.例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8.两个人都足够聪明. 输入格式: 多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内) 输出格式: 每组数据一行,输出是第一个人赢,还是第二个人赢. 输入: 3 5 4 5 输出: 1 2 思路:如果你知道连分数,这题就是水题一道了.(记得某神说,菜鸟做完一题总是说这题很简单!没错,我就

【题解整理】西安邀请赛部分题题解

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... A 字符串基本处理 http://blog.csdn.net/polossk/article/details/27113175 B 状态压缩加剪枝,但是我们没敢做 C 单源点最短路 http://blog.csdn.net/polossk/article/details/27113385 D 字符串生成器 深搜 http://blog.csdn.net/polossk/article/details/27120395 J 状态压缩DP h

POJ 2608 Soundex 基础题题解

基本的编程能力考查. 注意: 1 下标处理 2 审查题意,并严格根据题意去重. 3 如何把代码写清晰精简. #include <stdio.h> #include <string.h> const short MAX_LETTER = 21; const short ALP_LEN = 26; short Letter[ALP_LEN] = {-1, 1, 2, 3, -1, 1, 2, -1, -1, 2, 2, 4, 5, 5, -1, 1, 2, 6, 2, 3, -1, 1

10.9 guz模拟题题解

感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms,空间限制1MB16MB. 第三题cure共20个测试点,时间限制为 1000ms,空间限制为 256MB. PS:题目背景与题目本身无关,可跳过 help 题目背景 在梦中,王 小 呆 到了一个神秘的地方.这里是昆虫王国!国王见王 小 呆 好生俊俏,便给了他一杯昆虫国的老白干.王 小 呆一口下肚,突

【ZROI 537】贪心题 题解

[ZROI 537]贪心题 题解 Link Solution 最大的一边直接放到一起贪心即可 着重讲小的一边 已知对于二分图匹配,其答案即为最大流 令时间集合为 \(T = {1,2,3,\dots,maxt}\) 对于每一门课程,按照如下方式建图: 每个任务为一个点,每个时间为一个点,每个任务向其对应的时间区间连边,源点向每个任务连边,边权为 \(1\),每个时间向汇点连边,边权为 \(1\) 考虑第一门课程: 我们选择一些时间节点分给它,设为 \(T_1\) 假设最大流中任务集合为 \(A\

BestCoder Round #86 二,三题题解(尺取法)

第一题太水,跳过了. NanoApe Loves Sequence题目描述:退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 nnn 的数列,他又根据心情随便删了一个数,这样他得到了一个新的数列,然后他计算出了所有相邻两数的差的绝对值的最大值. 他当然知道这个最大值会随着他删了的数改变而改变,所以他想知道假如全部数被删除的概率是相等的话,差的绝对值的最大值的期望是多少. 输入描述 第一行为一个正整数 T,表示数据组数. 每组数

noip2008普及组3题题解-rLq

(第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目.聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次