首届哈尔滨理工大学(荣成)"歌尔创客杯"新生赛(重现赛) 补题回顾

A 会长的烦心事

https://ac.nowcoder.com/acm/contest/3474/A

统计字符串中的相应的字符的个数,然后除以相应的系数求出最小值即可(第一个和最后一个l可以不共用计算最小值)

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    while(cin>>s) {
        int a=0,e=0,l=0,g=0,o=0,u=0,f=0;
        for(int i=0;i<s.length();i++) {
            if(s[i]=='l')
                l++;
            if(s[i]=='e')
                e++;
            if(s[i]=='a')
                a++;
            if(s[i]=='g')
                g++;
            if(s[i]=='u')
                u++;
            if(s[i]=='o')
                o++;
            if(s[i]=='f')
                f++;
        }
        int ans=min(l/2,min(e/2,min(a,min(g,min(u,min(o,f))))));
        printf("%d\n",ans);
    }
    return 0;
}

B 快来秒掉我!

https://ac.nowcoder.com/acm/contest/3474/B

直接输出,注意转义字符\即可

#include<bits/stdc++.h>
using namespace std;
int main() {
    printf("Do you want to play ACM?(yes\\no)");
    return 0;
}

C 素数圆环

https://ac.nowcoder.com/acm/contest/3474/C

直接DFS计算输出即可,或者选择预处理后打表,但是数据太多放弃,直接DFS即可。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=25;
int num[MAXN];
bool vis[MAXN];
set<int> p;
int n;
void DFS(int z) {
    if(z==n) {
        bool flag=true;
        if(!p.count(num[0]+num[n-1]))
            flag=false;
        if(flag) {
            if(num[0]==1) {
                for(int i=0;i<n;i++) {
                    if(i==0)
                        printf("%d",num[i]);
                    else
                        printf(" %d",num[i]);
                }
                printf("\n");
            }
        }
    } else {
        for(int i=1;i<=n;i++) {
            if(!vis[i]) {
                if(z==0) {
                    vis[i]=true;
                    num[z]=i;
                    DFS(z+1);
                    num[z]=0;
                    vis[i]=false;
                } else {
                    if(p.count(i+num[z-1])) {
                        vis[i]=true;
                        num[z]=i;
                        DFS(z+1);
                        num[z]=0;
                        vis[i]=false;
                    }
                }
            }
        }
    }
    return ;
}
int main() {
    p.insert(2),p.insert(3),p.insert(5),p.insert(7);
    p.insert(11),p.insert(13),p.insert(17),p.insert(19);
    p.insert(23),p.insert(29),p.insert(31),p.insert(37);
    p.insert(41),p.insert(43),p.insert(47),p.insert(53);
    int cnt=1;
    while (~scanf("%d",&n)) {
        memset(num,0,sizeof(num));
        memset(vis,false,sizeof(vis));
        printf("Case %d:\n",cnt++);
        if(n%2==1)
            printf("\n");
        else
            DFS(0);
        printf("\n");
    }
    return 0;
}

D 电脑磨损程度

https://ac.nowcoder.com/acm/contest/3474/D

将使用时间按照8小时进行分段计算,每八个小时就进行计算,对于小于等于4小时进行特判。对8求余后剩余的部分直接分成两部分,小于等于4和大于4的部分,小于等于4直接顺着上8个小时继续开机计算,大于的则单独进行计算

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    while(~scanf("%lld",&n)&&n) {
        if(n>=0&&n<=4) {
            printf("10\n");
        } else {
            if(n<=8) {
                printf("%lld\n",10+(n-4)*2);
            } else {
                double ans=0.0;
                ans+=(n/8)*18;
                n%=8;
                if(n==1||n==2||n==3||n==4) {
                    ans+=2.4*n;
                    printf("%.1lf\n",ans);
                }
                else {
                    if(n==5||n==6||n==7)
                        ans+=10+(n-4)*2;
                    printf("%.0lf\n",ans);
                }
            }
        }
    }
    return 0;
}

E ACMer如何拯救小学生

https://ac.nowcoder.com/acm/contest/3474/E

分隔每个单词同时每次只保存其首字母即可

