Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
navidjalalmanesh گفت
ببینید این سوالی که گفتی بار تئوری ریاضوی داره (البته من ب رو با عدد مختلط هم بلدم بزنم که همش کد نویسی یه) , البته سوال خوبی هستش ولی زیاد ربطی به الگوریتم های که تو المپیاد کامپیوتر خیلی باهاش سرکار دارید نداره (الگوریتم های گراف , داینامیک و ...)

خوبه سوال های SGU و USACO رو اینجا مطرح کنید و با بقیه دوستان همه با هم پیش بریم .

البته من نمی خوام تو ماراتن دخالت کنم (این فقط یه پیشنهاد بود) .
اين الگوريتم رو خوب اومديد....من هر وقت اومدم تو sgu كد بزنم time limit ميشدم

شما يه سوال بذاريد ......
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:6d4ea6eb7f]

کد های من :

الف)

کد
#include <stdio.h>
#include <conio.h>

int main()
{
    float a,b,c,q,p,h,x,y,m,n,s;
    
    printf("to solve \nax+by=c\nqx+py=h\nplease input meghdar haye zir.\n");
    
    printf("\nplease input a:\t");
    scanf("%f",&a);

    
    printf("\nplease input b:\t");
    scanf("%f",&b);
    
    
    printf("\nplease input c:\t");
    scanf("%f",&c);
    
    
    printf("\nplease input q:\t");
    scanf("%f",&q);
    
    
    printf("\nplease input p:\t");
    scanf("%f",&p);
    
    
    printf("\nplease input h:\t");
    scanf("%f",&h);				
    
//end of resives

   n=a;
   a=a*q*-1;
   b=b*q*-1;
   c=c*q*-1;	
   q=q*n; 
   p=p*n; 
   h=h*n;  
   y=(c+h)/(b+p); 
   x=((y*b*-1)+(c))/a; 
   printf("\nx=%f\ty=%f",x,y);
   
   
	  
 
    getch();
}


ب)

کد
#include <stdio.h>
#include <conio.h>

int main()
{
    float A1i,A1j,A2i,A2j,B1i,B1j,B2i,B2j,m1,m2,b1,b2,a,b,c,q,p,h,x,y,m,n,s;
    
    printf("please input x y for A1(x,y):\t");
    scanf("%f%f",&A1i,&A1j);

    printf("please input x y for A2(x,y):\t");
    scanf("%f%f",&A2i,&A2j);
    
    printf("please input x y for B1(x,y):\t");
    scanf("%f%f",&B1i,&B1j);
    
    printf("please input x y for B2(x,y):\t");
    scanf("%f%f",&B2i,&B2j);		  
    
    
    m1=(A1j-A2j)/(A1i-A2i);
    m2=(B1j-B2j)/(B1i-B2i);
    
    if(m1==m2) printf("Not");
    
    b1=A1j-(m1*A1i);
    b2=B1j-(m2*B1i);
    
    c=b1;
    h=b2;;
    b=-1*m1;
    p=-1*m2;
    q=1;
    a=1;
    
   n=a;
   a=a*q*-1;
   b=b*q*-1;
   c=c*q*-1;	
   q=q*n; 
   p=p*n; 
   h=h*n;  
   y=(c+h)/(b+p); 
   x=((y*b*-1)+(c))/a; 
   printf("\nx=%f\ty=%f",y,x);
   
   
	  
 
    getch();
}
[/center:6d4ea6eb7f]
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
navidjalalmanesh گفت
ببینید این سوالی که گفتی بار تئوری ریاضوی داره (البته من ب رو با عدد مختلط هم بلدم بزنم که همش کد نویسی یه) , البته سوال خوبی هستش ولی زیاد ربطی به الگوریتم های که تو المپیاد کامپیوتر خیلی باهاش سرکار دارید نداره (الگوریتم های گراف , داینامیک و ...)

خوبه سوال های SGU و USACO رو اینجا مطرح کنید و با بقیه دوستان همه با هم پیش بریم .

