https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1725
খুবই সহজ একটা সমস্যা , যদি তুমি বিষয়টি ধরতে পারো - তাহলে । চলো , তাহলে শুরু করি --------
আমরা একটা জিনিস জানি -- সেটা হলো , যদি N বাহু বিশিষ্ট কোনো ক্ষেত্র থাকে , তাহলে , সেখানে
কর্ণ থাকবে N*( N - 3 ) / 2 টি ।। বিশ্বাস না হলে , চলো - চতুর্ভুজ দিয়ে চেক করে দেখি - চতুর্ভুজ এর বাহু মোট 4 টি , সুত্র অনুযায়ী কর্ণ হবে - 4*( 4 - 3 ) / 2 = 2 টি ।। আশা করি , সুত্র নিয়ে কিছুটা স্বস্তি অনুভব হচ্ছে , তাই না ??
এবার আসি , আসল কথায় --- তোমাকে ঠিক উলটো কাজ'টি করতে হবে । তোমায় , একটা ভুজের কর্ণ এর সংখ্যাই দেয়া থাকবে , তোমায় বের করতে হবে , সেই ভুজের কমপক্ষে বাহু কয়টা আছে ?? এর মানে -- N এর মান বের করতে হবে। তাহলে , ধরে নিলাম - দেয়া কর্ণ এর সংখ্যা C টি । তাহলে , আমরা কি - কোনো সমীকরণে দাড় করাতে পারি - বিষয়টি ?? চলো , দেখা যাক ----
( N*( N - 3 )) / 2 = C
=> ( N * ( N - 3 ) ) = 2*C
=> N^2 - 3*N = 2*C
=> N^2 - 3*N - 2*C =0
এখন দেখো তো , উপরের সমীকরণ'টি Ax^2 + Bx + C =0 এর মতো লাগছে না ?? হুম , আশা করি বুঝতে পেরেছো যে - কি করতে যাচ্ছি ??? তো চলো , এখন আমরা সুত্র অনুযায়ী এর সমাধান বের করি ।
আমরা জানি , ( -B + ( sqrt ( B^2 - 4*A*C ) ) /2*A হলো , Ax^2 + Bx + C =0 সমীকরণের সমাধান । শুধু মাত্র , ধনাত্বক নিলাম , কারণ - বাহু কখনো ঋণাত্বক হয় না ।। যাই হোক , আমরা সুত্র অনুযায়ী ,
N^2 - 3*N - 2*C =0 সমীকরণের সমাধান করে - ফেলতে হবে , তাহলেই আমরা
চলক N এর মান পেয়ে যাবো , অর্থাৎ আমাদের কাংক্ষিত উত্তরখানা পেয়ে যাবো ।।
তাহলে , এর মান হবে " 3 + sqrt(9+8*n))/2 " [ সুত্র অনুযায়ী ,( -B + ( sqrt ( B^2 - 4*A*C ) ) /2*A তে N^2 - 3*N - 2*C সমীকরণের সহগগুলো বসিয়ে পাওয়া ] ।।
তো চলো , এবার কোড দেখে ফেলি -----------------------------
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i;
double n,p;
for(i=1;scanf("%lf",&n) && n;i++){
p = ceil((3+sqrt(9+8*n))/2);
printf("Case %d: %.0lf\n",i,p);
}
return 0;
}
খুবই সহজ একটা সমস্যা , যদি তুমি বিষয়টি ধরতে পারো - তাহলে । চলো , তাহলে শুরু করি --------
আমরা একটা জিনিস জানি -- সেটা হলো , যদি N বাহু বিশিষ্ট কোনো ক্ষেত্র থাকে , তাহলে , সেখানে
কর্ণ থাকবে N*( N - 3 ) / 2 টি ।। বিশ্বাস না হলে , চলো - চতুর্ভুজ দিয়ে চেক করে দেখি - চতুর্ভুজ এর বাহু মোট 4 টি , সুত্র অনুযায়ী কর্ণ হবে - 4*( 4 - 3 ) / 2 = 2 টি ।। আশা করি , সুত্র নিয়ে কিছুটা স্বস্তি অনুভব হচ্ছে , তাই না ??
এবার আসি , আসল কথায় --- তোমাকে ঠিক উলটো কাজ'টি করতে হবে । তোমায় , একটা ভুজের কর্ণ এর সংখ্যাই দেয়া থাকবে , তোমায় বের করতে হবে , সেই ভুজের কমপক্ষে বাহু কয়টা আছে ?? এর মানে -- N এর মান বের করতে হবে। তাহলে , ধরে নিলাম - দেয়া কর্ণ এর সংখ্যা C টি । তাহলে , আমরা কি - কোনো সমীকরণে দাড় করাতে পারি - বিষয়টি ?? চলো , দেখা যাক ----
( N*( N - 3 )) / 2 = C
=> ( N * ( N - 3 ) ) = 2*C
=> N^2 - 3*N = 2*C
=> N^2 - 3*N - 2*C =0
এখন দেখো তো , উপরের সমীকরণ'টি Ax^2 + Bx + C =0 এর মতো লাগছে না ?? হুম , আশা করি বুঝতে পেরেছো যে - কি করতে যাচ্ছি ??? তো চলো , এখন আমরা সুত্র অনুযায়ী এর সমাধান বের করি ।
আমরা জানি , ( -B + ( sqrt ( B^2 - 4*A*C ) ) /2*A হলো , Ax^2 + Bx + C =0 সমীকরণের সমাধান । শুধু মাত্র , ধনাত্বক নিলাম , কারণ - বাহু কখনো ঋণাত্বক হয় না ।। যাই হোক , আমরা সুত্র অনুযায়ী ,
N^2 - 3*N - 2*C =0 সমীকরণের সমাধান করে - ফেলতে হবে , তাহলেই আমরা
চলক N এর মান পেয়ে যাবো , অর্থাৎ আমাদের কাংক্ষিত উত্তরখানা পেয়ে যাবো ।।
তাহলে , এর মান হবে " 3 + sqrt(9+8*n))/2 " [ সুত্র অনুযায়ী ,( -B + ( sqrt ( B^2 - 4*A*C ) ) /2*A তে N^2 - 3*N - 2*C সমীকরণের সহগগুলো বসিয়ে পাওয়া ] ।।
তো চলো , এবার কোড দেখে ফেলি -----------------------------
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i;
double n,p;
for(i=1;scanf("%lf",&n) && n;i++){
p = ceil((3+sqrt(9+8*n))/2);
printf("Case %d: %.0lf\n",i,p);
}
return 0;
}