1. 程式人生 > >AtCoder Beginner Contest 112

AtCoder Beginner Contest 112

總結:前兩個題目做的很順暢,但是到了第三個與第四個題目,做起來就有一些吃力,雖然能明白題意,但是不能用程式語言表達出來,而且都是數學題目,有些題目需要找規律,做題時對這兩個題目沒有思路。

水題不解釋

#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;
}

回家有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;
}

通過給出的金字塔的許多小座標和高度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;
}

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;
}