البته من نمی خوام تو ماراتن دخالت کنم (این فقط یه پیشنهاد بود) .

من با حل سوالات sgu مشکل ندارم فقط برای ترجمش مشکل دارم اگه یکی ترجمه کنه خیلی دوست دارم روی سوالاتش فکر کنم.
 
ارسال ها
143
لایک ها
79
امتیاز
0
rezashiri گفت
من با حل سوالات sgu مشکل ندارم فقط برای ترجمش مشکل دارم اگه یکی ترجمه کنه خیلی دوست دارم روی سوالاتش فکر کنم.
به نظر من برید تو SGU , سوال هایی که تعداد AC شده هاش بیش از 1000 یا 1500 نفر بود رو انتخاب و حل کنید (ترجمه اش هم همه با هم کمک می کنیم , نگران ترجمه نباشید)
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:eb773a7ba6]


یه نفر لطف کنه سوال 127 رو ترجمه کنه.​
[/center:eb773a7ba6]
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:ff211dd609]
[/center:ff211dd609]
این کد مشکلش چیه :wrong answer on test 9 <==

کد
#include <stdio.h>
#include <conio.h>

int main()
{
    int p=2,ad[7999],a,k,n,t,k1=0,k2=0,k3=0,k4=0,k5=0,k6=0,k7=0,k9=0;
    
    scanf("%d",&k);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
		  scanf("%d",&ad[i]);
    }
    
    for(int i=0;i<n;i++)
    {
		  if(ad[i]/1000==1) k1++;
		  if(ad[i]/1000==2) k2++; 
		  if(ad[i]/1000==3) k3++;
		  if(ad[i]/1000==4) k4++;
		  if(ad[i]/1000==5) k5++;
		  if(ad[i]/1000==6) k6++;
		  if(ad[i]/1000==7) k7++;
		  if(ad[i]/1000==9) k9++;
		  
    }
    
    if(k1>0) p++;
    if(k2>0) p++;
    if(k3>0) p++;
    if(k4>0) p++;
    if(k5>0) p++;
    if(k6>0) p++;
    if(k7>0) p++;
    if(k9>0) p++;
    
    for(int x=1;x<100;x++){
    if(k1>x*k) p++;
    if(k2>x*k) p++;
    if(k3>x*k) p++;
    if(k4>x*k) p++;
    if(k5>x*k) p++;
    if(k6>x*k) p++;
    if(k7>x*k) p++;
    if(k9>x*k) p++;}
    
    
    
    
    printf("%d",p);
    
    getch();
    return 0;
}
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:330551f4a1]
[/center:330551f4a1]


بالاخره accept شدم


کد نهایی:

کد
#include <stdio.h>
#include <conio.h>

int main()
{
    int p=2,ad[7999],a,k,n,t,k1=0,k2=0,k3=0,k4=0,k5=0,k6=0,k7=0,k9=0;
    
    scanf("%d",&k);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
		  scanf("%d",&ad[I]);
    }
    
    for(int i=0;i<n;i++)
    {
		  if(ad[I]/1000==1) k1++;
		  if(ad[I]/1000==2) k2++; 
		  if(ad[I]/1000==3) k3++;
		  if(ad[I]/1000==4) k4++;
		  if(ad[I]/1000==5) k5++;
		  if(ad[I]/1000==6) k6++;
		  if(ad[I]/1000==7) k7++;
		  if(ad[I]/1000==9) k9++;
		  
    }
    
    if(k1>0) p++;
    if(k2>0) p++;
    if(k3>0) p++;
    if(k4>0) p++;
    if(k5>0) p++;
    if(k6>0) p++;
    if(k7>0) p++;
    if(k9>0) p++;
    
    for(int x=1;x<10000;x++){
    if(k1>x*k) p++;
    if(k2>x*k) p++;
    if(k3>x*k) p++;
    if(k4>x*k) p++;
    if(k5>x*k) p++;
    if(k6>x*k) p++;
    if(k7>x*k) p++;
    if(k9>x*k) p++;}
    
    
    
    
    printf("%d",p);
    
    getch();
    return 0;
}
[/I][/I][/I][/I][/I][/I][/I][/I][/I]
 
