Spiral Tap
5 مشترك
صفحة 1 من اصل 1
رد: Spiral Tap
ممكن اعرف فكرة الحل تبع هي المسألة ؟؟؟؟ !!!!!!!
ahmad-gafer- الجنس :
عدد المساهمات : 18
السٌّمعَة : 0
تاريخ التسجيل : 19/02/2014
عم ينفذ كلشي صح بس عطاني time limit exceeded بدو تغيير جذري ؟؟
#include
using namespace std;
int main(){
int num;
int l,b,i,j,n;
struct found{
int x,y;};
found fond;
while(cin>>n>>num&&num&&n){
int k=n*n+1;
int m=n;
l=1; b=1;
fond.x=0;
fond.y=0;
if(num==1){
fond.x=(m+1)/2;
fond.y=(m+1)/2;
cout<<"Line = "<
else if(num==k-1){
fond.x=m;
fond.y=m;
cout<<"Line = "<
else{
l=1; b=1;
int k=m*m+1;
n=m;
while(l j=n;
for(int i=n;i>=l;i--){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
n--; i=l;
for(int j=n;j>=b;j--){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
l++; n++; j=b;
for(int i=l;i<=n;i++){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
i=n;
n--;
b++;
for(int j=b;j<=n;j++){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
}
cout<<"Line = "< }
return 0;}
using namespace std;
int main(){
int num;
int l,b,i,j,n;
struct found{
int x,y;};
found fond;
while(cin>>n>>num&&num&&n){
int k=n*n+1;
int m=n;
l=1; b=1;
fond.x=0;
fond.y=0;
if(num==1){
fond.x=(m+1)/2;
fond.y=(m+1)/2;
cout<<"Line = "<
else if(num==k-1){
fond.x=m;
fond.y=m;
cout<<"Line = "<
else{
l=1; b=1;
int k=m*m+1;
n=m;
while(l
for(int i=n;i>=l;i--){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
n--; i=l;
for(int j=n;j>=b;j--){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
l++; n++; j=b;
for(int i=l;i<=n;i++){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
i=n;
n--;
b++;
for(int j=b;j<=n;j++){
k--;
if (k==num){
fond.x=i;
fond.y=j;
break;}}
}
cout<<"Line = "<
return 0;}
اسراء ابراهيم- الجنس :
عدد المساهمات : 2
السٌّمعَة : 0
تاريخ التسجيل : 20/02/2014
رد: Spiral Tap
لو سمحتي إسراء لما تحطي كودك على المنتدى في شغلة وقت تكتبي الرد اسمها "إدراج أكواد برمجية" .. بيطلع الكود منسق و واضح ، عدا عن إني لما نسخت كودك طلع فيه شغلات نافصة ..
بس من يلي فهمته من يلي كاتبتيه إنك عم تعملي "محاكاة" ، يعني إنك عم توقفي بخانة و عم تضلي تمشي لحتى توصلي للخانة المطلوبة ، هي الطريقة بطيئة كتير لأنو عدد الخانات يلي رح تضطري تمشي عليها ممكن يكون كتير كبير .. ملاحظة ممكن تساعدك بتسريع خوارزميتك :
فيكي تعرفي انتي بأي "حلقة" (أو مستوى ، ما بعرف شو بدي سميها ) بالشبكة لازم تبحثي ..
قصدي إنو لاحظي الأعداد من 2 إلى 9 ، هدول بشكلو حلقة ، و الأعداد من 10 إلى 25 بيشكلو حلقة ... و هكذا ..
إذا عرفتي انتي بأي حلقة لازم تبحثي رح تختصري على حالك كتير شغل ..
الملاحظة التانية هو إنو الأعداد يلي بتشكل حلقة مانها عشوائية ، إلها نمط محدد ...
الحلقات بتنتهي بالأعداد التالية : (1) ، 9 ، 25 ، 49 ، 81 ....
و بتبدأ بالأعداد : 1+1 ، 9+1 ، 25+1 ، 49+1 ، 81+1 ....
بتمنى تكون الفكرة وصلتك
بس من يلي فهمته من يلي كاتبتيه إنك عم تعملي "محاكاة" ، يعني إنك عم توقفي بخانة و عم تضلي تمشي لحتى توصلي للخانة المطلوبة ، هي الطريقة بطيئة كتير لأنو عدد الخانات يلي رح تضطري تمشي عليها ممكن يكون كتير كبير .. ملاحظة ممكن تساعدك بتسريع خوارزميتك :
فيكي تعرفي انتي بأي "حلقة" (أو مستوى ، ما بعرف شو بدي سميها ) بالشبكة لازم تبحثي ..
قصدي إنو لاحظي الأعداد من 2 إلى 9 ، هدول بشكلو حلقة ، و الأعداد من 10 إلى 25 بيشكلو حلقة ... و هكذا ..
إذا عرفتي انتي بأي حلقة لازم تبحثي رح تختصري على حالك كتير شغل ..
الملاحظة التانية هو إنو الأعداد يلي بتشكل حلقة مانها عشوائية ، إلها نمط محدد ...
الحلقات بتنتهي بالأعداد التالية : (1) ، 9 ، 25 ، 49 ، 81 ....
و بتبدأ بالأعداد : 1+1 ، 9+1 ، 25+1 ، 49+1 ، 81+1 ....
بتمنى تكون الفكرة وصلتك
قصي العثمان- الجنس :
عدد المساهمات : 2
السٌّمعَة : 0
تاريخ التسجيل : 19/02/2014
رد: Spiral Tap
اي صحيح ما كنت منتبهة عالنقص (في بتعليمات الطباعة) ما كنت منتبهة وبعتذر مشان عدم التنسيق انو كمان ما كنت منتبهة على خيار إدراج الكود ...
شكرا كتييييير وصلت الفكرة و يتم التعديل
شكرا كتييييير وصلت الفكرة و يتم التعديل
اسراء ابراهيم- الجنس :
عدد المساهمات : 2
السٌّمعَة : 0
تاريخ التسجيل : 20/02/2014
رد: Spiral Tap
أنا عملت البرنامج وطلعلي time limit exceed
- الكود:
#include<iostream>
#include<vector>
using namespace::std;
int main()
{
int sz,pp;
cin>>sz>>pp;
while(sz!=0 && pp!=0){int pos1,pos2;
int x=sz*sz;
int xx=sz;int xxx=sz;
vector<vector<int> > a(100000);
for(int ii=0;ii<100000;ii++)
a[ii].resize(100000);
int p=0,f=1;
int u=(sz+1)/2;
int mm=sz-u;
a[u][u]=1;
if(pp==1)
{ pos1=u;
pos2=u;
}
u--;
xxx=x-u*8;
while(pp<xxx)
{u--;
x=xxx;
mm--;
sz--;
p++;
f++;
xxx=xxx-u*8;}
for(int nn=0;nn<mm;nn++){if(pos1>0 && pos2>0)break;
for(int i=sz;i>p;i--)
{a[i][sz]=x;
if(pp==a[i][sz])
{pos1=i;
pos2=sz;
}
x--;}
if(pos1>0 && pos2>0)break;
for(int j=sz-1;j>p;j--)
{a[f][j]=x;
if(pp==a[f][j])
{pos1=f;
pos2=j;
}
x--;
}
if(pos1>0 && pos2>0)break;
for(int k=f+1;k<=sz;k++)
{a[k][f]=x;
if(pp==a[k][f])
{pos1=k;
pos2=f;
}
x--;}
if(pos1>0 && pos2>0)break;
for(int l=f+1;l<sz;l++)
{a[sz][l]=x;
if(pp==a[sz][l])
{pos1=sz;
pos2=l;
}
x--;
}
sz--;
p++;
f++;}
cout<<"Line = "<<pos1<<", column ="<<pos2<<"."<<endl;
cin>>sz>>pp;
pos1=0;
pos2=0;
}}
علا- الجنس :
عدد المساهمات : 19
السٌّمعَة : 1
تاريخ التسجيل : 19/02/2014
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى