Форум программистов, компьютерный форум CyberForum.ru

Подкиньте несколько вариантов тестов для задачи с acm.timus.ru - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual C++ (наработки есть очень большие) http://www.cyberforum.ru/cpp-beginners/thread647735.html
Помогите за тестировать программы, пожалуйста. Писал некоторые еще по весне, а большая часть написана на днях. Мне просто интересно нет ли багов в программах, все компилится, но все же интересно узнать мнение более квалифицированных людей. В код добавил комменты для ясности. Итак №1.(голова кипит уже, помогите вывести то, что записывается в память, после введения данных) Условие: Разреженная...
C++ Парсинг шрифтов Всем привет. Вот заинтересовала тема о шрифтах, подскажите пожалуйста литературу по шрифтам, хотелось бы научиться считывать файл шрифта и получать данные о геометрии, ну конечно коды символов, в общем хочется знать о строении шрифтов всё. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread647728.html
Судоку C++
# include <algorithm> # include <iostream> # include <string.h> # include <stdio.h> # include <iomanip> # include <vector> using namespace std; class cell { int namber;
C++ Стек
Уважаемые теоретики по С++ подскажите, пожалуйста, как граммотно называются в Стеке самое нижнее и самое верхнее значения. Заранее спасибо.
C++ ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread647699.html
Я только начал изучать с++ , и вот уже проблемы, помогите разобраться в чём тут ошибка пожалуйста. //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- #include <iostream.h> #include <conio.h> #include <math.h> #pragma argsused
C++ Алгоритм поиска по строке Кнута-Морриса-Пратта Само задание таково: Программа должна быть грамотно функционально разбита на модули и функции. • Входные данные – текстовый файл. • Выходные данные – текстовый файл, содержащий найденные слова с указанием позиции во входном файле (номер строки, позиция в строке, количество вхождений слова в файле). номер строки: 3 позиция в строке:9 но при компилировании выдает ошибку #include... подробнее

Показать сообщение отдельно
sdq34
0 / 0 / 0
Регистрация: 19.08.2012
Сообщений: 3
09.09.2012, 17:49  [ТС]     Подкиньте несколько вариантов тестов для задачи с acm.timus.ru
valeriikozlov, огромное спасибо, сам никогда бы не догадался, теперь буду учитывать,
прошёл 5 тест, но теперь на 11 застрял - time limit exceeded, убрал ненужные вычисления, а там было много таких, но все равно не проходит, вот обновленный вариант, если не трудно. не подскажите, что делать дальше?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <vector>
#include <stdio.h>
 
using namespace std;
 
double interseption(int x1,int y1,int x2,int y2,int x3, int y3, int x4, int y4);
bool point_segment(int x, int y, int x1, int y1, int x2, int y2);
double yinterseption(int x1,int y1,int x2,int y2,int x3, int y3, int x4, int y4);
 