ارسال ها
143
لایک ها
79
امتیاز
0
خوب بود , ولی می تونستی خیلی ساده تر Accept کنی .

کد
#include <iostream>
using namespace std;
int x[8001], tedad[10];

int main() {
	int k, n, ans=2;
	cin >> k >> n;
	for( int i = 0; i < n; i++)
		cin >> x[I];
	for(int i = 0;i < n; i++)
			tedad[(x[I]/1000)]++;
	for(int i=1;i<=9;i++)
	{
		if(tedad[I]%k==0)
			ans += tedad[I]/k;
		else ans += tedad[I]/k+1;
	}
	cout<< ans <<endl;
	return 0;
}
[/I][/I][/I][/I][/I]
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
navidjalalmanesh گفت
خوب بود , ولی می تونستی خیلی ساده تر Accept کنی .

کد
#include <iostream>
using namespace std;
int x[8001], tedad[10];

int main() {
	int k, n, ans=2;
	cin >> k >> n;
	for( int i = 0; i < n; i++)
		cin >> x[I];
	for(int i = 0;i < n; i++)
			tedad[(x[I]/1000)]++;
	for(int i=1;i<=9;i++)
	{
		if(tedad[I]%k==0)
			ans += tedad[I]/k;
		else ans += tedad[I]/k+1;
	}
	cout<< ans <<endl;
	return 0;
}
[/I][/I][/I][/I][/I]
درسته میشد با آرایه ها بهتر نوشتش .
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
اين كد منه ولي time limit شدم!!!!!!!!!! هميشه time limit ميشم


البته كدم يكم مسخره هست ، خودم ميدونم نمي خواد بگيد!!!


کد
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
  int main()
    {
	  int k,n,p=0,h=0;
	  scanf("%d",&k);
	  scanf("%d",&n);
	  int a[4*n],r=0;;
	  for(int i=1;i<=n;i++)
	    {
		  int t;
		  scanf("%d",&t);
		  a[r]=(t/1000)%10;
		  a[r+1]=(t/100)%10;
		  a[r+2]=(t/10)%10;
		  a[r+3]=t%10;
		  r+=4;
		  }
	 int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0,count7=0,count9=0;
	 for(int i=0;i<4*n;i+=4)
	   {
		  if(a[i]==1) count1++;
		  if(a[i]==2) count2++;
		  if(a[i]==3) count3++;
		  if(a[i]==4) count4++;
		  if(a[i]==5) count5++;
		  if(a[i]==6) count6++;
		  if(a[i]==7) count7++;
		  if(a[i]==9) count9++;
		 
	}	 
    
    if(count1>0) p++;
    if(count2>0) p++;
    if(count3>0) p++;
    if(count4>0) p++;
    if(count5>0) p++;
    if(count6>0) p++;
    if(count7>0) p++;
    if(count9>0) p++;	  
    

	   while(count1>k)
		{
		 h++;
		 count1/=k;
		}
	  while(count2>k)
		{
		 h++;
		 count2/=k;
		}
	  while(count3>k)
		{
		 h++;
		 count3/=k;
		}
		while(count4>k)
		{
		 h++;
		 count4/=k;
		}
		 while(count5>k)
		{
		 h++;
		 count5/=k;
		}
		 while(count6>k)
		{
		 h++;
		 count6/=k;
		}
		 while(count7>k)
		{
		h++;
		 count7/=k;
		}
		 while(count9>k)
		{
		 h++;
		 count9/=k;
		}
	   
	   p+=h;
	 printf("%d",p+2);
	 getch();
	 return 0;
  }
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:2dbe75fef1]


بی زحمت یه نفر سوال 117 رو ترجمه کنه.​
[/center:2dbe75fef1]
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
rezashiri گفت
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
پس بايد چيكار كنم.....الان long long هم امتحان كردم time limit شدم !!
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Olympiad گفت
rezashiri گفت
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
پس بايد چيكار كنم.....الان long long هم امتحان كردم time limit شدم !!
بی خودی که 1000 نفر این سوال رو حل نکردم که !

