Блог пользователя alligator

Автор alligator, 13 лет назад, По-русски
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<fstream>
#include<ctype.h>
#include<vector>
using namespace std;
#define INF 100000.0
#define MAXN 150
struct vertex {
double x;
double y;
}v[MAXN];
double g[MAXN][MAXN]={0};
int n;
double dlin (double x1 , double y1 , double x2 , double y2)
                 {
                 return sqrt ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ) ;
                 }
int main ()
{
//ios_base::sync_with_stdio(0);
freopen ("cowtour.in","r",stdin);
freopen ("cowtour.out","w",stdout);
int i,j;
char t;
cin>>n;
for (i=0;i<n;i++)
     {
    cin>>v[i].x>>v[i].y;
    }
 -------------------------------------------
    for (i=0; i<n; i++)
         {
          for (j=0; j<n; j++)
               {
                 cin>>t;
                 cout<<t<<" ";
                if (t == '0')
                  {printf ("I ");
                  g[i][j] = INF;
                  printf ("%.6llf ",g[i][j]);
                  }
                }
          printf ( "\n");
          }
 ---------------------------------------------
    return 0; 
    }
Это часть решения задачи Cow tour на USACO TRAIN. На инпут даётся N и потом  N координат (x,y), а потом даётся матрица смежности NхN (только 0 и 1). Чуть ниже приведён пример инпута . В той части кода , которую я отделил линиями у меня есть какой-то баг. Там идёт чтение матрицы из инпута. В t  я беру каждый элемент матрицы поочерёдно и если он равняется нулю, то g[i][j] присваиваю INF, но почему-то у меня на компе присваивание идёт нормально , а на компиляторе юсако он вообще не присваивает! У них g[i][j] остаётся 0.000000 , но у меня он присваивает INF. Для проверки того , что заходит ли прога вообще в if, в котором я проверяю равенство t и 0 я сделал там printf ("I "); , вроде прога туда заходит , но она не присваивает  . Кто нибудь скажите в чём проблема? Спасибо).

input
8
10 10
15 10
20 10
15 15
20 15
30 15
25 10
30 10
01000000
10111000
01001000
01001000
01110000
00000010
00000101
00000010
  • Проголосовать: нравится
  • -25
  • Проголосовать: не нравится

»
13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
читать char из потока достаточно странно. я хз что там может прочитаться, например конец строки или возврат коретки, пробел может быть тоже может прочитаться. (символы с 16-ричными кодами 0d, 0a, 20) все это приведёт к лаже. читай строку целиком for (i ....) { string ts; cin >> ts; for (j....) char t = ts[j]....
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    я там для проверки написал cout<<t<<" "; , вроде правильно , сейчас на всякий случай буду читать строку , посмотрим что из этого выйдет)
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится

      и юзая #define вместо объявления константы ты рискуешь напороться на неожиданные баги, также такая лажа не видна в дебагере, в отличие от константы. 

      #define MAXN 150 -> const int MAXN = 150;

      #define INF = 1e6 -> const double INF = 1e6;

  • »
    »
    13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    сменил t на t[MAXN] , а остальное на 

    for (i=0; i<n; i++)
        {
        cin>>t;
        for (j=0; j<n; j++)
             {
             cout<<t[j]<<" ";
              if (t[j] == '0')
                {printf ("I ");
                 g[i][j] = INF;
                 printf ("%.6llf ",g[i][j]);
                }  
            }
        printf ("\n");
        }

    та же проблема

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится
        if (t[i] == '0') ->   if (t[j] == '0')
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится
      и я сомневаюсь, что в условии задачи просили выводить "I 10000.000000"
      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        это только часть кода я же написал
        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится -8 Проголосовать: не нравится
          так выложи на http://everfall.com/paste/ чтобы была не часть, или в личку
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            в данный момент у меня нет возможности заходить на другие сайты , кроме некоторых ...могу отправить тебе в личку, отправить?
            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              выложи на everfall.com/paste и отправь ссылку в личку, можешь целиком заслать прям так, если уж у тебя какая-то лажа с иетом (родители не дают?)
»
13 лет назад, # |
Rev. 2   Проголосовать: нравится +2 Проголосовать: не нравится

Блин, воспитание и самоуважение видно выше крыши, поэтому закономерный вопрос:

- Молодой человек, и не надоело Вам на всеобщее обозрение свой кактус выставлять?

UPD: Видать в школе firewall плохой стоит, коль такие кактусы в сети произрастают... :)

»
13 лет назад, # |
Rev. 2   Проголосовать: нравится -8 Проголосовать: не нравится

Попробуйте перед каждым вводом очищать буффер. В С++ бывает, что если сначала читаются целые или вещественные, а потом строковые или символьные, то ввод последних игнорируется. Туда пихается что- то из буфера.

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится -8 Проголосовать: не нравится
    нее не сработало блин(
    • »
      »
      »
      13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится -13 Проголосовать: не нравится

      Так перепишите ее под Паскаль. В олимпиадах так частенько  поступают. Сбрось на почту мне полный код.

      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится -8 Проголосовать: не нравится
        На олимпиадах часто переписывают код с C++ на паскаль о_О ?