题目链接:http://codeforces.com/problemset/problem/831/C

题意:有一位参赛选手,我们不知道他初始或最后的成绩,但是知道k次评审所加(减)的分数,以及n个在这过程中的他的分数。问这名选手初始分有几种情况。

思路:一开始考虑先求出评审分的前缀和,对过程分减去前缀和就能得到的初始分数,求出所有的初始分数情况,用map记录每个初始分重复的次数,重复次数==n 的即为正确的初始分。

然而这么做是WA了的。

分析第一个样例:

4 1
-5 5 0 20
10 如果按照上面的思路,输出答案是2。由于前缀和为0存在重复,使得10这个初始分重复了2次。
那么我们就需要去除重复的前缀和。
再来思考一下这种做法的正确性:由于前缀和都是不相等的,也就能说明对一个过程分,会产生不同的初始分数,那么对于一个初始分数,其中一个过程分是唯一的(一一对应),当这个初始分存在k个不同的初始分数时它必定是正确的

AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAXN=;
int sum[MAXN],a,b;
bool vis[MAXN];
int main()
{
int k,n;
sum[]=;
cin>>k>>n;
memset(vis, , sizeof(vis));
map<int,int> mp;
map<int,int>::iterator it;
for(int i=;i<=k;i++){
scanf("%d", &a);
sum[i]=sum[i-]+a;
}
sort(sum+, sum+k+);
for(int i=;i<=k;i++){
if(sum[i]==sum[i-])
vis[i]=;
}
for(int i=;i<=n;i++){
scanf("%d", &b);
for(int j=;j<=k;j++){
if(vis[j])
continue;
mp[b-sum[j]]++;
//cout<<b-sum[j]<<endl;
}
}
int res=;
for(it=mp.begin();it!=mp.end();it++){
if(it->second==n)
res++;
}
printf("%d\n", res);
return ;
}

最新文章

  1. 深入理解javascript原生拖放
  2. Objective-C中的单例模式
  3. 25 Killer Actions to Boost Your Self-Confidence
  4. 学习笔记:MySQL操作初步
  5. 一个ORM的实现(附源代码)
  6. 【转】SVN建库方法
  7. 有用的jQuery布局插件推荐
  8. Java并发之线程中断
  9. 【BZOJ2241】【Sdoi2011R1D1】打地鼠
  10. 21 viewPager--- hzScrollView ----llContainer
  11. App自动化(1)--Appium-Android环境搭建
  12. Windows环境下编译Assimp库生成Android可用的.so或.a文件
  13. C++版 - UVa1585 Score - 题解
  14. .Net Core---- 通过EPPlus批量导出
  15. Php的常见错误及错误分析
  16. 使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
  17. git 上传本地代码到github 服务器
  18. Spring MVC中发布Restful Web服务
  19. 深入理解JavaScript系列(43):设计模式之状态模式
  20. Android(java)学习笔记79:Android中SimpleAdapter,ArrayAdapter和BaseAdapter常见的适配器

热门文章

  1. 匿名函数 sorted() filter() map() 递归函数
  2. java sftp判断目录是否存在
  3. PHP 数组下标自动转换为整型的坑
  4. MapReduce(1): Prepare input for Mappers
  5. Fira Code,可以让不等号!=直接显示出来的字体
  6. instanceof 和isinstance的区别
  7. U33405 纽约 (二分)
  8. Qt 如何配置维护更新工具 MaintenanceTool ?
  9. sql插入语句笔记
  10. JS的video在手机上有些手机能播放,而有些不能原因