数据范围:p,q≤20。

只能说我整个人傻逼了.....

我们考虑三角函数的部分性质:

$sin(x)=\sqrt{ 1-cos^2(x)}$

$cos(x)=\sqrt{1-sin^2(x)}$

$tan(x)=\frac{sin(x)}{cos(x)}$

根据这三条公式,我们可以据此推出以下六种转移方式,即:

$arcsin(x)→cos(x)\ or\ tan(x)$

$arccos(x)→sin(x)\ or\ tan(x)$

$arctan(x)→sin(x)\ or\ cos(x)$

我们又根据上述的部分性质,我们用分数$\frac{\sqrt{a}}{\sqrt{b}}$去表示x,其中a,b均为非负整数。

不难根据以下转移式子得到转移出的根式

由$arcsin(x)→cos(x)$得到$\frac{\sqrt{b-a}}{\sqrt{b}}$

由$arcsin(x)→tan(x)$得到$\frac{\sqrt{a}}{\sqrt{b-a}}$

由$arccos(x)→sin(x)$得到$\frac{\sqrt{b-a}}{\sqrt{b}}$

由$arccos(x)→tan(x)$得到$\frac{\sqrt{b-a}}{\sqrt{a}}$

由$arctan(x)→sin(x)$得到$\frac{\sqrt{a}}{\sqrt{a+b}}$

由$arctan(x)→cos(x)$得到$\frac{\sqrt{b}}{\sqrt{a+b}}$

然后简单地记忆搜索以下就可以了。

 #include<bits/stdc++.h>
using namespace std;
int vis[][]={};
int x,y;
int cnt[]={}; int use=;
void add(int x,int y){cnt[++use]=y; cnt[++use]=x;}
int dfs(int a,int b){
if(a>||b>||a<||b<=||(a==&&b!=)) return ;
int d=__gcd(a,b);
a/=d; b/=d;
if(a==x&&b==y) return ;
if(vis[a][b]) return ;
vis[a][b]=;
if(dfs(b-a,b)) {add(,); return ;}
if(dfs(a,b-a)) {add(,); return ;}
if(dfs(a,a+b)) {add(,); return ;}
if(dfs(b,a+b)) {add(,); return ;}
if(dfs(b-a,b)) {add(,); return ;}
if(dfs(b-a,a)) {add(,); return ;}
return ;
} int main(){
string s; cin>>s;
scanf("%d/%d",&x,&y);
int d=__gcd(x,y);
x/=d; y/=d;
x=x*x; y=y*y;
dfs(,);
while(use--){
printf("%d",cnt[use+]);
}
}

【GDOI2018模拟8】 数学竞赛 三角函数性质+记忆化搜索的更多相关文章

  1. POJ 2704 Pascal's Travels 【DFS记忆化搜索】

    题目传送门:http://poj.org/problem?id=2704 Pascal's Travels Time Limit: 1000MS   Memory Limit: 65536K Tota ...

  2. 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...

  3. UVa 11762 Race to 1 (数学期望 + 记忆化搜索)

    题意:给定一个整数 n ,然后你要把它变成 1,变换操作就是随机从小于等于 n 的素数中选一个p,如果这个数是 n 的约数,那么就可以变成 n/p,否则还是本身,问你把它变成 1 的数学期望是多少. ...

  4. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  5. [CSP-S模拟测试]:集合合并(记忆化搜索)

    题目传送门(内部题133) 输入格式 第一行一个正整数$n$. 第二行$n$个正整数$a_i$,表示一开始有$S_i=\{a_i\}$ 输出格式 输出一个非负整数表示最大的收益之和 样例 样例输入: ...

  6. [CSP-S模拟测试]:彩球问题(记忆化搜索)

    题目传送门(内部题91) 输入格式 第一行一个正整数$N$,表示颜色种类数. 第二行$N$个正整数$k[i],k[i]$表示第$i$种颜色的数量$(1\leqslant k[i]\leqslant 3 ...

  7. Codevs_1017_乘积最大_(划分型动态规划/记忆化搜索)

    描述 http://codevs.cn/problem/1017/ 给出一个n位数,在数字中间添加k个乘号,使得最终的乘积最大. 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提 ...

  8. 记忆化搜索 codevs 2241 排序二叉树

    codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正三 ...

  9. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

随机推荐

  1. 2018.10.05 NOIP模拟 上升序列(状压dp)

    传送门 状压dp好题. 首先需要回忆O(nlogn)O(nlog n)O(nlogn)求lislislis的方法,我们会维护一个单调递增的ddd数组. 可以设计状态f(s1,s2)f(s1,s2)f( ...

  2. 2018.07.04 POJ 3304 Segments(简单计算几何)

    Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dimensional ...

  3. 2018.07.04 BZOJ1336&&1337: Balkan2002Alien最小圆覆盖

    1336: [Balkan2002]Alien最小圆覆盖 1337: 最小圆覆盖 Time Limit: 1 Sec Memory Limit: 162 MBSec Special Judge Des ...

  4. hdu-1070(水题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1070 题意:一个人喝牛奶,有三个原则: 1.牛奶的日期不超过6天,就是最多5天. 2.每次只喝200m ...

  5. arduino 与 android 通过TCP进行字节收发

    arduino #include <avr/wdt.h> #include <SoftwareSerial.h> #define FPIN 13 SoftwareSerial ...

  6. 如何设置vim中tab键缩进---配置初始化设置

    转载自:http://blog.51cto.com/xuding/1725376:加了一些补充说明 问题: Linux系统下,Tab键默认为8个字符,需呀将其修改为4个字符的方式使用 步骤: 1.在用 ...

  7. Android基础之使用Fragment控制切换多个页面[转]

    Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序 ...

  8. SwapBuffers的等待,虚伪的FPS(转)

    FPS在实时渲染中扮演着一个重要的角色,也许你会去笑一个不懂FPS是什么的游戏新手,但也许,这只是五十步笑一百步罢了.你能读懂SwapBuffers的深情等待吗?——ZwqXin.com frames ...

  9. 一个简单 Go Web MVC 框架实现思路

    需要的知识点 为了防止你的心里不适,需要以下知识点: Go 基本知识 Go 反射的深入理解 使用过框架 Go Web 服务器搭建 package main import ( "fmt&quo ...

  10. node API assert

    1.assert.throws(block, [error], [message]): assert.throws( function(){ throw new Error('wrong'); }, ...