2021年5.21NCU第四届校赛

比赛地址:http://222.204.50.106/contest/39

A 树上祖先

链接http://222.204.50.106/contest/39/problem/A

B 莎士比亚

链接http://222.204.50.106/contest/39/problem/B

C 益智游戏

链接http://222.204.50.106/contest/39/problem/C
题意
题解
注意
暴力。。。。以后看见奇偶一定直接输出
代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m,t;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        if(m%2 == 0) puts("No");
        else puts("Yes");
    }
    return 0;
}

D 神奇魔法

链接http://222.204.50.106/contest/39/problem/D

E 我全都要

链接http://222.204.50.106/contest/39/problem/E

F 二零二一

链接http://222.204.50.106/contest/39/problem/F
题意
两个有顺序的数之间差是2021的整数倍的对数
题解
求余数组合一下就好了
注意
代码

#include<bits/stdc++.h>
using namespace std;
long long a[100005],b[4000],vis[4000];
int main()
{
    int n;
    cin>>n;
    long long ans=0;
    memset(b,0,sizeof(b));
    memset(vis,0,sizeof(vis));
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        a[i]%=2021;
        vis[a[i]]=1;
        b[a[i]]++;
    }
    for(int i=0;i<2021;i++)
    {
        if(vis[i])ans+=b[i]*(b[i]-1)/2;
    }
    cout<<ans<<endl;
    return 0;
}

G 小学数学

链接http://222.204.50.106/contest/39/problem/G
题意
从给定中挑出三个点形成的三角形的面积最大值
题解:s=1/2(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)
注意:记得加绝对值
代码

#include<bits/stdc++.h>
using namespace std;
struct node {
    long long x,y;
}data[1000],point1,point2,point3;
struct Node{
    int x,y,z;
}T;
int main()
{
    int n;cin>>n;long long ans=0;
    for(int i=0;i<n;i++)cin>>data[i].x>>data[i].y;
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            for(int k=j+1;k<n;k++)
            {
                long long t=data[i].x*data[j].y+data[j].x*data[k].y+data[k].x*data[i].y-data[i].x*data[k].y-data[j].x*data[i].y-data[k].x*data[j].y;
                t=abs(t);
                if(ans<t){
                    T.x=i;
                    T.y=j;
                    T.z=k;
                    ans=t;
                }
            }

        }
    }
    cout<<T.x<<" "<<T.y<<" "<<T.z<<endl;
    //cout<<ans;
    return 0;
}

H 糖果齁咸

链接http://222.204.50.106/contest/39/problem/H
题意
随机选取几个糖果,每次取最大值和最小值得乘积,求和
题解
一个类似于等比数列的玩意儿,稍微列一下,找规律就行
代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const long long mod=998244353;
int main()
{
    int n;
    ll a[200005];
    cin>>n;ll ans=0,sum=0;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    {
        sum=(sum-a[i-1])*2+a[i-1];
        sum+=a[i];
        sum=(sum%mod+mod)%mod;
        ans+=sum*a[i]%mod;
        ans%=mod;
    }
    cout<<ans;
    return 0;
}

I ZYC as Polizei

链接http://222.204.50.106/contest/39/problem/I
题意:已知距离,坐标,求另一个点坐标
题解
坐标列一下
注意
代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double a,b,c;
    double d1,d2,d3;
    cin>>a>>b>>c>>d1>>d2>>d3;
    double x,y;
    x=(d1*d1-d2*d2+a*a)/(2*a);
    y=(d1*d1-d3*d3+b*b+c*c-2*b*x)/(2*c);
    printf("(%.3lf,%.3lf)",x,y);
    return 0;
}

J 合理内卷

链接http://222.204.50.106/contest/39/problem/J
题意
某个数选择了在它旁边的两个数值就不能选择,找到一个最优的解
题解
DP大法
注意
long long(s数据较大,遇事不决开long long)
代码

#include<bits/stdc++.h>
using namespace std;
long long data[100005],dp[100005];
int main()
{
    long long n,x,maxn=0;
    cin>>n;
    memset(data,0,sizeof(data));
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        dp[x]+=x;
    }
    for(int i=1;i<=n;i++)
    {
        if(i>2)dp[i]+=dp[i-2];
        dp[i]=max(dp[i],dp[i-1]);
        maxn=max(dp[i],maxn);
    }
    cout<<maxn;
    return 0;
}
posted @   Aaryn21  阅读(63)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示