Advertisement
Gornak40

Gordey

Jan 26th, 2021
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include<set>
  4. #include<map>
  5. #include<vector>
  6. using namespace std;
  7.  
  8. #define ll long long
  9. #pragma GCC optimize("Ofast")
  10. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
  11.  
  12. int p_x0,p_x1,p_x2;
  13. int a,b,c,d;
  14.  
  15. inline int f(int x1,int x2,int x3){
  16.     return ((ll)a*(ll)x3+(ll)b*(ll)x2+(ll)c*(ll)x1)%d;
  17. }
  18.  
  19. inline void floyd(){
  20.     int l_x0=p_x0,l_x1=p_x1,l_x2=p_x2,k;
  21.  
  22.     for(int i=0;i<d;i++){
  23.         k=l_x2;
  24.         l_x2=f(l_x0,l_x1,l_x2);
  25.         l_x0=l_x1;l_x1=k;
  26.     }
  27.  
  28.     int r_x0=l_x1,r_x1=l_x2,r_x2=f(l_x0,l_x1,l_x2);
  29.     int cnt=0;
  30.     while(r_x0!=l_x0||r_x1!=l_x1||r_x2!=l_x2){
  31.         k=r_x2;
  32.         r_x2=f(r_x0,r_x1,r_x2);
  33.         r_x0=r_x1;r_x1=k;
  34.         cnt++;
  35.     }
  36.  
  37.     int N=cnt+1;
  38.     l_x0=p_x0;l_x1=p_x1;l_x2=p_x2;
  39.     r_x0=p_x0;r_x1=p_x1;r_x2=p_x2;
  40. //    l_x0=p_x1;l_x1=p_x2;l_x2=f(p_x0,p_x1,p_x2);
  41. //    r_x0=p_x1;r_x1=p_x2;r_x2=f(p_x0,p_x1,p_x2);
  42.     for(int i=0;i<N;i++){
  43.         k=r_x2;
  44.         r_x2=f(r_x0,r_x1,r_x2);
  45.         r_x0=r_x1;r_x1=k;
  46.     }
  47.  
  48.     cnt=0;
  49.     while(r_x0!=l_x0||r_x1!=l_x1||r_x2!=l_x2){
  50.         k=l_x2;
  51.         l_x2=f(l_x0,l_x1,l_x2);
  52.         l_x0=l_x1;l_x1=k;
  53.         k=r_x2;
  54.         r_x2=f(r_x0,r_x1,r_x2);
  55.         r_x0=r_x1;r_x1=k;
  56.         cnt++;
  57.     }
  58.     int P=cnt;
  59.     vector<int> cnt2(20,0);
  60.     for(int j=0;j<20;j++){
  61.         if(j*d<=20*p_x0&&20*p_x0<(j+1)*d){
  62.             cnt2[j]++;
  63.             break;
  64.         }
  65.     }
  66.     for(int j=0;j<20;j++){
  67.         if(j*d<=20*p_x1&&20*p_x1<(j+1)*d){
  68.             cnt2[j]++;
  69.             break;
  70.         }
  71.     }
  72.     for(int j=0;j<20;j++){
  73.         if(j*d<=20*p_x2&&20*p_x2<(j+1)*d){
  74.             cnt2[j]++;
  75.             break;
  76.         }
  77.     }
  78.     r_x2=f(p_x0,p_x1,p_x2),r_x1=p_x1,r_x0=p_x1;
  79.     for(int i=0;i<398;i++){
  80.         for(int j=0;j<20;j++){
  81.             if(j*d<=20*r_x1&&20*r_x1<(j+1)*d){
  82.                 cnt2[j]++;
  83.                 break;
  84.             }
  85.         }
  86.         k=r_x2;
  87.         r_x2=f(r_x0,r_x1,r_x2);
  88.         r_x0=r_x1;r_x1=k;
  89.     }
  90.  
  91.     int sm=0;
  92.     for(int i=0;i<cnt2.size();i++){
  93.         sm+=(cnt2[i]-20)*(cnt2[i]-20);
  94.     }
  95.     double Q=sm/400.0;
  96.     cout.precision(2);
  97.     cout<<fixed;
  98.     cout<<N<<" "<<P<<" "<<Q;
  99. }
  100.  
  101.  
  102. signed main() {
  103.     ios::ios_base::sync_with_stdio(false);
  104.     cin.tie(0);
  105.     cout.tie(0);
  106.  
  107.     int x0,x1,x2;
  108.     cin>>a>>b>>c>>d>>p_x0>>p_x1>>p_x2;
  109.  
  110.     floyd();
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement