2019寒假训练赛10解题报告

A - Bungee Jumping POJ - 2463

题意:有一个人要用一段绳子来跳楼,现在给你绳子的弹性系数、绳子的长度、楼的高度和人的质量,根据物理知识判断这个人是会摔死、还是安全着陆、还是被挂在半空(如果下落速度超过10m/s就会摔死、重力势能小于到达地面的弹性势能会被挂在半空中)。

题解:初中物理

重力势能:m * g * h

弹性势能:0.5 * k * x ^ 2

动能: 0.5 *m * v^2

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    double k,l,h,m;
    while(scanf("%lf%lf%lf%lf",&k,&l,&h,&m)!=EOF)
    {
        if(k==0&&l==0&&h==0&&m==0) break;
        double g=9.81;
        double v;
        if(l>=h)
        {
            v=sqrt(2*g*h);
            if(v>10) printf("Killed by the impact.\n");
            else printf("James Bond survives.\n");
        }
        else
        {
            v=sqrt((m*g*h-0.5*k*(h-l)*(h-l))*2/m);
            if(m*g*h<0.5*k*(h-l)*(h-l))
            {
                printf("Stuck in the air.\n");
            }
            else
            {
                if(v>10) printf("Killed by the impact.\n");
                else printf("James Bond survives.\n");
            }
        }
    }
    return 0;
}

B - The Average POJ - 2833

题意:给你n个数,让你去掉前n1大的数和前n2小的数,求剩余数的平均值。

题解:n1和n2很小,用两个优先队列维护即可。

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
priority_queue<long long>q1;
priority_queue<long long>q2;
int main()
{
    int n1,n2,n;
    while(scanf("%d%d%d",&n1,&n2,&n)!=EOF)
    {

        if(n1==0&&n2==0&&n==0) break;
        long long sum=0;
        for(int i=1;i<=n;i++)
        {
            long long x;
            scanf("%lld",&x);
            sum+=x;
            if(q1.size()<n1) q1.push(-x);
            if(q2.size()<n2) q2.push(x);
            if(q1.size()==n1&&x>-q1.top())
            {
                q1.pop();
                q1.push(-x);
            }
            if(q2.size()==n2&&x<q2.top())
            {
                q2.pop();
                q2.push(x);
            }
        }
        while(!q1.empty())
        {
            sum-=-q1.top();
            q1.pop();
        }
        while(!q2.empty())
        {
            sum-=q2.top(); q2.pop();
        }
        printf("%.6f\n",(sum*1.0)/(n-n1-n2));

    }
}

C - The Embarrassed Cryptographer HDU - 2303

题意:给你一个超级大的数a和一个100万以下的数b,求a所有素数因子中最小的是否大于b,有就输出bad和这个素数,不然就输出good。

题解:先筛素数,再大整数取模(口胡)。

D - Safecracker HDU - 1015

题意:大写字母A、B、C…Z分别表示正整数1、2、3…26,给出正整数target和一些大写字母,求解满足v - w^2 + x^3 - y^4 + z^5 = target,按最大字典序输出。

题解:5层循环枚举

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[29];
int cmp(int aa,int bb)
{
    return aa>bb;
}
int main()
{
    int n;
    string s;
    while(cin>>n>>s)
    {
        if(n==0&&s=="END") break;
        int l=s.length();
        for(int i=0;i<l;i++)
        {
            a[i]=s[i]-'A'+1;
        }
        sort(a,a+l,cmp);
        bool flag=0;
        for(int i=0;i<l;i++)
        {
            for(int j=0;j<l;j++)
            {
                if(i!=j)
                {
                    for(int k=0;k<l;k++)
                    {
                        if(i!=k&&j!=k)
                        {
                            for(int q=0;q<l;q++)
                            {
                                if(i!=q&&j!=q&&k!=q)
                                {
                                    for(int p=0;p<l;p++)
                                    {
                                        if(i!=p&&j!=p&&k!=p&&q!=p)
                                        {
                                            if(a[i]-a[j]*a[j]+a[k]*a[k]*a[k]-a[q]*a[q]*a[q]*a[q]+a[p]*a[p]*a[p]*a[p]*a[p]==n)
                                            {
                                                flag=1;
                                                printf("%c%c%c%c%c\n",a[i]+'A'-1,a[j]+'A'-1,a[k]+'A'-1,a[q]+'A'-1,a[p]+'A'-1);
                                                break;
                                            }
                                        }
                                    }
                                }
                                if(flag) break;
                            }
                        }
                        if(flag) break;
                    }
                }
                if(flag) break;
            }
            if(flag) break;
        }
        if(!flag)
        {
            printf("no solution\n");
        }
    }
}

