张红花RTO接风洗尘赛

T1一元三次方程求解:

首先,本题可以暴力,但不稳定
那么正解如何做呢
首先,这题说根与根差值绝对值大于1,那么,枚举区间,对区间进行二分查找,然后
没了
代码:

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double fc(double x)
{
    
    
    return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
    
    
    double l,r,m,x1,x2;
    int s=0,i;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    for (i=-100;i<100;i++)
    {
    
    
        l=i; 
        r=i+1;
        x1=fc(l);
        x2=fc(r);
        if(!x1) 
        {
    
    
            printf("%.2lf ",l); 
            s++;
        }
        if(x1*x2<0)
        {
    
    
            while(r-l>=0.001)
            {
    
    
                m=(l+r)/2;
                if(fc(m)*fc(r)<=0) 
                   l=m; 
                else 
                   r=m;
            }
            printf("%.2lf ",r);
            s++;
        }
        if (s==3) 
            break;
    }
    return 0;
}

T2循环比赛日程表:

这题很有意思啊
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1
经过细细观察,就未见其全图可以发现
1 2 3 4 | 5 6 7 8
2 1 4 3 | 6 5 8 7
3 4 1 2 | 7 8 5 6
4 3 2 1 | 8 7 6 5
————————
5 6 7 8 | 1 2 3 4
6 5 8 7 | 2 1 4 3
7 8 5 6 | 3 4 1 2
8 7 6 5 | 4 3 2 1
这个矩阵可以分割为这样的四部分
而每个小矩阵又可以分别分割
最后递归至一个单位
于是就可以发现
每个左上矩阵和右下矩阵一模一样
而左下与右上加了个奇怪的数
而这个数,显然:2k,而k,显然是从最小的矩阵开始,扩大k+1次中的k
那么就能写出来了,一个小递归,一个小式子
代码:

#include <bits/stdc++.h>
using namespace std;
int m, n, a[10005][10005];
void dfs(int now, int num, int x, int y) {
    
    
    if (!now) {
    
    
        a[x][y] = num;
        return;
    }
    dfs(now - 1, num, x, y);
    dfs(now - 1, num + (1 << (now - 1)), x, y + (1 << (now - 1)));
    dfs(now - 1, num + (1 << (now - 1)), x + (1 << (now - 1)), y);
    dfs(now - 1, num, x + (1 << (now - 1)), y + (1 << (now - 1)));
}
int main() {
    
    
    scanf("%d", &m);
    n = pow(2, m);
    dfs(m, 1, 1, 1);
    for (int i = 1; i <= n; i++) {
    
    
        for (int j = 1; j <= n; j++) {
    
    
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

T3取余运算

快速幂+取模,不再赘言
代码:

#include <bits/stdc++.h>
using namespace std;
long long b, p, k;
long long qpow(long long a, long long b) {
    
    
    long long res = 1;
    while (b) {
    
    
        if (b & 1)
            res = res * a % k;
        a = a * a % k;
        b >>= 1;
    }
    return res % k;
}
int main() {
    
    
    scanf("%lld%lld%lld", &b, &p, &k);
    printf("%lld^%lld mod %lld=%lld", b, p, k, qpow(b, p) % k);
    return 0;
}

T4黑白棋子的移动

观察规律,打表,不再赘言
代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
    
    
    scanf("%d", &n);
    for (int i = 0; i < 2 * (n - 1) - 4; i++) {
    
    
        printf("step%2d:", i);
        if (!(i % 2)) {
    
    
            for (int j = 1; j <= n - (ceil(i / 2)); j++) printf("o");
            for (int j = 1; j <= n - (ceil(i / 2)); j++) printf("*");
            printf("--");
            for (int j = 1; j <= ceil(i / 2); j++) printf("o*");
        } else if (i % 2) {
    
    
            for (int j = 1; j <= n - 1 - (ceil(i / 2)); j++) printf("o");
            printf("--");
            for (int j = 1; j <= n - 1 - (ceil(i / 2)); j++) printf("*");
            for (int j = 1; j <= ceil(i / 2); j++) printf("o*");
            printf("o*");
        }
        printf("\n");
    }
    printf("step%2d:ooo*o**--", 2 * (n - 1) - 4);
    for (int i = 1; i <= n - 4; i++) printf("*o");
    printf("*\n");
    printf("step%2d:o--*o**oo", 2 * (n - 1) - 3);
    for (int i = 1; i <= n - 4; i++) printf("*o");
    printf("*\n");
    printf("step%2d:o*o*o*--o", 2 * (n - 1) - 2);
    for (int i = 1; i <= n - 4; i++) printf("*o");
    printf("*\n");
    printf("step%2d:--o*o*o*o", 2 * (n - 1) - 1);
    for (int i = 1; i <= n - 4; i++) printf("*o");
    printf("*\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/MuLaSaMe/article/details/115335550
RTO