Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- #define mp make_pair
- #define pb push_back
- #define INF 0x3f3f3f3f
- #define LINF 0x3f3f3f3f3f3f3f3fLL
- #define MAXN 101
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- int n;
- double xi[MAXN];
- double pdd[MAXN][MAXN]; //começa em 0 ou 1 e termina em i
- bool memo[MAXN][MAXN];
- double f(int i, int j){
- if(i == j)
- return pdd[i][j] = xi[i];
- if(memo[i][j]) return pdd[i][j];
- memo[i][j] = true;
- return pdd[i][j] = (f(i+1,j) - f(i,j-1))/(j-i);
- }
- vector<double> g(int j)
- {
- deque<vector<double> > polinomio;
- for(int i = 0; i < j; i++) {
- vector<double> a;
- a.pb(-xi[i]);
- a.pb(1);
- polinomio.pb(a);
- }
- while(polinomio.size() > 1){
- vector<double> a(polinomio[0].size()+1,0);
- for(int i = 0; i < polinomio[0].size(); i++){
- for(int j = 0; j < polinomio[1].size(); j++){
- a[i+j] += polinomio[0][i] * polinomio[1][j];
- }
- }
- polinomio.pop_front();
- polinomio.pop_front();
- polinomio.push_front(a);
- }
- return polinomio[0];
- }
- void printPoli(vector<double> g)
- {
- for(int i = g.size()-1; i >= 0; i--)
- {
- if(i!=0)
- printf("%c %gx^%d ",g[i]>=0?'+':'-', fabs(g[i]), i);
- else
- printf("%c %g",g[i]>=0?'+':'-', fabs(g[i]));
- }
- return;
- }
- int main(){
- scanf("%d",&n);
- for(int i = 0; i < n; i++)
- scanf("%lf",&xi[i]);
- printPoli(g(n));
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement