Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
اين كد منه واسه سوال 117 كه طبق همون انتظاري كه ميرفت time limit شد!!!!!!!!!!
کد
#include <iostream>
#include <conio.h>
using namespace std;
  #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 count=0,r=0,n,m,k;
	 cin>>n>>m>>k;
	 int a[n];
	 for(int i=1;i<=n;i++)
	  {
	    int t;
	    cin>>t;
	    a[r]=t;
	    r++;
	  }
	 for(int j=0;j<n;j++)
	  if(p(a[j],m)%k==0)
	   count++;
	 cout<<count;
	 getch();
	 return 0;   
   }
 
ارسال ها
143
لایک ها
79
امتیاز
0
Olympiad گفت
اين كد منه واسه سوال 117 كه طبق همون انتظاري كه ميرفت time limit شد!!!!!!!!!!
کد
#include <iostream>
#include <conio.h>
using namespace std;
  #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 count=0,r=0,n,m,k;
	 cin>>n>>m>>k;
	 int a[n];
	 for(int i=1;i<=n;i++)
	  {
	    int t;
	    cin>>t;
	    a[r]=t;
	    r++;
	  }
	 for(int j=0;j<n;j++)
	  if(p(a[j],m)%k==0)
	   count++;
	 cout<<count;
	 getch();
	 return 0;   
   }

نه تنها تایم می شه بلکه اگه تایم نشه Wrong می شه (1000^1000 قطعا توی int جا نمی شه!) , یه کم بیشتر فکر کن (راجع به الگوریتمت)
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
من راه حلم اینه:

اول n ها رو به عوامل اول تجزیه می کنیم بعدش اگه تمام عوامل اول k در n بود و توانهاشم هم کمتر مساوی ( m*(توان اون عدد در n) ) بود پس بخش پذیره.

امشب باید برم مهمونی وقت فکر کردن روش رو ندارم اگه راهم درسته خودتون کدشو بزنید.
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
rezashiri گفت
من راه حلم اینه:

اول n ها رو به عوامل اول تجزیه می کنیم بعدش اگه تمام عوامل اول k در n بود و توانهاشم هم کمتر مساوی ( m*(توان اون عدد در n) ) بود پس بخش پذیره.

امشب باید برم مهمونی وقت فکر کردن روش رو ندارم اگه راهم درسته خودتون کدشو بزنید.
كمترمساوي غلطه...چون ممكنه بعد از به توان رسوندن بر اون بخشپذير بشه.....
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
اين كد من واسه سوال 117 ..... اما wrong answer ميشه!!!!!!!!!!
نمدونم اشكالش چيه؟!!؟
اگه بگيد ممنون ميشم....

کد
#include <iostream>
#include <conio.h>
using namespace std;
  unsigned long int po(unsigned long int q,unsigned long int w)
    {
	 unsigned long int ans=1;
	 for(unsigned long int e=1;e<=w;e++)
	  ans*=q;
	 return ans;
    }
  unsigned long int ip(unsigned long int r)
    {
	 unsigned long int flag=1;
	 for(unsigned long int t=2;t<=r/2&&flag==1;t++)
	  if(r%t==0)
	   flag=0;
	 return flag;
    }
 unsigned long int te(unsigned long int y)
    {
	 unsigned long int count=0;
	 if(ip(y))
	  count=1;
	 else
	   {
		for(unsigned long int u=2;u<=y/2;u++)
		 if(y%u==0&&ip(u))
		  count++;
	   }
	 return count;
    }
  unsigned long int sh(unsigned long int i,unsigned long int o)
    {
	 unsigned long int flag=1,p[te(i)],a[te(i)],s=0,d=0;
	 if(i==o)
	  flag=1;
	 else if(ip(i)==1&&ip(o)==1&&i!=o||te(i)!=te(o))
	  flag=0;
	 else
	   {
		if(ip(i))
		 p[s]=i;
		else
		{
		for(unsigned long int f=2;f<=i/2;f++)
		 {
		 if(i%f==0&&ip(f))
		    {
		    p[s]=f;
		    s++;
		    }		  
		 }
		 }
		if(ip(o))
		 a[d]=o;
		else
		{
		for(unsigned long int g=2;g<=o/2;g++)
		 {
		 if(o%g==0&&ip(g))
		  {
		    a[d]=g;
		    d++;
		  }
		 }
		 }
		for(unsigned long int h=0;h<te(i);h++)
		 if(p[h]!=a[h])
		  flag=0;
	   }
	  return flag;
    }
   int main()
	 {
		unsigned long int m,n,k,count1=0;
		 cin>>n>>m>>k;
		 unsigned long int l[n],z=0;
		 for(int x=1;x<=n;x++)
		   {
			    unsigned long int c;
			   cin>>c;
			    l[z]=c;
			    z++;
		   }
		  for(unsigned long int v=0;v<n;v++)
		    if(sh(l[v],k)==1)
			if(po(l[v],m)%k==0)
			 count1++;	    
		  cout<<count1;
		  getch();
		  return 0;
	 }
 
