zoukankan      html  css  js  c++  java
  • 2016沈阳区域赛题解

    题目链接:https://vjudge.net/contest/178453#overview

    A题:签到,略

    B题:签到,略

    C题:矩阵快速幂。推出一个 7*7 的矩阵即可。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long LL;
     5 const LL MOD = 2147493647;
     6 int a, b;
     7 LL C[7][7];
     8 
     9 void mut(LL A[][7], LL B[][7]) {
    10     memset(C, 0, sizeof(C));
    11     for(int i = 0; i < 7; ++i)
    12         for(int j = 0; j < 7; ++j)
    13             for(int k = 0; k < 7; ++k)
    14                 C[i][j] = ( C[i][j] + A[i][k] * B[k][j] ) % MOD;
    15     memcpy(A, C, sizeof(C));
    16 }
    17 
    18 LL qpow(int n) {
    19     LL aa[7][7] = {{1,2,1,0,0,0,0},{1,0,0,0,0,0,0},{0,0,1,4,6,4,1},{0,0,0,1,3,3,1},{0,0,0,0,1,2,1},{0,0,0,0,0,1,1},{0,0,0,0,0,0,1}};
    20     LL ans[7][7] = {{1,0,0,0,0,0,0},{0,1,0,0,0,0,0},{0,0,1,0,0,0,0},{0,0,0,1,0,0,0},{0,0,0,0,1,0,0},{0,0,0,0,0,1,0},{0,0,0,0,0,0,1}};
    21     while(n) {
    22         if(n&1) mut(ans, aa);
    23         mut(aa,aa);
    24         n>>=1;
    25     }
    26     LL res = ans[0][0] * b % MOD + ans[0][1] * a % MOD + ans[0][2] * 3 * 3 * 3 * 3 % MOD;
    27        res = res + ans[0][3] * 3 * 3 * 3 % MOD + ans[0][4] * 3 * 3 % MOD + ans[0][5] * 3 % MOD;
    28        res = ( res + ans[0][6] ) % MOD;
    29     return res;
    30 }
    31 
    32 int main() {
    33     int T;
    34     scanf("%d", &T);
    35     while(T--) {
    36         int n;
    37         scanf("%d%d%d", &n, &a, &b);
    38         if(n == 1) {
    39             printf("%d
    ",a);
    40             continue;
    41         }
    42         LL ans = qpow(n-2);
    43         printf("%lld
    ", ans);
    44     }
    45     return 0;
    46 }
    View Code

    D题:空

    E题:暴力

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <vector>
     5 using namespace std;
     6 const int maxn = 100 + 10;
     7 const int maxm = 1000 + 100;
     8  
     9 int n, m, k;
    10 vector<int> v[maxn];
    11 int from[maxm], to[maxm];
    12 int G[maxn][maxn];
    13 int d[maxn], node[maxn];
    14 int tot, ans;
    15  
    16 void DFS(int x, int start)
    17 {
    18     if (tot == k) { ++ans; return; }
    19  
    20     int sz = v[x].size();
    21     for (int i = start; i < sz; i++)
    22     {
    23         int flag = 0;
    24         for (int j = 2; j <= tot; j++)
    25         if (!G[ node[j] ][ v[x][i] ]) { flag = 1; break; }
    26  
    27         if (flag) continue;
    28  
    29         node[++tot] = v[x][i], DFS(x, i+1), --tot;
    30     }
    31 }
    32  
    33 int main()
    34 {
    35     int t;
    36     scanf("%d", &t);
    37     for (int ca = 1; ca <= t; ca++)
    38     {
    39         memset(d, 0, sizeof(d));
    40         for (int i = 1; i <= n; i++)
    41         {
    42             for (int j = i+1; j <= n; j++) G[i][j] = G[j][i] = 0;
    43             v[i].clear();
    44         }
    45  
    46         scanf("%d%d%d", &n, &m, &k);
    47         for (int i = 1; i <= m; i++)
    48         {
    49             scanf("%d%d", &from[i], &to[i]);
    50             d[ from[i] ]++, d[ to[i] ]++;
    51         }
    52  
    53         for (int i = 1; i <= m; i++)
    54             if (d[ from[i] ] >= k-1 && d[ to[i] ] >= k-1)
    55             {
    56                 if (from[i] < to[i]) v[ from[i] ].push_back(to[i]);
    57                     else v[ to[i] ].push_back(from[i]);
    58                 G[ from[i] ][ to[i] ] = G[ to[i] ][ from[i] ] = 1;
    59             }
    60  
    61         ans = 0;
    62         for (int i = 1; i <= n; i++)
    63         {
    64             tot = 1, node[1] = i;
    65             DFS(i, 0);
    66         }
    67  
    68         printf("%d
    ", ans);
    69     }
    70 }
    View Code

    F题:空

    G题:二分+积分,这个题充分展现了微积分是多么的重要,Orz......辛普森积分并不能AC,eps小一点就T,大一点就WA,这数据出的真好.......据说现场赛机子贼快?辛普森可以过????这个积分具体怎么推导式子看这篇blog:https://blog.csdn.net/danliwoo/article/details/53002695

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 using namespace std;
     5 
     6 const double eps = 1e-10;
     7 const double pi = acos(-1);
     8 
     9 double MID;
    10 
    11 double getans(double mid)
    12 {
    13     return pi*cos(mid) - mid*cos(mid) + sin(mid) - 1.0/3.0*sin(mid)*sin(mid)*sin(mid);
    14 }
    15 
    16 bool check(double mid, double d)
    17 {
    18     MID = mid;
    19     double ans = 1/tan(mid)*getans(acos(tan(mid)*2-1));
    20     if(ans-d*pi > eps) return false;
    21     return true;
    22 }
    23 
    24 int main() {
    25     int T;
    26     scanf("%d", &T);
    27     for(int ca = 1; ca <= T; ++ca) {
    28         double d, ans = 0;
    29         scanf("%lf", &d);
    30         if(d >= 1) {
    31             ans = pi*sqrt(2*2+4*(2-d)*(2-d))/2;
    32         }else {
    33             double l = 0, r = pi/4;
    34             while(r-l > eps) {
    35                 double mid = (l+r)/2;
    36                 if(check(mid,d)) {
    37                     l = mid;
    38                 }else {
    39                     r = mid;
    40                 }
    41             }
    42             l = tan(l)*2;
    43             double jd = acos(1-l);
    44             double area = jd - sin(jd)*cos(jd);
    45             jd = atan(2.0/l);
    46             ans = area/cos(jd);
    47         }
    48         printf("%.5f
    ", ans);
    49     }
    50     return 0;
    51 }
    View Code

    H题:空

    I 题:空

    J题:空

    K题:空

  • 相关阅读:
    jmeter在返回的json串中提取需要的值
    selenium 浏览器驱动下载地址
    Postman设置环境变量
    Selenium中自动输入10位随机数字的方法
    Selenium-java 中 对于下拉框 对于网页上的下拉框 如何定位
    Selenium中如何运行 auto.exe 文件
    Selenium 中 高亮元素
    linux mysql安装
    数据库中的一对多、多对多的关系讲解
    Django Models 介绍
  • 原文地址:https://www.cnblogs.com/DynastySun/p/9742878.html
Copyright © 2011-2022 走看看