int main()
{
    freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
    vector<int>kills;
    vector<int>muh_x;
    vector<int>muh_y;
    int amount_muh(0);
 
    scanf("%d",&amount_muh);
    
    for (int i = 0; i<amount_muh; ++i) { int temp(0); scanf("%d",&temp); muh_x.push_back(temp); scanf("%d",&temp); muh_y.push_back(temp); }
 
    int amount_muhob(0);
    int amount_versh = 0;
    int killed(0);
    scanf("%d",&amount_muhob);
 
    for (int i = 0; i < amount_muhob; ++i)
    {
        vector <int> muhob_x;
        vector <int> muhob_y;
        scanf("%d",&amount_versh);
        
        for (int k = 0; k<amount_versh; ++k) { int temp(0); scanf("%d",&temp); muhob_x.push_back(temp); scanf("%d",&temp); muhob_y.push_back(temp); }
        int crossing(0);
        int muh_x2(0), muh_y2(0);
        for (int j = 0; j < amount_muh; ++j)
        {
            muh_x2=muh_x[j]+5;
            muh_y2=muh_y[j];
           bool flag(false);
            for (int k = 0; k<(amount_versh); ++k)
              {
                  int l(k),l1(k+1);
                  if (k==(amount_versh-1)) l1=0;
                  if (muh_x[j]>muhob_x[l] && muh_x[j]>muhob_x[l1] ) continue;
                  if (muh_y[j]>muhob_y[l] && muh_y[j]>muhob_y[l1] ) continue;
                  if (muh_y[j]<muhob_y[l] && muh_y[j]<muhob_y[l1] ) continue;
                  if (point_segment(muh_x[j],muh_y[j],muhob_x[l],muhob_y[l],muhob_x[l1],muhob_y[l1])==true) {killed++; flag=true; break; }
                  double x(0),y(0);
                
                  x=interseption(muh_x[j],muh_y[j],muh_x2,muh_y2,muhob_x[l],muhob_y[l],muhob_x[l1],muhob_y[l1]);
                  y=yinterseption(muh_x[j],muh_y[j],muh_x2,muh_y2,muhob_x[l],muhob_y[l],muhob_x[l1],muhob_y[l1]);
                 
                  
                  if (x==300000000) continue;
 
                  if (x!=muhob_x[l]&&x!=muhob_x[l1]) { crossing++; continue; }
            
                  if (x==muhob_x[l1] && y==muhob_y[l1])
                      {
                          int l2(k+2);
                          if (l2>=amount_versh) l2=l2-amount_versh;
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[l1]<muhob_y[l2]) { crossing++; continue; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[l1]>muhob_y[l2]) { crossing++; continue; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[l2]>muhob_y[l1]) { continue; }
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[l2]<muhob_y[l1]) { continue; }
                          int l3(k+3);
                          if (l3>=amount_versh) l3=l3-amount_versh;
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[l1]<muhob_y[l3]) { crossing++; continue; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[l1]>muhob_y[l3]) { crossing++; continue; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[l3]>muhob_y[l1]) continue;
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[l3]<muhob_y[l1]) continue;
                          int counter(0);
                          counter=k+3;
                          
                    while(true)
                    {
                        counter++;
                          if (counter>=amount_versh) counter=counter-amount_versh;
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[l1]<muhob_y[counter]) { crossing++; goto label; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[l1]>muhob_y[counter]) { crossing++; goto label; }
                          if (muhob_y[l]>muhob_y[l1] && muhob_y[counter]>muhob_y[l1]) goto label;
                          if (muhob_y[l]<muhob_y[l1] && muhob_y[counter]<muhob_y[l1]) goto label;
                    }
                    
                      }
 
                 
                  if (x==muhob_x[l1] && x==muhob_x[l] && ((muhob_y[l]<y&&y<muhob_y[l1])||(muhob_y[l1]<y&&y<muhob_y[l]))) {crossing ++; continue; }
                
                label: ;
 
              }
                  if (crossing%2==1 && flag==false) killed++;
                  if (crossing%2==1 && flag==true) { }
                  crossing=0;
                  flag=false;
         
        }
        kills.push_back(killed);
        killed=0;
    }
    for (int i = 0; i< kills.size(); ++i)
    printf("\n%d",kills[i]);
    
    return 0;
}
 
double interseption(int x1,int y1,int x2,int y2,int x3, int y3, int x4, int y4)
{
    double x(0);
    if ((y4-y3)==0) return 300000000;
    double y1_copy(y1),y3_copy(y3),x4_copy(x4),x3_copy(x3),y4_copy(y4);
    x=(y1_copy-y3_copy)*(x4_copy-x3_copy);
    x=x/(y4_copy-y3_copy);
    x+=x3_copy;
    double ax3=x3<x4 ? x3:x4;
    double ax4=x4>x3 ? x4:x3;
    double y(0);
    double x1_copy(x1),y2_copy(y2),x2_copy(x2);
    
    if (x>x1 && ax3<=x && x<=ax4 ) { } else x=300000000;
    return x;
}
double yinterseption(int x1,int y1,int x2,int y2,int x3, int y3, int x4, int y4)
{
    double x(0);
    if ((y4-y3)==0) return 0;
    double ay3=y3<y4 ? y3:y4;
    double ay4=y4>y3 ? y4:y3;
    double x1_copy(x1),y2_copy(y2),y1_copy(y1),x2_copy(x2);
    double y(0);
    y=(x-x1_copy)*(y2_copy-y1_copy);
    y=y/(x2_copy-x1_copy);
    y+=y1_copy;
    if (ay3<=y && y<=ay4 ) { } else y=0;
    return y;
}
 
bool point_segment(int x, int y, int x1, int y1, int x2, int y2)
{
 
    if (x==x1 && y==y1) return true;
    if (x==x2 && y==y2) return true;
    int smallx(0),bigx(0);
    smallx=x1<x2 ? x1 : x2;
    bigx=x2>x1 ? x2 : x1;
    int smally(0),bigy(0);
    smally=y1<y2 ? y1 : y2;
    bigy=y2>y1 ? y2 : y1;
    if (x1==x2 && x==x1){ if (smally<y && y<bigy) return true; else return false;}
    if (y1==y2 && y==y1){ if (smallx<x && x<bigx) return true; else return false;}
    if (smallx<x && x<bigx) { } else return false;
    if (smally<y && y<bigy) { } else return false;
 
    double xd(0);
    double y_copy(y),x1_copy(x1),x2_copy(x2),y1_copy(y1),y2_copy(y2);
    xd=(x2_copy-x1_copy)*y_copy + (x1_copy*y2_copy-x2_copy*y1_copy);
    double temp(0);
    temp=y2_copy-y1_copy;
    xd=xd/temp;
    double xtemp=x;
    if (xd==xtemp && smallx<=xtemp && xtemp<=bigx) return true; else return false;
    return false;
}
 
Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru