您的位置:首页 > 其它

ACM训练半周总结—12月14日

2017-12-14 21:38 190 查看
        之前还在想要不要结束acm之旅,感觉脑子就是被踢了,我整个大学生活除了专业课就是acm,不做acm,恐怕更不知所措,我本来就是那种不怎么活跃的类型,实在无法想象没有刷题和比赛的日子。就像小学曾经痴迷围棋一样,大学的acm本来就是喜欢,觉得有意思才做的。喜欢,我就要投入,投入,我就要得到果实。

        下一阶段的训练计划:

1,从周六晚开始的密集的codeforce等比赛,全都不缺席。

2,bzoj先刷100题。

3, 去图书馆借关于概率的书,尝试自学一下,然后找相关博客学习。

        整理一下Educational Codeforces Round 34 (Rated for Div. 2)的题目

很遗憾我只做出来了水题,还是太菜了。。

      A. Hungry Student Problem:给出一个数n,判断n是否能3*k1+7*k2=n。就是暴力水题。。

      B. The Modcrab:给你a1,h1,c1代表我的攻击,生命,还有每瓶药回复的血量,我有无限的药,然后是怪兽的攻击a2,生命b2让你求怎么在最少的回合打死怪兽。暴力模拟水题。。。

      C. Boxes Packing:给出n个数,大箱子可以装小箱子,问最后最少还剩多少箱子。。

这道题充分证明我脑子在夜里会神游,其实就是找出众数的个数的题。结果我硬生生模拟做了。

#define ll long long

using namespace std;

long long a[5005];

int main()

{

    vector<long long>q;

    vector<long long>::iterator it;

   int n;

   cin>>n;

   for(int i=1;i<=n;i++)

   {

       cin>>a[i];

   }

   sort(a+1,a+1+n);//先排下序

   q.push_back(a[1]);

   for(int i=2;i<=n;i++)

   {

       for(it=q.begin();it!=q.end();it++)

       {

           if((*it)<a[i]) {q.erase(it);break;}//如果容器有比它小的,取出,压入大数,相当于合并。。

       }

       q.push_back(a[i]);

   }

   cout<<q.size()<<endl;

}

        D. Almost Difference:d(x,y)={|x-y<=1|,,,0}或{|x-y|>1,,,y-x},给一串数,计算所有d(x,y)。

很遗憾这道题没做出来,,找到两位大神的不同做法。
http://blog.csdn.net/a1325136367/article/details/78801698
上面博主说:题解:先离散化然后用线段树维护一下小于等于ai-2的数总和和个数,还有大于等于ai+2的总和和个数,然后答案就是ai乘以ai-2和ai-2的个数总和再减去小于等于ai-2的数的总和加上ai+2的总和
http://blog.csdn.net/acm_e/article/details/78801711
上面博主说:考虑每个数对答案的贡献,即被当做x和y的次数,然后再处理一下特殊的情况即可

      一直感觉对贡献这个东西不太怎么理解,第二种思路还是没怎么完全弄明白。。。还得再看看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: