第三周上机题解

第三周上机题解

题目解法不唯一,此处仅给出一种参考解法(A~E、H题难度较大,此处仅给出参考链接,有兴趣可自行百度学习)ps.正式比赛时建议先做简单题尽量得分而不是优先死磕难题。

A Cotree

树形DP,参考链接:

Cotree【树DP】

B Math

此题需要较好数学功底,参考链接:

Math

C Trap

容斥原理+组合计数,参考链接:

Trap

D Wave

此题考察线段树,但由于c范围较小,也可暴力模拟,且思路不涉及很难的算法知识,有兴趣可尝试,参考链接:

(暴力模拟)Wave

E Packing

难度较大,不做要求。

F String

求最大公约数,这里用的是辗转相除法

#include
//辗转相除求最大公约数
int gcd(int m,int n)
{
    if(n==0)
        return m;
    return gcd(n,m%n);
}
int main()
{
    char c[105];
    int i,n,num1,num2,tmp;
    int numc[4]={0};

    scanf("%d",&n);
    getchar();      //读取缓冲区的换行
    gets(c);

    for(i=0;i

G Traffic

    题目是说有东西和南北两个方向的车,东西方向的车只需按照自己原来的时间经过交叉路口即可,而南北方向的所有车必须等待相同的时间,然后两个方向的车都开始行驶,但不会发生任何碰撞,即要从 0 开始找到一个时间 t 加到南北方向上所有车的通过时间上,若都没有和东西方向的车发生碰撞,则说明该 t 就是最短的等待时间。
    题意不好理解,但理解后AC不难。

#include
#include
int a[3005],b[2005];

int main()
{
        int n,m,i,j;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
	    int k;
	    memset(a,0,sizeof(a));  //将a、b数组初始化为0
	    memset(b,0,sizeof(b));
	    for(i=0;i

H Rng

需要较好数学功底和逆元知识,难度较大,参考链接:

Rng

I Budget

将输入的数字看作字符串来处理,找到小数点后三位的数并判断即可

#include
char num[30];    //储存数字的字符数组,注意要足够大
int find(char c)
{
    int i;
    for(i=0;i<30;++i){
        if(num[i]==c)
            return i;
        else if(num[i]=='\0')
            break;
    }
    return -1;
}
int main()
{
    int n,i,sum;
    int a,tmp;

    while(scanf("%d",&n)!=EOF){
        sum=0;
        for(i=0;i

J Worker

要使每个仓库的搬运数量相等,即每个仓库的a[i]*b[i](b[i]分配到这个仓库的工人)相等,即搬运数量是所有a[i]的公倍数,可以先求出最小公倍数s,让sum+=s/a[i],得出sum就是最小的工人数量,只有m%sum==0即工人数量是sum的整数倍时才输出Yes

注意有些变量要用long long以防止数据超出int范围

#include

typedef long long LL;   //将长整型long long int命名为LL
//用long long确保数据不会超出范围
LL gcd(LL a,LL b){     //辗转相除求最大公因数
    if(b==0)
        return a;
    return gcd(b,a%b);
}

LL lcm(LL a,LL b){    //求最小公倍数
    return a/gcd(a,b)*b;
}

int main() {
    LL n,m,i;
    LL a[1005];
    while(scanf("%lld%lld",&n,&m)!=EOF){
        LL lcmAll = 1;
        for(i=0;i

K Class

基础的解方程

#include
int main()
{
    int x,y;
    int a,b;
    scanf("%d%d",&x,&y);
    a=(x+y)/2;
    b=x-a;
    printf("%d\n",a*b);
    return 0;
}

祝大家天天AC

 

 

你可能感兴趣的:(上机题解)