На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
DeusEx написав:
какие еще проекции? вы что? задача решается элементарно - просто проводим окружность с центром совпадающим с центром стола и диаметром равным диагонали карты, находим точки пересечения и растояния между ними, наименьшее растояние - это наибольшая ширина карты с таким диаметром, если класть карту не горизонтально. Горизонтальный вариант проверяется вообще в одну строчку.
я так и сделал...
а проекции - это только для проверки...
Поза форумом
X=160
Y=4
A=140
B=80
double ang=asin(A/sqrt(X*X+Y*Y))-asin(Y/sqrt(X*X+Y*Y)); // =1.039877 - вычисление угла, чтоб одна проекция была 140
double pr1=Y*cos(ang)+X*sin(ang); // =140.000000
double pr2=Y*sin(ang)+X*cos(ang); // =84.461612 больше 80 - не поместится
Поза форумом
Angry Coder написав:
X=160
Y=4
A=140
B=80
double ang=asin(A/sqrt(X*X+Y*Y))-asin(Y/sqrt(X*X+Y*Y)); // =1.039877 - вычисление угла, чтоб одна проекция была 140
double pr1=Y*cos(ang)+X*sin(ang); // =140.000000
double pr2=Y*sin(ang)+X*cos(ang); // =84.461612 больше 80 - не поместится
гхм...и вправду интересное решение . Но через окружность проще и быстрее.
Поза форумом
это не решение:) я просто наглядно хотел убедить хХх в правильности ответа. я делал ее еще проще, чем окружности. ни одного вычисления типом double(real). все на интах. очень просто:)
Поза форумом
xXx написав:
Оказываеться мы проекции не умеем считать...
То, что ты написал - это ни как не проекции на стороны стола...
а что же это:))) ?
Поза форумом
Angry Coder написав:
это не решение:) я просто наглядно хотел убедить хХх в правильности ответа. я делал ее еще проще, чем окружности. ни одного вычисления типом double(real). все на интах. очень просто:)
так чего ждем? выкладывай решение
Поза форумом
#include <stdio.h>
int main()
{
int i,n;
double a,b,c,d;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf%lf%lf%lf",&c,&d,&a,&b);
if ((c<=a && d<=b)||(d<=a && c<=b)) {printf("1"); continue;}
if ((a<=c && a<=d)||(b<=c && b<=d)) {printf("0"); continue;}
double k=c*c-d*d;
double kx=b*c*c-c*a*d;
double ky=-d*b*c+a*d*d+a*k;
if (kx*kx+ky*ky<c*c*k*k) printf("0");
else printf("1");
}
return 0;
}
Поза форумом
на мой взгляд мое проще. вот одна формула и вся задача.
z=sqrt((0.5*b-sqrt(0.25*(x*x+y*y-a*a)))*(0.5*b-sqrt(0.25*(x*x+y*y-a*a)))+ (0.5*a-sqrt(0.25*(x*x+y*y-b*b)))*(0.5*a-sqrt(0.25*(x*x+y*y-b*b))) );
Поза форумом
этот зет должен быть больше равен меньшей стороне карты, если мы ее хотим разместить по диагонали.
Поза форумом
просто решение на интах - это круто. никаких ошибок точности. все четко. числа с плавающей точкой не рулят.
Поза форумом
Angry Coder написав:
xXx написав:
Оказываеться мы проекции не умеем считать...
То, что ты написал - это ни как не проекции на стороны стола...а что же это:))) ?
pr1 - сумма длин проекций Y на одну сторону и X на другую
pr2 - с точностью до наоборот...
Поза форумом
Angry Coder написав:
просто решение на интах - это круто. никаких ошибок точности. все четко. числа с плавающей точкой не рулят.
я думаю на этой олимпиаде, на этом туре и для этой задачи это не столь важно. Я потратил на задачу 20 мин в целом и меня это устраивает.
Поза форумом
Посмотрим потом на результаты...
Поза форумом
xXx написав:
Angry Coder написав:
xXx написав:
Оказываеться мы проекции не умеем считать...
То, что ты написал - это ни как не проекции на стороны стола...а что же это:))) ?
pr1 - сумма длин проекций Y на одну сторону и X на другую
pr2 - с точностью до наоборот...
ты не прав. может ты не понял, что такое угол ang? это угол между стороной X и A.
в таком случае это проекции. посмотри внимательно.
Поза форумом
DeusEx написав:
на мой взгляд мое проще. вот одна формула и вся задача.
z=sqrt((0.5*b-sqrt(0.25*(x*x+y*y-a*a)))*(0.5*b-sqrt(0.25*(x*x+y*y-a*a)))+ (0.5*a-sqrt(0.25*(x*x+y*y-b*b)))*(0.5*a-sqrt(0.25*(x*x+y*y-b*b))) );
проще не бывает...)
это на сколько голова должна быть трезвой чтоб это понять? (или сгенерить?)
Поза форумом
xXx написав:
DeusEx написав:
на мой взгляд мое проще. вот одна формула и вся задача.
z=sqrt((0.5*b-sqrt(0.25*(x*x+y*y-a*a)))*(0.5*b-sqrt(0.25*(x*x+y*y-a*a)))+ (0.5*a-sqrt(0.25*(x*x+y*y-b*b)))*(0.5*a-sqrt(0.25*(x*x+y*y-b*b))) );проще не бывает...)
это на сколько голова должна быть трезвой чтоб это понять? (или сгенерить?)
да ну тут действительно все просто. пару раз теорему пифагора используешь и все. кажется мы ее учили еще 3 или 4 года назад.
Поза форумом
Имеешь в виду, что карта лежит параллельно диагонали? А ты уверен, что варинт оптимальный?
Поза форумом
Anna написав:
Имеешь в виду, что карта лежит параллельно диагонали? А ты уверен, что варинт оптимальный?
параллельно? м...нет...параллельно она лежит только если стол квадратный...Я предлагаю провести окружность через центр стола с диаметром карты. И найти точки пересечения окружности со столом.
Поза форумом
Angry Coder написав:
xXx написав:
Angry Coder написав:
а что же это:))) ?pr1 - сумма длин проекций Y на одну сторону и X на другую
pr2 - с точностью до наоборот...ты не прав. может ты не понял, что такое угол ang? это угол между стороной X и A.
в таком случае это проекции. посмотри внимательно.
короче фигня получаеться...
формулы какие-то не такие...
если хочешь, можешь поискать авторские решения...и проверь на них, если на твоём тесте будет 0, то я л...р(не хороший человек)
Поза форумом
DeusEx написав:
Anna написав:
Имеешь в виду, что карта лежит параллельно диагонали? А ты уверен, что варинт оптимальный?
параллельно? м...нет...параллельно она лежит только если стол квадратный...Я предлагаю провести окружность через центр стола с диаметром карты. И найти точки пересечения окружности со столом.
ну, собственно, я так и делала...
Поза форумом
xXx написав:
короче фигня получаеться...
формулы какие-то не такие...
если хочешь, можешь поискать авторские решения...и проверь на них, если на твоём тесте будет 0, то я л...р(не хороший человек)
да мне не за чем:) я уверен на 100%. по крайней мере в формулах для проекций.
Поза форумом
Anna написав:
DeusEx написав:
Anna написав:
Имеешь в виду, что карта лежит параллельно диагонали? А ты уверен, что варинт оптимальный?
параллельно? м...нет...параллельно она лежит только если стол квадратный...Я предлагаю провести окружность через центр стола с диаметром карты. И найти точки пересечения окружности со столом.
ну, собственно, я так и делала...
значит могу тебя уже поздравить с хорошими результатами по этой задаче . Ладно пошел я с этого форума, все равно администрация спит и результатов мы не дождемся. Если что - пиши на e-mail.
Поза форумом
По задаче про цепь : там действительно не может быть больше 2х разрезов? У меня получилось именно так...
Поза форумом
Anna написав:
По задаче про цепь : там действительно не может быть больше 2х разрезов? У меня получилось именно так...
конечно. 1 или 2....и цепь не всю надо рассматривать, а 3\4 максимум....
вот решение :
# include <iostream.h>
# include <string.h>
using namespace std;
int main() {
int n,x,c0,c1,c,first;
cin >> n;
string str("");
c0=0;
c1=0;
c=0;
for (int i=1;i<=n;i++){
cin >> x;
c++;
if (x==0) {str.append("0");};
if (x==1) {str.append("1");};
if (str.substr(0,1)=="0"){first=0;};
if (str.substr(0,1)=="1"){first=1;};
if (x==0) {c0++;};
if (x==1) {c1++;};
if (c>=n/2) {
if (c0==c1) {
if (c-n/2>0) {cout << "2 " << c-n/2 << " " << c-n/2+1 << " " << c << " " << c+1 << endl;};
if (c-n/2==0) {cout << "1 " << c << " " << c+1 << endl;};
};
if (c0!=c1) {
if (first==0) {c0--;};
if (first==1) {c1--;};
str.erase(0,1);
};
};
}
return 0;
}
Поза форумом