厦门大学“网宿杯“17届程序设计竞赛决赛(同步赛) #题解 #题目都超有趣呀

A.这波啊,这波是…

链接:https://ac.nowcoder.com/acm/contest/5945/A
来源:牛客网

题目描述
“这波啊,这波是肉蛋葱鸡!”
打出口令即可领取签到奖励。

输入描述:
没有输入。

输出描述:
见样例输出。

示例1

输入
non

输出
roudancongji

说明
如果你不知道题目在讲什么也没关系,你只需要输出样例即可通过本题。

思路:
签到题,看懂提就行

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1010;
int a[maxn];
int main()
{
   
   
	cout << "roudancongji" << endl;
	return 0;
}

B.李在赣神魔

链接:https://ac.nowcoder.com/acm/contest/5945/B
来源:牛客网

题目描述
我们要做一个旋转木马! 输入一个n\times nn×n的字符矩阵,将其顺时针旋转90度后输出。
输入描述:
每个测试点仅包含一组输入数据。
第一行一个整数n(1 \leq n \leq 1000)n(1≤n≤1000),表示矩阵大小。
接下来n行,每行一个长度为n的字符串,仅包含小写字母,表示这个矩阵。
输出描述:
输出顺时针旋转90度后的矩阵,行末不要出现多余空格。

示例1
输入
3
aaa
bbb
ccc

输出
cba
cba
cba
思路:
也是个签到题,不需要任何算法知识背景,不多说了

代码:

#include <stdio.h>
main()
{
   
   
    int n,i,j;
    char a[1005][1005],b[1005][1005];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
   
   
        scanf("%s",a[i]);
    }
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<n;j++)
        {
   
   
            b[j][n-i-1]=a[i][j];
        }
    }
    for(i=0;i<n;i++)
    {
   
   
        printf("%s\n",b[i]);
    }
}

C.电竞希金斯

链接:https://ac.nowcoder.com/acm/contest/5945/C
来源:牛客网

题目描述
大司马绰号“电竞希金斯”,所以他的几何非常好。他发明的“马氏几何”多次挑战牛顿和爱因斯坦的理论,连奥沙利文都直呼内行。
本题就是一道关于计算几何的题目。
给定一条直线ax+by+c=0,请以编号从小到大的顺序输出这条直线经过的象限。
注意,x轴和y轴不属于任何一个象限,第一象限为x,y>0的区域,第二象限为x<0,y>0的区域,第三象限为x,y<0的区域,第四象限为x>0,y<0的区域。
输入描述:
每个测试点仅包含一组输入数据。
仅一行空格隔开的三个整数a,b,c(-100 \leq a,b,c \leq 100)a,b,c(−100≤a,b,c≤100)
其中a和b不会同时等于0
输出描述:
一行,按照顺序输出经过的象限。
如果直线不经过任何象限,请输出"non"。

示例1
输入
1 2 3

输出
2 3 4

思路:
简单的数学题,没啥好说的…

代码:

#include <bits/stdc++.h>
using namespace std;
int main() {
   
   
    int a, b, c;
    cin >> a >> b >> c;
    if (a == 0) {
   
   
        if (c == 0)cout << "non" << endl;
        else {
   
   
            if (b * c > 0)cout << "3 4" << endl;
            else cout << "1 2" << endl;
        }
    }
    else if (b == 0) {
   
   
        if (c == 0)cout << "non" << endl;
        else {
   
   
            if (a * c > 0)cout << "2 3" << endl;
            else cout << "1 4" << endl;
        }
    }
    else {
   
   
        if (c == 0)
            if (a * b > 0)cout << "2 4" << endl;
            else cout << "1 3" << endl;
        else {
   
   
            if (a * b < 0) {
   
   
                if (b * c < 0)cout << "1 2 3" << endl;
                else cout << "1 3 4" << endl;
            }
            else {
   
   
                if (b * c < 0)cout << "1 2 4" << endl;
                else cout << "2 3 4" << endl;
            }
        }
    }
    return 0;
}

D.财富密码

链接:https://ac.nowcoder.com/acm/contest/5945/D
来源:牛客网

题目描述
“我们厦大的ACM实在是太厉害了”
在我校无数的菜鸡中,这句话打开了财富之门,因此被称为财富密码。
事实上,关于密码学的研究里面有很多涉及到数论的知识,以下就是一道例题。
求有多少整数n(1 \leq n \leq x)n(1≤n≤x)满足na^{n} \equiv b (mod \ p)na
n≡b(mod p),其中p是一个质数。
看到这里你可能认为我会解释上述符号的意思,然而如果你看不懂上面的式子,那么我不建议你尝试这道题目,所以这里没有解释。

输入描述:
每个测试点仅包含一组输入数据。
第一行,四个以空格隔开的正整数,分别表示a,b,p,x(2 \leq p \leq 10^6,1 \leq x \leq 10^{12},1 \leq a,b < p)a,b,p,x(2≤p≤10 6,1≤x≤10 12,1≤a,b<p)

输出描述:
一个正整数,符合条件的n的个数。

示例1
输入
2 3 5 8

输出
2

思路:
需要一些简单的数论知识:

费马小定理:若 p为质数,而整数a不是 p的倍数,则在这里插入图片描述

逆元:定义整数 a 在模 p 意义下的逆元为 x,则 在这里插入图片描述
可记作 在这里插入图片描述
在 1条件下,有 在这里插入图片描述
因为 在这里插入图片描述

然后到这道题:
首先由 费马小定理 可以得到在这里插入图片描述
因此可以设 在这里插入图片描述
然后推式子:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值