- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在解决 spoj 中的计数子序列问题,但得到了错误的答案。这是链接 http://www.spoj.com/problems/SUBSEQ/
这是我的代码
#include<stdio.h>
#include<cmath>
#include<algorithm>
int main(){
int t,n;
scanf("%d",&t);
while(t-->0){
scanf("%d",&n);
long arr[n+1];
for(int i=0;i<n;i++){
scanf("%ld",&arr[i]);
}
long sum=arr[0];
int start=0;
long ans=0;
for(int i=1;i<=n;i++){
while(sum>47 && start<i-1){
sum-=arr[start];
start++;
}
if(sum==47)
ans+=1;
if(i<n)
sum+=arr[i];
}
printf("%ld\n",ans);
}
请帮我找出错误..
最佳答案
您的代码将无法通过以下测试用例(至少):
1
4
47 -47 48 -1
你的程序给出的答案是1,而答案应该是3,其中3个序列如下:
<b>47 -47 48 -1</b> [The entire sequence]
<b>47</b> [1st element only]
<b>48 -1</b> [3rd plus 4th elements]
很明显,您遇到了错误。
PS:顺便说一句,你为什么要声明一个包含 n+1 个项目的数组:long arr[n+1];
当你永远不会引用 arr[n]
? (事实上该项目甚至不存在)
这个怎么样 - 它比你想象的要容易 :-)
连续扫描数字。对于遇到的每个数字,将其添加到目前找到的总和中。
保留总和(到目前为止)已找到次数的映射。
现在,为了使总数达到 47,我们只需要找到一个数字,从目前的总和中减去该数字应该得到数字 47。这是必需的,因为如果我们从找到的总和中减去这个数字,那么到目前为止,它会从一些连续数字序列的总和中得到 47。
以上面的例子为例,<b>47 -47 48 -1</b>
用 count = 0 的数字 0 初始化一个 map (也就是说我们到目前为止没有找到总和恰好一次 - 因为我们在开始阶段)
从头扫描列表,取数字 47,到目前为止的总和,比方说,s = 47。我们做了两件事:
取下一个数字,-47。到目前为止的总和,s = 0
取下一个数字,48,到目前为止的总和,s = 48
取最后一个数字,-1,到目前为止的总和,s = 47
所以最终答案 = 3
编写此代码应该相当简单。
关于c++ - SUBSEQ spoj 中的错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21546524/
我有以下定义 Inductive subseq : list nat -> list nat -> Prop := | empty_subseq : subseq [] [] | add_right
我刚开始使用 LISP,具有 C 语言背景。到目前为止它很有趣,尽管学习曲线令人难以置信(我也是 emacs 新手)。 无论如何,我在解析来自 c 源代码的 include 语句时遇到了一个愚蠢的问题
我正在解决 spoj 中的计数子序列问题,但得到了错误的答案。这是链接 http://www.spoj.com/problems/SUBSEQ/ 这是我的代码 #include #include
Clojure 中是否有一种简单/惯用的方法来测试给定序列是否包含在另一个序列中?就像是: (subseq? [4 5 6] (range 10)) ;=> true (subseq? [4 6 5
我是一名优秀的程序员,十分优秀!