【问题标题】:HackerEarth Girlfriend's Demand ChallengeHackerEarth 女友的需求挑战
【发布时间】:2015-02-16 13:48:54
【问题描述】:

问题描述可以在Here找到。我的程序正在生成与示例测试用例匹配的输出,但是当遇到大整数时,程序会崩溃,我无法找出原因。当用户提供的数据类似于 a:=252509054433933447 b:=760713016476190629 时,程序要么停止响应,要么我收到 SIGABRT 错误,或者处理 1 个输入文件的时间超过了最大分配时间。我的代码有什么问题?有人可以建议一个更好的算法来做到这一点吗?请帮我找出错误。

#include<stdio.h>
#include<string.h>
int main()
{
      long long int a,b,input,len,len1,len2;
      char dem[1000];
      char temp[100000];
      scanf("%s",dem);
      scanf("%u",&input);

      len=strlen(dem);

      for(unsigned int i=0;i<input;i++)
      {
        scanf("\n%lld %lld",&a,&b);

        if(b>len)
        {
          len1=b/len;
          for(unsigned int j=1;j<=((len1+1));j++)
          {
          strcat(temp,dem);
          }
         }
         else
         {
            if(dem[a-1]==dem[b-1])
            {
             printf("\nYes");
            }
            else
            {
              printf("\nNo");
            } 
         }
        len2=strlen(temp);
        if(len2!=0)
        {
        if(temp[a-1]==temp[b-1])
        {
          printf("\nYes");
        }
        else
        {
          printf("\nNo");
        }
        }  

        }

}

【问题讨论】:

  • %u for long long int?
  • 是的,这是一个错误,但不要认为它与 SIGABRT 错误或超出时间限制的输出有关。

标签: c algorithm runtime-error time-complexity


【解决方案1】:

哇,这是一个厌恶女性的问题描述。真可惜。

你的问题在这里:

for(unsigned int j=1;j<=((len1+1));j++)
{
   strcat(temp,dem);
}

您不应该将给定的字符串与其自身连接,因为给定的限制不适合内存。相反,如果您确实进行了连接,请尝试使用模运算来找出某个位置的字符。

例如,如果您有字符串 abc,我问,通过无限次重复 abc 形成的字符串中位置 10 处的字符是什么,您会这样做(从零开始的索引):

char_at_position = str[10 % len(abc)] = str[10 mod 3] = str[1] = b

0123456789 10
abcabcabca b  c
           *

【讨论】:

  • 哇,这是一个厌恶女性的问题描述。真可惜。同意:/
  • 哈哈哈:D 如此真实。 Bdw,我尝试了几次来弄清楚逻辑,但我根本无法弄清楚标记字符串字母索引的模式。模式似乎无法识别。 :(
  • @ArindrajitChakraborty - 我也发布了这个模式。对于他们的示例,请注意字符串的长度是57 mod 5 = 214 mod 5 = 4。位置 2 和 4 的字符是什么?
  • @IVlad 是的,如果字符串是 like= vgxgp,那么在位置 2 有“g”,在位置 4 有另一个“g”。所以输出是肯定的。非常感谢。
猜你喜欢
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2014-12-21
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多