zoukankan      html  css  js  c++  java
  • 数学竞赛

    img
    img
    img
      

    Sample Input

      
      
      111111000
      1/2
      
      

    Sample Output

      
      63616161
      
      
      

    Solution

      
      ​ 前面两个子任务非常容易构造。
      
      ​ 第三个子任务比较简单,而且非常关键。不断使用7、8操作,我们一定可以凑出任意一种分数(frac pq)。反过来考虑怎么从(frac pq)变为(frac 01):如果分子比分母大,则一直减去分母。随后若分子为0,则达到目标并退出,否则取一个倒数,重复上述步骤,即:
      

    void work(int p,int q){
    	while(p>=q) p-=q;
    	if(p==0) return; //Done
      	work(q,p);
    }
    

      
    ​   然而我们发现后面的任务中7操作和8操作是禁用的,这个方法无法解决后面的问题。与其形成对比,前6个操作却是一直可用。考虑能否用前6个操作强行凑出7~9操作。
      
    ​   首先看对一个角度(x)取余变为(90^circ-x),等价于对(x)先取(sin),再取(cos^{-1})
      
    ​   然后看回题目中的操作:
      
      ​ 8: 对一个长度(x)取倒数变为(frac 1x),等价于对(x)先取(tan^{-1}),再取余,最后取(tan)
      
      ​ 9: (x ightarrowsqrt{x^2+1})等价于对(x)依次取(tan^{-1})(cos),最后取倒数。这一个操作用(tan)的三角函数线转换一下就可以得出。
      
      ​ 但是7操作凑不出来,9操作又引入新的根号,很麻烦,不可以直接套用回子任务三的解法,怎么做?
       
    ​   发现9操作有个很神奇的变式:(sqrt x ightarrowsqrt{(sqrt x)^2+1}=sqrt{x+1}),如果我们在根号的意义下考虑,这就相当于7操作!
      
    ​   问题变为我有一个终止状态(frac {sqrt{p^2}}{sqrt{q^2}}=sqrt{frac {p^2}{q^2}}),并且可以使用两种操作:分子加上分母、分子与分母互换。这个做法和子任务三完全一致,直接套用即可。
      
      ​ 所以我的脑洞能力和敏感度还是太差了。
      

    #include <cstdio>
    #include <cstring>
    using namespace std;
    char tmp233[10];
    inline int getInt(){
    	char c=getchar(); int x=0,f=1;
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while('0'<=c&&c<='9'){x=x*10+c-'0';c=getchar();}
    	return x*f;
    }
    void dfs(int p,int q){
    	int t7=0;
    	while(p>=q) p-=q,t7++;
    	if(p) dfs(q,p),printf("6145");
    	while(t7--) printf("636145");
    }
    int main(){
    	freopen("input.in","r",stdin);
    	scanf("%s",tmp233);
    	int p=getInt(),q=getInt();
    	if(!p){return 0;}
    	dfs(p*p,q*q);
    	return 0;
    }
    
  • 相关阅读:
    第六周总结&第四次实验报告
    课程总结
    第十四周课程总结&实验报告
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
  • 原文地址:https://www.cnblogs.com/RogerDTZ/p/8875931.html
Copyright © 2011-2022 走看看