Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- ifstream f("discuri.in");
- ofstream g("discuri.out");
- int n,i,j;
- long double r[10001], poz[10001];
- long double maxim, paux, distmax;
- int pmax;
- bool t;
- int nrez, rez[10001];
- bool u[10001];
- int main()
- {
- f>>n;
- f>>r[1];
- poz[1]=r[1];
- for (i=2;i<=n;i++)
- {
- f>>r[i];
- if (r[i]<r[i-1])
- poz[i]=poz[i-1]+2*sqrt(r[i]*r[i-1]);
- else if (r[i]==r[i-1])
- poz[i]=poz[i-1]+2*r[i];
- else
- {
- maxim=pmax=paux=0;
- t=0;
- for (j=i-1;j>=1 && t==0;j--)
- if (r[j]>maxim)
- {
- maxim=r[j];
- pmax=j;
- paux=poz[j]+2*sqrt(r[i]*r[j]);
- t=1;
- }
- for (j=pmax-1;j>=1;j--)
- if (r[j]>maxim)
- {
- maxim=r[j];
- if (sqrt((poz[j]-paux)*(poz[j]-paux) + (r[j]-r[i])*(r[j]-r[i])) < r[i]+r[j])
- {
- paux=poz[j]+2*sqrt(r[i]*r[j]);
- pmax=j;
- }
- }
- if (paux<r[i])
- {
- paux=r[i];
- pmax=0;
- }
- for (j=pmax+1;j<i;j++)
- if (!u[j])
- {
- nrez++;
- rez[nrez]=j;
- u[j]=1;
- }
- poz[i]=paux;
- }
- distmax=max(distmax,poz[i]+r[i]);
- }
- for (i=n;i>=1 && poz[i]+r[i]<distmax;i--)
- if (!u[i])
- {
- nrez++;
- rez[nrez]=i;
- u[i]=1;
- }
- sort(rez+1,rez+nrez+1);
- g<<nrez<<"\n";
- for (i=1;i<=nrez;i++)
- g<<rez[i]<<"\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement