竟然会超时,WHY?
题目:http://acm.timus.ru/problem.aspx?space=1&num=1209
这样写会超时?有些搞不明白了。。
大伙看看是什么原因?
也顺便说说有没有什么更好更快的方法。。
using System;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int count = int.Parse(Console.ReadLine()); long[] num = new long[count]; for(int i=0;i<count;i++) num[i] = long.Parse(Console.ReadLine()); string result = string.Empty; DateTime dt1 = DateTime.Now; foreach (long n in num) result += ZeroOrOne(n) + " "; Console.Write(result.Trim()); } static int ZeroOrOne(long number) { double d = Math.Sqrt((number<<1) - 1.75) + 0.5; if (d - (long)d == 0) return 1; return 0; } }}
using System;class Program{ static void Main() { int count = int.Parse(Console.ReadLine()); long[] num = new long[count]; for(int i=0; i < count; i++) { num[i] = long.Parse(Console.ReadLine()); } foreach (long n in num) { Console.Write(ZeroOrOne(n)); Console.Write(" "); } } static int ZeroOrOne(long number) { double d = Math.Sqrt((number<<1) - 1.75) + 0.5; return d == (long)d ? 1 : 0; }}
[解决办法]
好像输入的数字一大就超时。小数字没有问题
[解决办法]
这样更简单,没有必要开一个数组保存输入,边输入边输出就可以了:
using System;class Program{ static void Main() { int count = int.Parse(Console.ReadLine()); for(int i = 0; i < count; i++) { Console.Write(ZeroOrOne(long.Parse(Consoleguration::
------解决方案--------------------
没有必要用 long,用 uint 就够了:
using System;class Program{ static void Main() { int count = int.Parse(Console.ReadLine()); for(int i = 0; i < count; i++) { Console.Write(ZeroOrOne(uint.Parse(Console.ReadLine()))); Console.Write(" "); } } static int ZeroOrOne(uint number) { double d = Math.Sqrt((number<<1) - 1.75) + 0.5; return d == (uint)d ? 1 : 0; }}
[解决办法]
看看
[解决办法]
using System;class Program{ static void Main() { int count = int.Parse(Console.ReadLine()); for(int i = 0; i < count; i++) { Console.Write(ZeroOrOne(uint.Parse(Console.ReadLine()))); if (i < count - 1) Console.Write(" "); } } static int ZeroOrOne(uint number) { double d = Math.Sqrt((number<<1) - 1.75) + 0.5; return d == (uint)d ? 1 : 0; }}