雅礼集训D1T3 math [咕咕咕]

题目描述:

样例:

input:
2
3 5 0.01
3 6 0.02

output:
+2
+4

数据范围:

题解:

标程:

#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
const int maxn=60+5;
int i,j,n,m,t,k;
struct ar{
    double a[maxn][maxn];
} a,c;
double x;
ar ch(ar a,ar b){
    ar c;
    memset(c.a,0,sizeof(c.a));
    fo(i,1,m*2)
    fo(j,1,m*2)
    fo(k,1,m*2) c.a[i][j]=c.a[i][j]+a.a[i][k]*b.a[k][j];
    return c;
}
int main(){
    freopen("math.in","r",stdin);freopen("math.out","w",stdout);
    scanf("%d",&t);
    while (t){
        t--;
        scanf("%d%d%lf",&m,&n,&x);
        memset(a.a,0,sizeof(a.a));
        memset(c.a,0,sizeof(c.a));
        fo(i,m+1,m*2){
            a.a[i][i-m]=1,a.a[i-m][i]=-1;
            a.a[i][i]=2*cos(x);if (i<m*2)a.a[i][i+1]=sin(x);
        }
        c.a[1][1]=sin(x);c.a[1][m+1]=sin(2*x);c.a[1][m+2]=sin(x)*sin(x);
        n--;
        while (n){
            if (n%2)c=ch(c,a);
            a=ch(a,a);
            n/=2;
        }
        double s=c.a[1][m];
        if (s>0) printf("+");else printf("-");
        s=fabs(s);
        if (s<1){
            double s1=0.1;
            while (1) if (s>s1) {printf("%d\n",(int)(s/s1));break;}else s1*=0.1;
        }else{
            while (s)if (s<10) {printf("%d\n",(int)s);break;}else s/=10;

        }
    }
}

原文地址:https://www.cnblogs.com/p-b-p-b/p/10229850.html

时间: 2024-07-30 14:07:29

雅礼集训D1T3 math [咕咕咕]的相关文章

#6030. 【雅礼集训 2017 Day1】矩阵

#6030. 「雅礼集训 2017 Day1」矩阵 题目描述 有一个 n×n  的矩阵,每个位置 (i,j) 如果是 . 表示为白色,如果是 # 表示为黑色. 初始时,每个位置可以是黑色或白色的,(i,j)  位置的值会作为 ai,j 给你. 现在有一种操作,选择两个整数 i,j∈[1,n],记 (i,1),(i,2),…,(i,n) (i, 1), (i, 2)的颜色为 C1,C2,…Cn ??,将 (1,j),(2,j),…,(n,j)  的颜色赋为 C1,C2,…,Cn ??. 你的任务是

雅礼集训——day1、day2

day1: 嗯上午考试拿了100分.第一题40,第二题60.看完题的时候我就觉得第二题的部分分是最好得到的,因为数据范围只有300,而且一眼看上去就是网络流的二分图多重匹配模型?然后就建了个网络流写了些,期望得分是70分,但是第1组数据有点劲,被卡掉了,就拿了60分.正解是map+set的贪心...并不会STL 写完T2去看T1,先用DFS乱搞了一下,结果样例都没过去,我手推了一下样例,得到了一个公式,就是从一个点出发需要加上的边数=这个点通过DFS能够遍历到的点的个数-与这个点直接相连的点的个

雅礼集训 Day6

今日得分:10+0+20=30,修改后90+90+100=280 今日题解: T1:题中所给的结构构成一个内向环套树森林,对于每棵环套树,首先树上的每个点的孩子只能留一个最大的,其他的都需要修改,处理后变为一个环上面连一些链,每个链可以断开链首或者断开环上的前驱节点,并且至少要断开一条环上的边,特判只有一个环的情况即可 T2:一个位置如果先吃掉左边的三明治,那么它左边的位置也会先吃左边,于是我们对于每一行的都搜一遍即可 T3:如果所有操作都是在1~n区间内进行,那么它的实际作用就是去掉最大值再加

loj6029 「雅礼集训 2017 Day1」市场

传送门:https://loj.ac/problem/6029 [题解] 考虑如果有一些近似连续的段 比如 2 2 2 3 3 3,考虑在除3意义下,变成0 0 0 1 1 1,相当于整体-2 又:区间增加很容易造成这种段,所以我们猜测可以暴力维护 用一棵线段树即可.(好像真的能暴力维护啊 我不知道怎么证明复杂度) # include <stdio.h> # include <string.h> # include <iostream> # include <al

雅礼集训——day3、day4

day3: 上午考试就拿了10分... T1写了个N^3的暴力,然后就拿了10分...正解是要二分时间然后找到前m个脚,然后用二分套二分求第k大.... T2看了半天感觉并不可做...然后正解居然要用斐波拉契数列的通项来求解.... T3求最小生成树的个数,我以为这道题还是可以拿50分的,然后就没有然后了.推了2小时的样例然后强行把自己劝退了...正解是要用字母树+贪心... 要学的东西又多了好多,压力好大... 下午讲的字符串算法,最后的那个回文树不是很明白...这两天得学一下字符串算法 da

「6月雅礼集训 2017 Day10」quote

[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. $1 \leq T \leq 10^5, 1 \leq n \leq 10^7, 1\leq K \leq 10^9$ [题解] 显然引号序列可以看做括号序列,于是我们有了一个$O(n^2)$的dp了. 设$f_{i,j}$表示到第$i$个位置,前面有$j$个左引号没有匹配,的方案数 每次,要么有

雅礼集训 Day5

今日得分:100+0+40 = 140 题解 T1:考虑线性基,考虑每个数位是否会在线性基里,显然除了L的第一位1以外,其他位置只有从0变成1的时候才会加入线性基,对每一位分别判断即可 T2:考虑二分图匹配,对于每一个枚举到的一类点,我们把二类点按照极角序尝试匹配,显然按照这个顺序匹配不会出现冲突问题,因为如果一个点没选,那么直接形成匹配,如果一个点无法增广,那么它一定被选,不会对之后的点产生影响 T3:最后发现是求一个基环树森林的不同构标号个数,分别处理环和树,树哈希,环枚举循环节大小

2017雅礼集训 Day1

今日得分:60+0(忘记关调试输出)+50 = 110 今日题解: T1:std做法:直接暴力n^2枚举,搜索加最优性剪枝 做法2:O(17n)DP,记录匹配偏移量 T2:求出通项,把不同的幂次拆开计算,单独一项的幂次可以分治FFT 我的做法:分治矩乘,但我不知道矩阵怎么FFT T3:虚树+树链剖分维护,标程400行 感觉还行?明天会做得更好的

「6月雅礼集训 2017 Day7」电报

[题目大意] 有n个岛屿,第i个岛屿有有向发射站到第$p_i$个岛屿,改变到任意其他岛屿需要花费$c_i$的代价,求使得所有岛屿直接或间接联通的最小代价. $1 \leq n \leq 10^5, 1 \leq p_i,c_i \leq 10^9$ [题解] 显然最后是个大环,特判原来就是大环的情况. 考虑每个连通块最多保留多少. 树的答案可以直接dp做出来. 环的答案,根据树的答案dp出来. h[x][0/1]表示当前做到环上第i个点,环是否被切断了,的最大保留价值. 因为环必须被切断一次.所