- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题链接::http://www.hackerearth.com/the-big-bang-challenge/algorithm/subset-and-4/
问题是给你一个数字 Z
和一些 n
整数。您必须找出是否存在 n 个整数的子集并且(按位运算符)Z 给出零,如果存在则打印"is",否则打印“否”。
我知道一个简单的方法就是对所有输入的 n 个数字和 Z 进行 AND,看看它是否给出零。但是当我第一次看到这个问题时,我无法意识到这一点。我实际上为此感到非常愚蠢。
这是我在阅读问题时首先编写的代码::
#include <stdio.h>
int main()
{
int t;
int n;
long int z;
int i,j,x;
long int a[1000];
int b[30];
int count,count2;
int flag;
scanf("%d",&t);
while(t--)
{
scanf("%ld %d",&z,&n);
count=0;
for(i=0;i<n;i++)
scanf("%ld",&a[i]);
for(i=0;i<30;i++)
b[i]=-1;
j=0;
for(i=0;i<25;i++)
{
if(z&1==1)
{
b[j++]=i;
count++;
}
z=z>>1;
}
flag=0;
count2=0;
for(i=0;i<n;i++)
{
for(j=0;j<count;j++)
{
x=a[i];
if(b[j]!=-1)
{
x=x>>b[j];
// printf("New x=%d\nx&1=%d\n",x,x&1);
x==x&1;
if(x==0)
{
count2++;
b[j]=-1;
}
// printf("Count2=%d and Count1=%d\n",count2,count);
}
}
if(count2>=count)
{
flag=1;
break;
}
}
if(flag==0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
我的代码实际上打算做什么??
在我的代码中,我检查了整数 Z 的二进制表示并计算数字中出现的 1 的数量,并将 1 的位置记录在单独的数组 b[30]
中。我将所有 n
整数存储在数组 a[1000]
中,并检查所有整数是否有 0
位置我存储在 b[30]
中,如果其中任何一个存储了,那么我将 b[30] 位置标记为已标记,这样我就不会在前面的数字中再次检查该位位置一个[1000]。如果我发现我存储在 b[30] 中的所有位置都是零,那么我打印 yes,否则我打印 No。
我知道与我应该做的相比,这是一个非常困惑和糟糕的算法。但是,请帮助大家。我的代码在提交时给出了错误的答案。
例如:Z=5,则Z的二进制为1001
,即第0位和第3位为1
。因此,在数组 b[30] 中,我将位为 1 的位置存储在 Z 中。像这里一样,我将 0
存储在 b[0]
(对于第一个Z 中的有效位),然后将 3
存储在 b[1](用于下一个有效位),我这样做 20 位(根据我的需要),如果任何位为 1,那么我将其位置存储在 b[j++]
中。
然后,我开始将我存储在 a[1000] 中的所有元素一个一个地存储到 x 中,然后从我之前处理过的 b[30]
数组中取 1 个位置,将x右移那么多位置,并检查最右边的位是否为1。例如,我的a[1000]数组有2个元素,3和1。3是0011,我将3存储在x中,取b[0]然后执行 x>>b[0],在本例中与 0011 相同(因为 b[0] 为 0)。然后我通过执行 x&1
检查最右边的位,它返回 1,因此该位不为零,所以我前进到 b[1],它是 3,然后我执行 x>>b[ 1],它给出 0000
,然后我检查 x&1,它给我零。所以,现在我知道我在数组中有一个数字的第 3 位为零,所以我将 b[1] 标记为 -1,这样我就不会再次检查它以获得 a[1000] 中的下一个整数。然后我取 1
这是 a[1000] 的第二个元素,然后执行与上面相同的步骤,我发现我在 a[1000] 中没有第 0 位为零的元素.因此,我没有在 Z 为 1 的位置具有零位的元素。因此,AND 永远不会为零,所以我打印 No
。
问题陈述::(如HackerEarth)
You are given a number Z and a set S with N elements. Your job is to find a sub set of S such that the AND of the given number and this subset is zero. If this sub set is possible print "Yes" otherwise print "No"
Input First line contains number of test case T. Each test case contains two lines , first line contains two numbers Z and N , where Z is given number and N is size of set S . Second line contains N elements of the subset S.
Output For each test case print Yes if the subset is possible else print No .
Constraints: 1<=T<=100 1<=N<=1000 0<=Ai<=Z<=1000000
示例输入3个10 22 010 31 1 15 31 5 3
示例输出是的是的否
我的代码给出了示例输入的正确答案,但在 HackerEarth 提交中失败。请大家帮忙..提前感谢您的帮助.. :)
最佳答案
你的想法也不错,但是你把它复杂化了一点。你能想一想如何更简化它吗(做的事情比你描述的要少,但保持相同的总体思路)?继续阅读了解方法。
And I store all the n integers in the array a[1000]
您不需要存储它们:您只会使用它们中的每一个一次,所以不要费心存储它们。只需依次阅读和处理每一个。
and check all the integers if any of them have a 0 at the positions that I stored in b[30] and if any of them does then I mark that b[30] position as marked, so that I do not check for that bit position again
无需标记或为不再检查而烦恼。你怎样才能更容易地做到这一点?只需为您在 i
位置的数字中找到的每个零递减每个 b[i]
。然后,如果 b
仅包含数字 <= 0,您将打印 yes
。
现在,我们已经删除了您想要做的两件事,同时保留了您的想法。这很好,因为如果我们少做一些工作,我们做错事的机会就会减少。
我意识到这并不能回答您的代码有什么问题。我的观点是,通过更多地思考您的想法,您可以编写更好的代码,这最有可能起作用。在这种情况下,您会摆脱很多不必要的包袱,减少犯错的机会。
至于你的代码到底哪里错了,有很多东西,但最重要的是这个:
for(i=0;i<n;i++)
{
for(j=0;j<count;j++)
{
x=a[i]; <= you are setting x for each j.
You probably want this a level up, in the other loop?
if(b[j]!=-1) <= don't need this the way I described it.
{
x=x>>b[j]; <= b[j] has no bearing on how much you shift x by.
You probably meant x = x>>j?
But wait, that's wrong too, because we're in a loop,
so we'll shift by too much! Maybe x = x>>1?
// printf("New x=%d\nx&1=%d\n",x,x&1);
x==x&1; <= this doesn't do anything. Why?
What is the difference between == and =?
Do you want to use =, or move this in the if below?
if(x==0)
{
count2++;
b[j]=-1;
}
// printf("Count2=%d and Count1=%d\n",count2,count);
}
}
if(count2>=count)
{
flag=1;
break;
}
}
我推荐一个编程教程,比如这个:http://www.cprogramming.com/tutorial/c-tutorial.html以及该网站上的其他人,让您在尝试解决比赛问题之前开始。
关于c - HackerEarth 上的错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25595822/
(function() { main(); function main() { jQuery(document).ready(function($) {
所以我必须为我们的类(class)软件设计制作一个 GUI,我们正在为 children 制作一个游戏来练习乘法表。到目前为止,当您执行一次测试或练习时它工作正常,但是当您进行第二次运行时,它会出错。
我刚开始学习 python,想做一些琐事。基本上,我想从列表中随机询问一个问题,然后使用“输入”运算符来判断用户输入的 Y/N 是否正确。我坚持确定如何检查它是否正确。也许我的(不正确的)代码可以更好
我目前正在做一个暑期实习项目,我必须制作一个不经意的 DNS 翻译服务器。我不会在这里详细讨论被忽视的部分,但我会解释我的程序的架构。 有一个服务器端接收混淆的请求并发回一个它自己无法理解的答案。 在
我想用ajax请求翻译单词到谷歌翻译 如果我使用 curl,它会像: curl_init("http://translate.google.com/translate_a/t?client=t&tex
这是我运行dig www.google.com时的答案部分: ;; ANSWER SECTION: www.google.com. 108 IN A 74
我在ES上有以下简单数据: curl -XPUT localhost:9200/dt/art/1 -d '{ "age": 77 }' curl -XPUT localhost:9200/dt/art
我从编码开始,我有一个多维数组的示例。但它没有给出预期的答案。 我只得到“C”,我期待“JohnnyCash:Live at Folsom Prison”。出了什么问题? var music = []
我们有一个应用程序与 Crashlytic 和 Answers 配合得很好。我们需要为这个应用程序做一个不同的风格。因此,我们的 Gradle 编译工作正常,并为两个不同的品牌制作了两个不同的 APK
我正在尝试从数据库获取歌曲列表。 我在查询行中发送一个 ID 数组(永久链接),并且我希望返回值的顺序与我在数组中给出的顺序相同。有没有办法做到这一点? function getByPermalink
我有一个表单可以输入这样的值 test 有没有办法用jquery改变输入类型 我基本上想把这个添加到输入类型中 data-slider="true" data-sl
好吧,我距离数学高手还很远。哎呀,我记住了足够多的高中代数,可以拼凑出任何有效的公式,这对我来说是一个胜利。因此,如果您注意到这里有一个不必要的长或令人困惑的公式,那就可以解释了。 但是,正如人们可以
所以我的问题有点令人困惑,但仍然如此。我从外部源获取一个由 8 个字符串组成的数组,其中所有字符串都包含 double 值。这些值通常为小数点后 4 位: 12345.5678 我想做的是将其转换为小
我成功地构建了一个函数来提示用户提出问题,然后是随机排列的答案选项。但是,由于答案选择现在是随机的,python 如何识别用户输入(数字:1、2、3 或 4)以获得“正确”答案? import ran
我正在尝试使用蛮力来回答这个问题,这样我就可以理解发生了什么: https://www.interviewcake.com/question/java/product-of-other-numbers
尝试使用刚刚宣布的 Answers OSX平台框架: pod 'Fabric' pod 'Answers' pod 'Crashlytics' #import #import #import [
在我添加的页面上检索忘记的用户名 步骤 1) 输入电子邮件地址(通过电子邮件获取帐户) 第 2 步)验证安全问题(他们提供答案,我对其进行验证) 第 3 步)向他们发送带有用户名的电子邮件 第 2 步
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
在我的测试中,我需要模拟一种情况,当使用实体管理器(em)将新对象保存到数据库中时,在此过程中,该对象的id属性设置为数据库中该行的自动递增ID。我想将该id属性设置为我自己的值,以便稍后在测试中进行
我有这个代码。调用askToContinue() 方法来询问用户是否要继续,但我的问题是它只是忽略选择并重新启动程序,无论我输入什么。我在代码中遗漏了什么导致它忽略我的选择? public class
我是一名优秀的程序员,十分优秀!