خودمم نمی دونم.
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
rezashiri گفت
[center:7c61cf48a0]


بی زحمت یه نفر سوال 117 رو ترجمه کنه.​
[/center:7c61cf48a0]
اگه اشتباه ترجمه نكرده باشم...اين ميشه!!!

تعداد اعدادي از دنباله ي وارد شده را بيابيد كه توان M ام آن ها بر k بخشپذير باشد.

input :
اعداد N,M,K به ترتيب در سطر اول وارد ميشوند ... (N تعداد اعدادي است كه بايد وارد شوند)
در سطر بعدي N عدد وارد ميشوند
output :
تعداد اعدادي كه توان M ام آن ها بر K بخشپذير است...
 
ارسال ها
143
لایک ها
79
امتیاز
0
rezashiri گفت
Olympiad گفت
rezashiri گفت
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
پس بايد چيكار كنم.....الان long long هم امتحان كردم time limit شدم !!
بی خودی که 1000 نفر این سوال رو حل نکردم که !

خودمم نمی دونم.

برای این سوال باید Bignum بنویسید (عددهای بسیار بزرگ رو توی رشته می ریزید به جای اینکه توی long long , ... بریزید بعدش براشون توابع جمع و تفریق و ضرب می نویسید) که فعلا براتون سخته .

این همه سوال آسون , من خودم 111 رو Accept نکردم :D
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
navidjalalmanesh گفت
rezashiri گفت
Olympiad گفت
rezashiri گفت
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
پس بايد چيكار كنم.....الان long long هم امتحان كردم time limit شدم !!
بی خودی که 1000 نفر این سوال رو حل نکردم که !

خودمم نمی دونم.

برای این سوال باید Bignum بنویسید (عددهای بسیار بزرگ رو توی رشته می ریزید به جای اینکه توی long long , ... بریزید بعدش براشون توابع جمع و تفریق و ضرب می نویسید) که فعلا براتون سخته .

این همه سوال آسون , من خودم 111 رو Accept نکردم :D
من هنوز كد 117 رو ننوشتم...با اين حساب پس 117 رو هم بايد از Bignum استفاده كرد ، نه؟؟؟؟؟؟؟؟؟؟؟؟
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Olympiad گفت
navidjalalmanesh گفت
rezashiri گفت
Olympiad گفت
rezashiri گفت
Olympiad گفت
اين كد براي سوال 111 sgu چه مشكلي داره!؟!!!!!!!؟؟؟؟؟؟؟؟؟

presentation error ميده!!!!!!

کد
#include <stdio.h>
  int p(int a,int b)
    {
	 int ans=1;
	 for(int j=1;j<=b;j++)
	  ans*=a;
	 return ans;
    }
  int main()
    {
	   int flag=1,i=0,n,k;
	   scanf("%d",&n);
	   while(n>=p(i,2))
		  i++;    
	   k=i-1;	  
	   printf("%d",k);    
	  return 0;
    }
چه طوری می خوای 1000^10 رو تو int جا بدی؟!؟!
پس بايد چيكار كنم.....الان long long هم امتحان كردم time limit شدم !!
بی خودی که 1000 نفر این سوال رو حل نکردم که !

خودمم نمی دونم.

برای این سوال باید Bignum بنویسید (عددهای بسیار بزرگ رو توی رشته می ریزید به جای اینکه توی long long , ... بریزید بعدش براشون توابع جمع و تفریق و ضرب می نویسید) که فعلا براتون سخته .

این همه سوال آسون , من خودم 111 رو Accept نکردم :D
من هنوز كد 117 رو ننوشتم...با اين حساب پس 117 رو هم بايد از Bignum استفاده كرد ، نه؟؟؟؟؟؟؟؟؟؟؟؟
من یه راه حلی برای سوال 117 پیدا کردم ولی هنوز نتونستم کامل بنویسمش!
 
بالا