打印
[其他]

灵动集训第三天

[复制链接]
1748|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
l63t89|  楼主 | 2021-1-28 22:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AC, hd
A题 Birthday Cake

使用特权

评论回复
沙发
l63t89|  楼主 | 2021-1-28 22:36 | 只看该作者
思考过程
简单的计算题,先分三类,樱桃在切的线上方、下方和在线上。然后在500的范围内枚举再输出就可以了。

使用特权

评论回复
板凳
l63t89|  楼主 | 2021-1-28 22:37 | 只看该作者
源代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
    int x;
    int y;
}q[201];
int n;
int main()
{
    int m,i,j,k,sum1,sum2,flag;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
        {
            break;
        }
        m=n;
        n=n*2;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&q[i].x,&q[i].y);
        }
        sum1=0;
        sum2=0;
        flag=0;
        for(i=-500;i<=500;i++)
        {
            for(j=-500;j<=500;j++)
            {
                if(i==0&&j==0)
                {
                    continue;
                }
                sum1=0;
                sum2=0;
                for(k=0;k<2*n;k++)
                {
                    if((i*q[k].x+j*q[k].y)>0)
                    {
                        sum1++;
                    }
                    else if((i*q[k].x+j*q[k].y)<0)
                    {
                        sum2++;
                    }
                    else
                    {
                        break;
                    }
                }
                if(sum1==sum2&&sum1==m)
                {
                    printf("%d %d\n",i,j);
                    flag=1;
                    break;
                }
            }
            if(flag==1)
            {
                break;
            }
        }
    }
    return 0;
}

使用特权

评论回复
地板
l63t89|  楼主 | 2021-1-28 22:37 | 只看该作者
B题 Is This Integration ?

使用特权

评论回复
5
l63t89|  楼主 | 2021-1-28 22:39 | 只看该作者
思考过程 如图,先求Z,再求Y,再求X。

使用特权

评论回复
6
l63t89|  楼主 | 2021-1-28 22:40 | 只看该作者
源代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#define Pi acos(-1)
using namespace std;
int main()
{
        double a;
        while (~scanf("%lf",&a))
        {
                double s=0,x,y,z;
                s=sqrt(3.0)*a*a/4.0+Pi*a*a/6.0;
                z=4*(a*a-s);
                y=4*(a*a-Pi*a*a/4-z/2);
                x=a*a-z-y;
                printf("%.3lf %.3lf %.3lf\n",x,y,z);
        }
        return 0;
}

使用特权

评论回复
7
l63t89|  楼主 | 2021-1-28 22:41 | 只看该作者
遇到问题
数学公式都快忘完了。

使用特权

评论回复
8
l63t89|  楼主 | 2021-1-28 22:41 | 只看该作者
C题 Simple division

使用特权

评论回复
9
l63t89|  楼主 | 2021-1-28 22:42 | 只看该作者
思考过程
依旧没听懂,代码直接上网搜的。

使用特权

评论回复
10
l63t89|  楼主 | 2021-1-28 22:42 | 只看该作者
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;

long long save[1001];

int main()
{
        int count;
        while (cin >> save[count=0] && save[count]) {
                count ++;
                while (cin >> save[count] && save[count])
                        count ++;
                       
                sort(save, save+count);
                int s = save[count-1]-save[0];
                for (int i = 1 ; i < count ; ++ i)
                        if (save[i] > save[i-1] && save[i]-save[i-1] < s)
                                s = save[i]-save[i-1];
               
                for (int i = 1 ; i <= s ; ++ i)
                        if (s%i == 0) {
                                int d = s/i,r = (save[0]%d+d)%d,flag = 1;
                                for (int j = 1 ; j < count ; ++ j)
                                        if ((save[j]%d+d)%d != r) {
                                                flag = 0;
                                                break;
                                        }
                                if (flag) {
                                        cout << d << endl;
                                        break;
                                }
                        }
        }
        return 0;
}

使用特权

评论回复
11
l63t89|  楼主 | 2021-1-28 22:46 | 只看该作者
遇到问题
不会做。

使用特权

评论回复
12
l63t89|  楼主 | 2021-1-28 22:47 | 只看该作者
D题 Euclid Problem

使用特权

评论回复
13
l63t89|  楼主 | 2021-1-28 22:47 | 只看该作者
思考过程
求AX+BY=d的题,刚开始没懂,后来上网搜了一下,是欧几里得算法,看完解析后理解了。

使用特权

评论回复
14
l63t89|  楼主 | 2021-1-28 22:48 | 只看该作者
源代码
#include<iostream>
#include<algorithm>
using namespace std;
int exct_gcd(int a,int b,int& x,int& y)
{
        if(!b)
        {
                x=1;
                y=0;
            return a;
    }
         int d=exct_gcd(b,a%b,y,x);
         y-=a/b*x;
         return d;
}
int main(){
        int a,b;
        while(cin>>a>>b)
        {
                int x=0,y=0;
                int d=exct_gcd(a,b,x,y);
                cout<<x<<" "<<y<<" "<<d<<endl;
        }
}

使用特权

评论回复
15
l63t89|  楼主 | 2021-1-28 22:49 | 只看该作者
遇到问题
经验少,没有遇到过此类题型。

使用特权

评论回复
16
l63t89|  楼主 | 2021-1-28 22:50 | 只看该作者
E题 Dead Fraction

使用特权

评论回复
17
l63t89|  楼主 | 2021-1-28 22:50 | 只看该作者

使用特权

评论回复
18
l63t89|  楼主 | 2021-1-28 22:51 | 只看该作者
思考过程
还不会做。

使用特权

评论回复
19
l63t89|  楼主 | 2021-1-28 22:52 | 只看该作者
源代码
#include <cstdio>
#include <iostream>
#include <string>
#define in std::cin
#define out std::cout
#define string std::string
typedef long long ll;
ll z[11] = {1};
string s;
void pre()
{
for (int i = 1; i <= 10; ++i)
{
z[i] = (z[i-1]<<3) + (z[i-1]<<1);
}
}
ll gcd(ll a, ll b)
{
ll c;
while (b)
{
c = a % b;
a = b;
b = c;
} return a;
}
int main()
{
pre();
while ((in >> s) && s.size() > 1)
{
ll num = 0;
ll b = 0;
for (int i = 2; s[i] != '.'; ++i)
{
num = num*10 + s[i]-'0';
b++;
E - Dead Fraction.md 2021/1/20
3 / 3
}
ll minfz = -1;
ll minfm = -1;
ll fz, fm;
for (int i = 1; i <= b; ++i)
{
fz = num - num/z[i];
fm = (z[i]-1) * (z[b-i]);
ll g = gcd(fz, fm)
if (fm/g<minfm || minfm==-1)
{
minfz = fz / g;
minfm = fm / g;
}
}
printf("%lld/%lld\n", minfz, minfm);
}
return 0;
}

使用特权

评论回复
20
l63t89|  楼主 | 2021-1-28 22:54 | 只看该作者
遇到问题
不会做。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

798

帖子

1

粉丝