ارسال ها
143
لایک ها
79
امتیاز
0
اگه اشتباه نکنم می یای عدد ها رو به توان می رسونی ولی اعداد به قدری بزرگ می شن که توی long long هم جا نمی شن, برای همین هم Wrong می خوره!

الگوریتم سوال رو rezashiri گفت , باید تجزیه کنی هر عدد رو و ... .

بشین دوباره یه کد تمیز از اول بنویس .
 

rezashiri

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

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
[center:6456672926]


سوال 135 sgu :

سوال رو خلاصه مي نويسم!!!!!!!!
اگر n خط در صفحه رسم شود ، صفحه حداكثر به چند ناحيه تقسيم مي شود؟

ورودي :‌ عدد n

خروجي : حداكثر تعداد نواحي​
[/center:6456672926]
 
ارسال ها
143
لایک ها
79
امتیاز
0
برای سوال 117


در مورد الگوریتم :
عدد k رو تجزیه می کنیم بعد هر عددی که توی ورودی بهمون دادن می یایم توان عوامل k توی اون عدد رو حساب می کنیم و ضرب در m می کنیم , اگر کمتر از توان اون عامل در خود k شد پس قابل قبول نیست اون عدده و می ریم عدد بعدی .

در مورد کد زدن : کدش سخت نیست که! یه کم لطفا راجع به کد ها فکر کنید (اگه می بینید نمی تونید یه کدی رو بزنید شاید الگوریتمتون الکی پیچیدست) , یه کم وقت بگذارید تا قوی تر بشید .


کد
#include <iostream>
using namespace std;
const int MAXN = 10000 + 10;
int a[MAXN]; // a[] is the prime factors of k
int t[MAXN]; // t[] is the power of that prime factor
int point;
int n, m, k;

void tajziye_k() {
	for (int i = 2; i <= k; i++)
		if (k % i == 0)
		{
			a[point] = i;
			while (k % i == 0)
			{
				t[point]++;
				k /= i;
			}
		point++;
		}
}

int main() {
	cin >> n >> m >> k;
	tajziye_k();
	int ans = 0;
	int x;
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		bool yes = true;
		for (int j = 0; j < point; j++)
		{
			int tavan = 0;
			while (x % a[j] == 0)
			{
				tavan++;
				x /= a[j];
			}
			if (tavan * m < t[j])
			{
				yes = false;
				break;
			}
		}
		if (yes)
			ans++;
	}
	cout << ans << endl;
	return 0;
}
اجازه ندید سوال هایی به این خوبی به راحتی براتون بسوزن ! از من گفتن بود :D
 

rezashiri

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


[/center:78af5ea870]کد من:(چقدر زیبا
)

کد
#include <stdio.h>

int main()
{
    unsigned long int tedadn,n;
    
    scanf("%d",&n);
    
    tedadn=((n*n)/2)+((n+1)/2)+1;
    
    printf("%d",tedadn);
    
    return 0;
}
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
البته می شه از رابطه بازگشتی هم استفاده کرد:


[center:5880acf804]
[/center:5880acf804]
 

Olympiad

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

[/center:e73890a516]کد من:(چقدر زیبا
)

کد
#include <stdio.h>

int main()
{
    unsigned long int tedadn,n;
    
    scanf("%d",&n);
    
    tedadn=((n*n)/2)+((n+1)/2)+1;
    
    printf("%d",tedadn);
    
    return 0;
}
كدت مگه چقدر زيباست!!!؟؟

كد من زيباتره!!!


کد
#include <iostream>
using namespace std; 
  int main()
   {
	long long n,k;
	cin>>n;
	k=((n*(n-1))/2)+n+1;
	cout<<k;
	return 0;
   }
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
[center:156607062a]
[/center:156607062a]
لطفا یه نفر سوال 101 رو ترجمه کنه.
 
