2018广东工业大学新生杯初赛

本文回顾了2018年广东工业大学新生杯算法竞赛,涉及题目包括几何、物理、数学等多个方面。重点讲解了排列组合、斐波那契变形、模拟等算法问题,同时反思了比赛中易犯的错误,如代码质量、计算重复排列等问题,强调了解题思路清晰和代码规范的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这还是没有考什么几何题物理题,要是考了,岂不完蛋?

代码奇丑无比。。

 

A: 哦吼?GJC要防AK了?

如果x是y的倍数输出-1,否则输出x。

#include<cstdio>
#include<cctype>
#include<vector>
#include<iostream>
using namespace std;
 
int x,y;
 
int main()
{
    scanf("%d%d",&x,&y);
    if(x%y==0)printf("-1\n");
    else printf("%d\n",x);
    return 0;
}

B: 730的天花板

斐波那契变形。对于3*n的矩阵,考虑最左边的一列,只有两种选择,要么放2*2的,要么不放。设f(k)为3*k矩阵方案数,如果最左边放2*2,则占了两行,剩下两个位只能放2个1*1的,方案数2*f(n-2),如果不放2*2的,就是只放1*1的,只能放3个1*1的,方案数f(n-1).故递推公式f(n)=f(n-1)+2*f(n-2).递推边界f(1)=f(0)=1。

#include<cstdio>
#include<cctype>
#include<vector>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
 
int t,n,a,b,c;
int f[10000005];
int main()
{
    scanf("%d",&t);
    f[0]=f[1]=1;
    for(int i=2;i<=10000000;i++)f[i]=(f[i-1]+2*f[i-2])%19260817;
    while(t--)
    {
        scanf("%d",&n);
        printf("%d\n",f[n]);
    }
    return 0;
}

C: gugugu

模拟

#include<cstdio>
#include<cctype>
using namespace std;
 
int t,n;
char s[1005];
 
bool ok(int n)
{
    if(n<=1)return 0;
    for(int i=2;i<=n-1;i++)if(n%i==0)return false;
    return true;
}
 
int main()
{
    scanf("%d",&t);
    int cnt=0;
    while(t--)
    {
        scanf("%s",s);
        for(int i=0;s[i];i++)if(tolower(s[i])=='g'&&tolower(s[i+1])=='u')cnt++;
    }
    printf(ok(cnt)?"gugugu\n":"gu\n");
    return 0;
}

D: 不可思议唤来不可思议β

排列组合题,显然枚举会超时。比赛时思路是对的,但是忘了含有重复元素的排列数怎么算,使劲推公式,没有思路,无果,,回来一查,这不是高中数学排列组合裸题吗!

假设有 111223这6个数,如何计算它的全排列呢?先假设这6个数字都不相同,排列共A(6,6)种,但在这A(6,6)种排列中,3个1和2个2是一样的,但被计算了A(3,3),A(2,2)种,因此答案就是A(6,6)/A(3,3)/A(2,2)种,这就是这道题最关键的地方。

先考虑最左边那一位可以填1,2,3三种,可以确定全排列中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值