Пытаюсь решить задачу
1258. Pool. Возникает ошибка сегментации, хотя такой же код на C++ проходит.
Вот код на C#:
using System;
using System.Threading;
namespace _1258шарп
{
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
long W, H, x, y, xf, yf;
string str;
String[] N = Console.ReadLine().Split();
W = long.Parse(N[0].Trim()); H = long.Parse(N[1].Trim());
N = Console.ReadLine().Split();
x = long.Parse(N[0].Trim()); y = long.Parse(N[1].Trim());
N = Console.ReadLine().Split();
xf = long.Parse(N[0].Trim()); yf = long.Parse(N[1].Trim());
str = Console.ReadLine();
long xd = 0, yd = 0;
foreach (char c in str)
{
switch (c)
{
case 'F':
yd += y;
y = 0;
break;
case 'B':
yd += H - y;
y = H;
break;
case 'R':
xd += W - x;
x = W;
break;
case 'L':
xd += x;
x = 0;
break;
}
}
xd += Math.Abs(x - xf); yd += Math.Abs(y - yf);
Console.Write("{0:F4}", Math.Sqrt((double)(xd * xd + yd * yd)));
}
}
}
Вот код на C++:
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
long long W, H, x, y, xf, yf;
string str;
cin >> W >> H >> x >> y >> xf >> yf >> str;
long long xd = 0, yd = 0;
for (auto c : str)
{
switch (c)
{
case 'F':
yd += y;
y = 0;
break;
case 'B':
yd += H - y;
y = H;
break;
case 'R':
xd += W - x;
x = W;
break;
case 'L':
xd += x;
x = 0;
break;
}
}
xd += abs(x - xf), yd += abs(y - yf);
cout << fixed << setprecision(4) << sqrt(double(xd * xd + yd * yd));
}
UPD: я добавил Trim() при перевода значений в long, но это не помогло.