#include<bits/stdc++.h>
using namespace std;
int main() {
    int t;
    while(~scanf("%d",&t)) {
        getchar();
        string s;
        while(t--) {
            getline(cin,s);
            for(int i=0;i<s.length();i++) {
                if(i==0) {
                    if(s[i]>='A'&&s[i]<='Z')
                        printf("%c",s[i]);
                    else
                        printf("%c",s[i]-32);
                } else {
                    if(s[i]==' ') {
                        int j=i;
                        while(s[j]==' ')
                            j++;
                        if(s[j]>='A'&&s[j]<='Z')
                            printf("%c",s[j]);
                        else
                            printf("%c",s[j]-32);
                        i=j;
                    }
                }
            }
            printf("\n");
        }
    }
    return 0;
}

F 当会长和一群手贱的耗子在电梯相遇

https://ac.nowcoder.com/acm/contest/3474/F

计算输入数字的因子数目,数目为奇数说明可以到达,否则无法到达

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    while(~scanf("%lld",&n)&&n) {
        long long ans=0;
        for(long long i=1;i<=sqrt(n);i++) {
            if(n%i==0) {
                if(i*i!=n)
                   ans+=2;
                else
                    ans++;
            }
        }
        if(ans%2==1)
            puts("Goddess,I'm coming~~~");
        else
            puts("Farewell~");
    }
    return 0;
}

G ACMer分奖金

https://ac.nowcoder.com/acm/contest/3474/G

考虑贪心,按照钱币的数值从大到小进行使用即可求出最优解

#include<bits/stdc++.h>
using namespace std;
int main() {
    int t;
    while(~scanf("%d",&t)) {
        while(t--) {
            int n;
            scanf("%d",&n);
            long long ans=0;
            for(int i=0;i<n;i++) {
                int num;
                scanf("%d",&num);
                ans+=num/100;
                num%=100;
                ans+=num/50;
                num%=50;
                ans+=num/20;
                num%=20;
                ans+=num/10;
                num%=10;
                ans+=num/5;
                num%=5;
                ans+=num;
            }
            printf("%lld\n",ans);
        }
    }
    return 0;
}

H 放轻松

https://ac.nowcoder.com/acm/contest/3474/H

直接sort即可

#include<bits/stdc++.h>
using namespace std;
vector<double> num;
int main() {
    int n;
    while(~scanf("%d",&n)) {
        num.resize(n);
        for(int i=0;i<n;i++)
            scanf("%lf",&num[i]);
        sort(num.begin(),num.end());
        for(int i=0;i<n;i++) {
            if(i==0)
                printf("%.2lf",num[i]);
            else
                printf(" %.2lf",num[i]);
        }
        printf("\n");
    }
    return 0;
}

I ACM协会晚会

https://ac.nowcoder.com/acm/contest/3474/I

计算C(N,M)即可求出答案

#include<bits/stdc++.h>
using namespace std;
vector<long long> p;
void init(int n,int m) {
    long long start=1,sum1=n;
    for(int i=0;i<=m;i++) {
        if(i==0)
            p[i]=1;
        else {
            if(i==n)
                p[i]=1;
            else {
                p[i]=p[i-1]*sum1;
                sum1--;
                p[i]/=start;
                start++;
            }
        }
    }
}
int main() {
    int t;
    while(~scanf("%d",&t)) {
        while(t--) {
            int n,m;
            scanf("%d%d",&n,&m);
            if(m>n)
                printf("0\n");
            else {
                p.clear();
                p.resize(n);
                init(n,m);
                printf("%lld\n",p[m]);
            }
        }
    }
    return 0;
}

J 会长爱旅游

https://ac.nowcoder.com/acm/contest/3474/J

每次记录前驱节点,之后每次直接输出前驱节点即可

#include<bits/stdc++.h>
using namespace std;
const int MAXN=100011;
int pre[MAXN];
int main() {
    int m;
    while(~scanf("%d",&m)) {
        memset(pre,0,sizeof(pre));
        int n,s;
        scanf("%d%d",&n,&s);
        pre[s]=-1;
        for(int i=0;i<n-1;i++) {
            int a,b;
            scanf("%d%d",&a,&b);
            pre[b]=a;
        }
        for(int i=1;i<=n;i++) {
            if(i==1)
                printf("%d",pre[i]);
            else
                printf(" %d",pre[i]);
        }
        printf("\n");
    }
    return 0;
}
发布了45 篇原创文章 · 获赞 1 · 访问量 6768

猜你喜欢

转载自blog.csdn.net/Ls_attack/article/details/104061115