AtCoder Beginner Contest 112

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LMengi000/article/details/82954412

总结:前两个题目做的很顺畅,但是到了第三个与第四个题目,做起来就有一些吃力,虽然能明白题意,但是不能用编程语言表达出来,而且都是数学题目,有些题目需要找规律,做题时对这两个题目没有思路。

A - Programming Education

水题不解释

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
	int n,a,b;
	scanf("%d",&n);
	if(n==1)
	printf("Hello World\n");
	else
	{
		scanf("%d%d",&a,&b);
		printf("%d\n",a+b);
	}
	return 0;
}

B - Time Limit Exceeded

回家有N条路线,每一条路线都有一个所需要的时间 t 与花费 c,让我们在规定时间内回到家并且所花费用最小。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1010;
struct Node
{
	int c,t,value;
}num[maxn];
bool compare(Node a, Node b)
{
	return a.c<b.c;
}
int main()
{
	int n,p;
	scanf("%d%d",&n,&p);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&num[i].c,&num[i].t);
	}
	sort(num,num+n,compare);
	for(int i=0;i<n;i++)
	{
		if(num[i].t<=p)
		{
			printf("%d\n",num[i].c);
			break;
		}
		if(i==n-1 && num[i].t>p)
		{
			printf("TLE\n");
		}
	}
	return 0;
}

C - Pyramid

通过给出的金字塔的许多小坐标和高度h,通过解线性方程来求出中心坐标点和高度H,

对应的公式:H -( x - Cx )-( y - Cy )= h  其中x y h是题目中给出的,让我们通过公式来求出Cx、Cy、H

目前没思路。

/*#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>

using namespace std;

int X[110],Y[110],H[110];
int G[110][110];
int main()
{
    int N;
    cin >> N;
    for(int x = 0 ; x <= 100 ; x++)
    {
        for(int y = 0 ; y <= 100 ; y++)
        {
            G[x][y] = -1;
        }
    }
    for(int i = 0 ;i < N ; i++)
    {
        cin >> X[i] >> Y[i] >> H[i];
        G[X[i]][Y[i]] = H[i];
    }
    int ansx,ansy,ansh;
    for(int x = 0 ; x <= 100 ; x++)
    {
        for(int y = 0 ; y <= 100 ; y++)
        {
            if(G[x][y] == 0){
                continue;
            }
            int h,ans = 0;
            //
            bool can = true;
            for(int i = 0 ; i < N ; i++)
            {
                if(H[i] == 0)continue;
                if(ans == 0){
                    ans =  H[i] + abs(x-X[i]) + abs(y-Y[i]);
                }
                h = H[i] + abs(x-X[i]) + abs(y-Y[i]);
                if(h!=ans)
                {
                    can = false;
                }
            }
            if(can)
            {
                for(int i = 0 ; i < N ; i++)
                {
                    if(H[i] == 0)
                    {
                        if(h-abs(X[i]-x)-abs(Y[i]-y)>0)
                        {
                            can = false;
                        }
                    }
                }
            }
            if(can)
            {
                ansx = x;
                ansy = y;
                ansh = h;
            }
        }
    }
    cout<<ansx<<" "<<ansy<<" "<<ansh<<endl;
    return 0;
}*/

放一个小伙伴的代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=110;
struct{
	int x,y,h;
}mes[maxn];
 
int main(){
	int n;
	scanf("%d",&n);
	int a;
	for(int i=0;i<n;i++){
		scanf("%d%d%d",&mes[i].x,&mes[i].y,&mes[i].h);
		if(mes[i].h>0) a=i;
	}
	
	int H,ans;
	bool flag;
	for(int cx=0;cx<=100;cx++){
		for(int cy=0;cy<=100;cy++){
			flag=true;
			H=abs(mes[a].x-cx)+abs(mes[a].y-cy)+mes[a].h;
			for(int i=0;i<n;i++){
				ans=max((H-abs(mes[i].x-cx)-abs(mes[i].y-cy)),0);
				if(ans!=mes[i].h){
					flag=false;
					break;
				}
			}
			if(flag){
				printf("%d %d %d\n",cx,cy,H);
				return 0;
			}
		}
		
	}
	
	
	return 0;
}

D - Partition

n代表数字的个数,m代表这n个数字之和,给出n和m

来求这n个数字的最大公约数,并且这n个数字之和为m

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <string>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <stdlib.h> 
using namespace std;
int main(){
    int n, m;
    scanf("%d%d",&n,&m);
    int q = m/n;
    int r = m%n;
    // printf("q=%d r=%d\n",q,r);
    for ( int i = q ; i >= 1 ; i-- )
    			if ( m%i == 0 ){
    				printf("%d\n",i);
    				return 0;
    }  
return 0;
}

猜你喜欢

转载自blog.csdn.net/LMengi000/article/details/82954412