ارسال ها
143
لایک ها
79
امتیاز
0
n تا دومینو داریم (اعداد روی دومینو ها 0 تا 6 است) که روی هر دومینو دو عدد نوشته شده است , می خواهیم این دومینو ها رو به طور افقی در یک ردیف طوری بچینیم که 2 دومینوی مجاور هم , عددهایشان که کنار هم قرار گرفته اند یکسان باشند , همچنین مجاز به چرخاندن دومینو ها نیز هستید .

اگر این کار شدنی است , شماره دومینو ها رو به ترتیب قرار گرفتن در صف در خروجی چاپ کنید , همچنین اگر دومینو ای را چرخانده اید بعد از چاپ شماره اش علامت - و اگر نچرخانده اید علامت + بنویسید .
در صورت امکان ناپذیر بودن No solution چاپ کنید .
 

Olympiad

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

اين سوال رو نگاه كنيد.....سوال codeforces هست ..... الان داره برگزار ميشه........

براي حل اين سوال بايد چيكار كرد؟؟؟؟؟از چي بايد استفاده كرد؟؟؟؟؟؟؟؟؟؟؟




Phone number in Berland is a sequence of
n
digits. Often, to make it easier to memorize the number, it is divided into groups of two or three digits. For example, the phone number
1198733
is easier to remember as
11-987-33
. Your task is to find for a given phone number any of its divisions into groups of two or three digits.

Input
The first line contains integer
n
(
2 ≤ n ≤ 100
) — amount of digits in the phone number. The second line contains
n
digits — the phone number to divide into groups.

Output
Output any of divisions of the given phone number into groups of two or three digits. Separate groups by single character
-
. If the answer is not unique, output any.

Sample test(s)
Input
6
549871
Output
54-98-71
Input
7
1198733
Output
11-987-33
 

rezashiri

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

اين سوال رو نگاه كنيد.....سوال codeforces هست ..... الان داره برگزار ميشه........

براي حل اين سوال بايد چيكار كرد؟؟؟؟؟از چي بايد استفاده كرد؟؟؟؟؟؟؟؟؟؟؟




Phone number in Berland is a sequence of
n
digits. Often, to make it easier to memorize the number, it is divided into groups of two or three digits. For example, the phone number
1198733
is easier to remember as
11-987-33
. Your task is to find for a given phone number any of its divisions into groups of two or three digits.

Input
The first line contains integer
n
(
2 ≤ n ≤ 100
) — amount of digits in the phone number. The second line contains
n
digits — the phone number to divide into groups.

Output
Output any of divisions of the given phone number into groups of two or three digits. Separate groups by single character
-
. If the answer is not unique, output any.

Sample test(s)
Input
6
549871
Output
54-98-71
Input
7
1198733
Output
11-987-33
ترجمش کنی شاید بتونم روش فکر کنم. سوال iq-test که خیلی آسون بود!
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
آره IQ تست آسون بود acc شد...
اين كد من واسه IQ

کد
#include <stdio.h>
#include <conio.h>
 using namespace std;
  int main()
    {
	 int n;
	 scanf("%d",&n);
	 int a[n],b[n],r=0,count=0;
	 for(int i=1;i<=n;i++)
	   {
		int t;
		scanf("%d",&t);
		a[r]=t;
		r++;
	   }
   for(int i=0;i<n;i++)
	  b[i]=a[i]%2;
   for(int j=0;j<n;j++)
    if(b[j]==0)
	count++;
   if(count>1) 
    {
	 for(int u=0;u<n;u++)
	  if(b[u]==1)
	   printf("%d",u+1);
    }
    else
	{
	  for(int p=0;p<n;p++)
	   if(b[p]==0)
	    printf("%d",p+1);
	}
    return 0;
  }
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
کد من:

کد
#include <stdio.h>
int main()
{
    int n,adad[101];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
		  scanf("%d",&adad[i]);
		  
    for(int i=0;i<n;i++)
    {		 if((adad[0]%2)!=(adad[1]%2) && (adad[1]%2)==(adad[2]%2)) {printf("1"); break;}
			 if((adad[i]%2)!=(adad[i+1]%2)) { printf("%d",i+2);  break;}   
    }			

    return 0;
}
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
من حتما سوال B رو اشتباه متوجه شدم .... چون كدش رو زدم و درست كار مي كنه!!!.....آقاي جلال منش خواهشا سوال B رو ترجمه كنيد!!!!!!
 
بالا