E - Big Number HDU - 1018

题意:求n!的位数。

题解:求一个数的位数即对这个数取log10,而log(n*m)=logn+logm,所以求阶乘的位数即从1到n取log10再求和即可。

AC版:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int x;
        scanf("%d",&x);
        double sum=0;
        for(int i=1;i<=x;i++)
        {
            sum+=log10(i);
        }
        int ans=(int)sum+1;
        printf("%d\n",ans);
    }
}

MLE版:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a[10000000+10];
int main()
{
    double ans=0;
    for(int i=1;i<=10000000;i++)
    {
        ans+=log10(i);
        a[i]=(int)ans+1;
    }
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int x;
        scanf("%d",&x);
        printf("%d\n",a[x]);
    }
}

F - Train Problem II HDU - 1023

题意:火车按一定顺序进站,问出站3顺序有几种?

题解:卡特兰数

G - Prime Friend HDU - 3823

题意:已知两个数a,b,求一个最小的数c,使得a+c和b+c均为素数,并且它们之间没有素数。

题解:筛素数再比对

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=20000000+10;
bool isprime[maxn];
int prime[maxn];
bool vis[200];
int main()
{
    memset(isprime,1,sizeof(isprime));
    isprime[0]=isprime[1]=0;
    int m=0;
    for(int i=2;i<maxn;i++)
    {
        if(isprime[i])
        {
            prime[++m]=i;
            for(int j=i+i;j<maxn;j+=i)
            {
                isprime[j]=0;
            }
        }
    }
    for(int i=2;i<=m;i++)
    {
        if(prime[i]-prime[i-1]<150)
        {
            vis[prime[i]-prime[i-1]]=1;
        }
    }
    int t;
    scanf("%d",&t);
    for(int k=1;k<=t;k++)
    {

        int a,b;
        scanf("%d%d",&a,&b);
        if(a>b)
        {
            swap(a,b);
        }
        int ans=-1;
        printf("Case %d: ",k);
        if(!vis[b-a]||a==b)
        {
            printf("-1\n");
        }
        else
        {
            for(int i=2;i<=m;i++)
            {
                if(prime[i]-prime[i-1]==b-a&&a<=prime[i-1])
                {
                    ans=prime[i-1]-a;
                    break;
                }
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}

H - Number Sequence POJ - 1019

题意:有1串数字呈现112123123412345…这样的规律,问你第n个数字是多少?

题解:

I - Train Problem I HDU - 1022

题意:给你一列火车的进站顺序和出站顺序,问你能否实现。

题解:模拟

#include<cstdio>
#include<stack>
using namespace std;
stack<char>s;
int main()
{
    int n;
    string s1,s2;
    while(cin>>n>>s1>>s2)
    {
        while(!s.empty()) s.pop();
        int now=0;
        for(int i=0;i<n;i++)
        {
            s.push(s1[i]);
            while(!s.empty()&&s.top()==s2[now])
            {
                s.pop();
                now++;
            }
        }
        if(!s.empty())
        {
            printf("No.\n");
            printf("FINISH\n");
        }
        else
        {
            printf("Yes.\n");
            now=0;
            for(int i=0;i<n;i++)
            {
                s.push(s1[i]);
                printf("in\n");
                while(!s.empty()&&s.top()==s2[now])
                {
                    s.pop();
                    now++;
                    printf("out\n");
                }
            }
            printf("FINISH\n");
        }
    }
}

J - Anagrams by Stack HDU - 1515

题意:给你一段序列A和序列B,让你用栈模拟使序列A转换成序列B,输出所有可能方法(i表示入栈,o表示出栈)。

题解:dfs

#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
stack<int>s;
string s1,s2;
int len1,len2;
int ans[1005];
void dfs(int now1,int now2,int k)
{
    if(now2==len2)
    {
        for(int i=0;i<k;i++)
        {
            if(ans[i]==0)
            {
                printf("o ");
            }
            else
            {
                printf("i ");
            }
        }
        printf("\n");
    }
    if(now1<len1)
    {
        s.push(s1[now1]);
        ans[k]=1;
        dfs(now1+1,now2,k+1);
        s.pop();
    }
    if(!s.empty()&&s.top()==s2[now2])
    {
        int hh=s.top(); s.pop();
        ans[k]=0;
        dfs(now1,now2+1,k+1);
        s.push(hh);
    }
}
int main()
{

    while(cin>>s1>>s2)
    {
        len1=s1.length(),len2=s2.length();
        cout<<'['<<endl;
        dfs(0,0,0);
        cout<<']'<<endl;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值