PDA

View Full Version : کمک:الگوریتم یا سورس یک برنامه


عرفنا
18 October 2006, 06:25 PM
دوستانی که در زمینه ی برنامه نویسی تجربه دارند اگر ممکنه برای پیدا کردن پاسخ این سوال مسابقات acm در زبان c کمک کنن.
تعدادی مسلس قاعم الزاویه ی سیاه روی سفهی ی مختسات توری قرار گرفته اند که اضلاع قاعمه ی آن ها موازی مهورهای مختسات بودت و رعوس آن ها نیز مختساتی سهیه دارند.از شما خاسته شده است مساهت سته سیاه به وجود آمده از تمامی این مسلس ها را پیدا کنید.
ورودی
ورودی متشکل از چند تست است.برای هر تست در ابتدا (n <200 )تعداد مسلس ها آمده است. سپس در N ستر بعدی، در هر ستر 6 عدد به سورت x1 y1 x2 y2 x3 y3 داده شده است که xi yi مختسات راس iام است. می دانیم تمام مختسات در بازه ی -500 تا500 است.
در آخرین تست، مقدار n برابر سفر داده شده است که این تست نیازی به پردازش ندارد.
خروجی
به ازای هریک از تست های ورودی در یک ستر مساهت سته سیاه هاسل از مسلس های آن تست را تا دو رقم اعشار بنویسید.
مابین هر دو تست متوالی نیز یک خت خالی چاپ کنید.
نکته: دقت کنید مسلس ها می توانند به تور کامل یا قسمتی بر روی هم بیفتند.

دوستان خاهشن سریع تر کمک کنن که خیلی گیر این مسالم :icon_cry:

عرفنا
19 October 2006, 12:51 PM
کسی از دوستان کمکی در این مورد نتونست بکنه؟؟:icon_eek: لتفن نهایت سعیتونو بکنین. فکر می کنم هلش برای خود شخسم خیلی کمک باشه :icon_cool

عرفنا
1 November 2006, 03:23 AM
#include <iostream>
#include <fstream>
using namespace std;


int main()
{
int n,temp,f=0,i,m=0;
int x[3],y[3];
bool bor[100][100][4];
for(i=0;i<100;i++)
for (int j=0;j<100;j++)
for (int k=0;k<4;k++)
bor[i][j][k]=false;

ifstream fin;
fin.open("test.txt");
if (!fin.is_open())
{
cerr << "There is an error in finding the file!";
return 1;
}
ofstream fout;
fout.open("test2.txt");
fin >> n;
for (int u=0;u<n;u++)
{
fin>> x[0] >> y[0] >> x[1] >> y[1] >> x[2] >> y[2];
x[0]+=50;
x[1]+=50;
x[2]+=50;
y[0]+=50;
y[1]+=50;
y[2]+=50;
if (x[1]==x[2])
{
temp=x[0];
x[0]=x[2];
x[2]=temp;
temp=y[0];
y[0]=y[2];
y[2]=temp;
}
if (x[0]==x[2])
{
temp=x[1];
x[1]=x[2];
x[2]=temp;
temp=y[1];
y[1]=y[2];
y[2]=temp;
}
if(y[1]>y[0])
{
temp=x[0];
x[0]=x[1];
x[1]=temp;
temp=y[0];
y[0]=y[1];
y[1]=temp;
}
if (y[0] == y[2])
{
if (x[0] > x[2])
{
m=x[1];
i=y[1];
while (m>x[2] && i<y[0])
{
for (int j=x[1];j>m+1;j--)
{
bor[j-1][i][0]=true;
bor[j-1][i][3]=true;
bor[j-1][i][1]=true;
bor[j-1][i][2]=true;
}
bor[m][i][2]=true;
bor[m][i][3]=true;
m--;
i++;
}
}
else
{
m=x[1];
i=y[1];
while (m<x[2] && i<y[0])
{
for (int j=x[1];j<m-1;j++)
{
bor[j][i][0]=true;
bor[j][i][3]=true;
bor[j][i][1]=true;
bor[j][i][2]=true;
}
bor[m-1][i][0]=true;
bor[m-1][i][3]=true;
m++;
i++;
}
}
}
else
if (x[0] > x[2])
{
m=x[2];
i=y[1];
while (m<x[1] && i<y[0])
{
for (int j=x[1];j>m+1;j--)
{
bor[j-1][i][0]=true;
bor[j-1][i][3]=true;
bor[j-1][i][1]=true;
bor[j-1][i][2]=true;
}
bor[m][i][2]=true;
bor[m][i][1]=true;
m++;
i++;
}
}
else
{
m=x[2];
i=y[1];
while (m>x[1] && i<y[0])
{
for (int j=x[1];j<m-1;j++)
{
bor[j][i][0]=true;
bor[j][i][3]=true;
bor[j][i][1]=true;
bor[j][i][2]=true;
}
bor[m-1][i][0]=true;
bor[m-1][i][1]=true;
i++;
m--;
}
}
}

for(i=0;i<100;i++)
{
for (int j=0;j<100;j++)
{
for (int k=0;k<4;k++)
{
if (bor[i][j][k])
{
f+=1;
}
}
}
}

fout <<f*0.25;
return 0;
}






این سورس برنامه ای که می خاستم فقت خیلی وقت نداشتم مرتب و بهینش کنم :icon_cool
و البته بازه ی اعداد رو از 500 به 50 تقییر دادم.
این هم یک نمونه تست ورودی و خروجی:
4
2 3 3 2 3 3
1 0 2 0 2 1
0 0 2 0 0 2
2 2 2 3 3 23.25
امیدوارم دوستان بتونن استفاده کنن:icon_excl

عرفنا
12 December 2006, 12:55 AM
دوستان این سورس متاسفانه دارای مشکل بود.
من سورس کامل رو آپلود کردم:
[Only registered and activated users can see links]