zoukankan      html  css  js  c++  java
  • 牛客小白月赛10

    小白劝退赛。

    A.勘测

    题目描述

    Actci偶然发现了一个矿洞,这个矿洞的结构类似与一棵二叉树,Actci发现的矿洞恰好位于根节点处,为了尽快挖掘,Actci找来了她的小伙伴们来帮忙,由于地质原因,每天小伙伴们只能打通到一条到子节点的道路(不消耗时间),也就是说每天一个节点只能向一个子节点建设道路,走一条路需要一天的时间,当发现一条道路后,会有一部分小伙伴选择留下来继续勘测,假设小伙伴们有无数个,树的深度足够大,问第n天最多共建设几条道路。

    输入描述:

    一行,一个数n。

    输出描述:

    一行,一个数表示最多建设的道路数,答案对 10000000007 取模。
    示例1

    输入

    2

    输出

    3

    说明

    样例解释:
    设n号点的子节点编号为n×2和n×2+1,根节点编号为1.
    第一天1->2,在1,2处留有一部分人,道路数为1。
    第二天1->3,2->4,在2,3,4处留有人,道路数为3.
    示例2

    输入

    100

    输出

    6531708670

    备注:

    数据范围:
    对于100%的数据保证 n≤5×10^6。

    解题思路:找规律-->斐波那契数列。注意题目的空间限制,刚开始开两个数组,然后就一直提示编译错误,最后改用几个变量搓搓公式即可。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const LL mod=10000000007;
     5 LL ans,pre1,pre2,now;int n;
     6 int main(){
     7     while(cin>>n){
     8         ans=1,pre1=1,pre2=1;
     9         for(int i=2;i<=n;++i){
    10             now=(pre1+pre2)%mod;
    11             ans=(ans+now)%mod;
    12             pre1=pre2,pre2=now;
    13         }
    14         cout<<ans<<endl;
    15     }
    16     return 0;
    17 }

    B.数学

    题目描述

    某年某月某天的数学课上,Actci正在遨游宇宙呢,对于他的屡教不改,她的数学老师决定难为一下Actci,将他叫醒。
    “咳咳,我现在给出一个数a(0a10^10000),判断a是否是3,5,8,11中某些数的的倍数,你只有一秒钟的时间,答不上来的话,呵,%#W$%@#$@...”。
    作为他后桌的你怎么能看着Actci“受害”呢,于是你决定帮帮他。

    输入描述:

    一行,一个数 a。

    输出描述:

    两行。
    第一行输出 Yes 或 No,表示这个数是否是这四个数中一个或几个数的倍数。
    第二行,a是哪些数的倍数,每个数用空格隔开(顺序从小到大),若第一行为 No 则不用输出。
    示例1

    输入

    123456789

    输出

    Yes
    3
    示例2

    输入

    2341232402462055420

    输出

    Yes
    3 5
    示例3

    输入

    9741427

    输出

    No

    解题思路:常规做法,只需单独验证4个数字即可,水过。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const int maxn=10005;
     5 string str;bool flag,f[5];int ans,mou[4]={3,5,8,11},arr[maxn],siz;vector<int> vec;
     6 int main(){
     7     while(cin>>str){
     8         memset(f,false,sizeof(f)),flag=false;vec.clear();
     9         for(int i=0;str[i];++i)arr[i]=str[i]-'0';
    10         for(int j=0;j<4;++j){
    11             ans=0;
    12             for(int i=0;str[i];++i)ans=(ans*10+arr[i])%mou[j];
    13             if(!ans)flag=true,f[j]=true;
    14         }
    15         if(!flag){puts("No");continue;}
    16         puts("Yes");
    17         for(int i=0;i<4;++i)
    18             if(f[i])vec.push_back(mou[i]);
    19         siz=vec.size();
    20         for(int i=0;i<siz;++i)
    21             cout<<vec[i]<<(i==siz-1?'
    ':' ');
    22     }
    23     return 0;
    24 }

    C.约数

    题目描述

    Actci上课睡了一觉,下课屁颠屁颠的去找数学老师补课,问了老师一个题目:
        给出两个数a,b,问a和b的全部公约数是什么?
    数学老师一看这道题太简单了,不屑回答,于是就交给了你。

    输入描述:

    一行两个数a,b.

    输出描述:

    a和b的全部公约数,每个数字之间空格隔开。
    示例1

    输入

    25 37

    输出

    1
    示例2

    输入

    25 100

    输出

    1 5 25

    备注:

    对于100%的数据,1 ≤ a,b ≤ 10^13

    解题思路:先用sqrt(a)(a<=b)的时间求出a的所有因子,然后枚举其所有因子,看是否为b的因子即可。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 LL a,b;vector<LL> vec1,vec2;int szt;
     5 int main(){
     6     while(cin>>a>>b){
     7         if(a>b)swap(a,b);
     8         vec1.clear(),vec2.clear();
     9         for(LL i=1;i*i<=a;++i){
    10             if(i*i==a)vec1.push_back(i);
    11             else if(a%i==0)vec1.push_back(i),vec1.push_back(a/i);
    12         }
    13         for(size_t i=0;i<vec1.size();++i)
    14             if(b%vec1[i]==0)vec2.push_back(vec1[i]);
    15         sort(vec2.begin(),vec2.end()),szt=vec2.size();
    16         for(int i=0;i<szt;++i)
    17             cout<<vec2[i]<<(i==szt-1?'
    ':' ');
    18     }
    19     return 0;
    20 }

    D.饥饿

    题目描述

    夕阳西下,匆匆忙忙间,SSJ一天的课程已经全部上完了,肚子咕咕开始叫了,坐上回家的公交车,可是SSJ今天好像有点迷,据说今中午吃饭时没去食堂,走着走着,外边景色好美啊,啊?我好像没走过这,完了,我好想迷路了。
    公交车到了终点站,SSJ下车了,内心无比紧张,回不去了,一阵冷风吹过,瑟瑟发抖,emm...,那是一张地图?地图上有啥大家都明白,SSJ现在已经饿得无力思考了,请你帮他设计一条最快回家的路下,他要快点回家吃xxx。

    输入描述:

    第一行四个数n,m,s,t。(分别表示有地图上n个地点,m条道路,SSJ在s处,他家在t处)第2-m+1三个正整数,f,u(某条路起点),v(到达点),w(路径距离)。(f为1或0,0表示这条道路上有恶狗拦路,SSJ已无力与恶狗打斗了,所以他要避开这些道路,1表示此条道路无危险)。

    输出描述:

    第一行一个数表示最短路径长度,若无法回家输出“My gold!!!”(无引号)若可以回家.
    示例1

    输入

    5 7 1 5
    0 1 4 4
    1 1 3 2
    1 1 5 7
    1 2 5 10
    0 2 3 1
    1 3 5 2
    1 4 3 7

    输出

    4

    备注:

    n≤10000,m≤200000,w≤5000000
    解题思路:最短路,vector建边存图,套个堆优化的迪杰斯特拉算法模板即可。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const LL inf=1e18+5;
     5 const int maxn=10005;
     6 int n,m,s,t,f,u,v,x,y,z;vector<int> v1[maxn];vector<LL> v2[maxn];bool vis[maxn];LL w,dis[maxn];
     7 priority_queue< pair<LL,int> > que;
     8 void Dijkstra(){
     9     while(!que.empty())que.pop();
    10     memset(vis,false,sizeof(vis));
    11     dis[s]=0;que.push(make_pair(-dis[s],s));
    12     while(!que.empty()){
    13         x=que.top().second;que.pop();
    14         if(vis[x])continue;
    15         vis[x]=true;
    16         for(size_t j=0;j<v1[x].size();++j){
    17             y=v1[x][j],z=v2[x][j];
    18             if(!vis[y]&&(dis[x]+z<dis[y]))dis[y]=dis[x]+z,que.push(make_pair(-dis[y],y));
    19         }
    20     }
    21 }
    22 int main(){
    23     while(~scanf("%d%d%d%d",&n,&m,&s,&t)){
    24         for(int i=0;i<=n;++i)v1[i].clear(),v2[i].clear();
    25         for(int i=0;i<=n;++i)dis[i]=inf;
    26         while(m--){
    27             scanf("%d%d%d%lld",&f,&u,&v,&w);
    28             if(!f)continue;
    29             v1[u].push_back(v);///建图:双向边
    30             v2[u].push_back(w);
    31             v1[v].push_back(u);
    32             v2[v].push_back(w);
    33         }
    34         Dijkstra();
    35         if(dis[t]==inf)puts("My gold!!!");
    36         else printf("%lld
    ",dis[t]);
    37     }
    38     return 0;
    39 }
    
    
  • 相关阅读:
    单元测试练习
    对软件的看法
    个人最终总结
    论文笔记--Fast RCNN
    个人最终总结2
    结对编程--基于android平台的黄金点游戏(2.0版本)
    结对编程--基于android平台的黄金点游戏
    团队作业(一)
    [java]wordcount程序
    第三周作业(二)
  • 原文地址:https://www.cnblogs.com/acgoto/p/10163125.html
Copyright © 2011-2022 走看看