• Jxnu Group Programming Ladder Tournament 2017


    L1-1 这是一道简单题

     

    Problem Description

    大豪哥觉得自己特别的菜,就是个弱鸡,但是大家不承认,所以大豪哥想了一个办法,在学校大屏幕上输出三行“DaHaoGeJiuShiYiGeRuoJi”,这样就可以说明自己是个弱鸡了。可是大豪哥太渣了不会写,你能帮他输出一下吗?

    Input

    本题无输入

    Output

    按题目要求输出

    Sample Output

    DaHaoGeJiuShiYiGeRuoJi
    DaHaoGeJiuShiYiGeRuoJi
    DaHaoGeJiuShiYiGeRuoJi
    

    水题直接过(不过我WA了一次,看题太快只输出一次 555555):
    1 #include <bits/stdc++.h>
    2 #define ll long long
    3 using namespace std;
    4 int main(){
    5     cout << "DaHaoGeJiuShiYiGeRuoJi" << endl;
    6     cout << "DaHaoGeJiuShiYiGeRuoJi" << endl;
    7     cout << "DaHaoGeJiuShiYiGeRuoJi" << endl;
    8     return 0;
    9 }

    L1-2 叶神的字符串

    Problem Description

    众所周知,ACS协会会长叶神学习特别好,算法能力也强,作为一个弱渣的大豪哥特别崇拜叶神,觉得‘Y’‘S’这两个字符特别厉害,所以大豪哥的一个键盘上就只有Y,S两个键,大豪哥用这个键盘打出了一个字符串s,但是他特别的不满意,所以他想改变字符串s中的一个字符(也可以不改变),使得字符串s中可以截取出最大数量的“YS”

    Input

    多组输入至文件结尾。
    每组测试数据输入一串由'Y','S'组成的字符串。(字符串长度最多为10000)

    Output

    输出至多一次修改后最多有多少个“YS”

    Sample Input

    YYYS

    Sample Output

    2

    这题又读错题,WA了一次,看成可以改变多次,其实只可以改变一次。直接遍历看有没有YYY或者SSS就行了。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 int main(){
     5     string s;
     6     while(cin >> s){
     7         int ans = 0, flag = 0;
     8         int len = s.length();
     9         for(int i = 0; i < len-1; i ++){
    10             if(s[i] == 'Y' && s[i+1] == 'S'){
    11                 ans ++;
    12             }
    13         }
    14         for(int i = 0; i < len-2; i ++){
    15             if(s[i] == 'Y' && s[i+1] == 'Y' && s[i+2] =='Y'){
    16                 flag = 1;
    17             }
    18             if(s[i] == 'S' && s[i+1] =='S' && s[i+2] == 'S'){
    19                 flag = 1;
    20             }
    21         }
    22         if(flag) ans++;
    23         cout << ans << endl;
    24     }
    25     return 0;
    26 }

    L1-3 成绩排名

    Problem Description

    每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差。所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名。(PS:大豪哥班上有个学霸名叫日天,又名泰迪,不要问我为什么,因为泰迪的行为决定的)

    Input

    多组测试数据,至文件结尾。
    先输入每个班上有n个同学,这个学期有m门课程(1<=n,m<=100)
    接下来有n行,每行的输入格式为学号id,姓名name,课程成绩k1,课程成绩k2... ,课程成绩km.(学号在int型范围以内,0<=ki<=100,姓名长度在20个字符以下)

    Output

    输出班上每个同学排名,并输出总分及排名(如果总分相同就按学号从小到大输出,但是排名还是相同的)输出格式见样例

    Sample Input

    4 4
    1 Taidi 100 100 90 90
    2 Dahaoge 60 60 70 60
    3 Yeshen 90 90 100 100
    4 Wangpangzi 50 60 100 80
    

    Sample Output

    1 Taidi 100 100 90 90 Sum = 380 Ranking = 1
    3 Yeshen 90 90 100 100 Sum = 380 Ranking = 1
    4 Wangpangzi 50 60 100 80 Sum = 290 Ranking = 3
    2 Dahaoge 60 60 70 60 Sum = 250 Ranking = 4


    完全考察写代码能力,不过也WA了一次,没看清(如果总分相同就按学号从小到大输出)这句话,一开始没找出问题所在就直接做后面的题目了,最后回来做时才注意到,然后把
    1 return a.sum > b.sum;

    改成:

    1 if(a.sum != b.sum) return a.sum > b.sum;
    2      else return a.id < b.id;

    就AC了。

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 struct Nod{
     5     int id;
     6     char s[25];
     7     int k[110];
     8     int sum;
     9     int flag;
    10 };
    11 int n,m;
    12 bool cmp(Nod a, Nod b){
    13     if(a.sum != b.sum) return a.sum > b.sum;
    14     else return a.id < b.id;
    15 }
    16 int main(){
    17     while(~scanf("%d%d",&n,&m)){
    18         Nod nod[n+1];
    19         for(int i = 0; i < n; i ++){
    20             scanf("%d%s",&nod[i].id ,nod[i].s);
    21             nod[i].sum = 0;
    22             for(int j = 0; j < m; j ++){
    23                 scanf("%d",&nod[i].k[j]);
    24                 nod[i].sum += nod[i].k[j];
    25             }
    26         }
    27         sort(nod, nod+n,cmp);
    28         nod[0].flag = 1;
    29         for(int i = 1; i < n; i ++){
    30             if(nod[i].sum == nod[i-1].sum){
    31                 nod[i].flag = nod[i-1].flag;
    32             }else{
    33                 nod[i].flag = i + 1;
    34             }
    35         }
    36         for(int i = 0; i < n; i ++){
    37             printf("%d %s ",nod[i].id,nod[i].s);
    38             for(int j = 0; j < m; j ++){
    39                 printf("%d ",nod[i].k[j]);
    40             }
    41             printf("Sum = %d Ranking = %d
    ",nod[i].sum,nod[i].flag);
    42 
    43         }
    44     }
    45     return 0;
    46 }

    L1-4 王胖子买零食

    Problem Description

    大豪哥有个好朋友叫王胖子,众所周知王胖子特别爱吃零食,比如各种不一样的糖果,辣条呀,可是王胖子每个月用在买零食上的钱不是固定的,但是因为王胖子特别爱吃零食,他希望把自己能花在买吃的钱全部用掉,来换得最多的零食

    Input

    先输入王胖子有n块钱可以用来买吃的,商场里有m件零食(0<=n,m<=1000)
    接下来有m行,每行包括这件零食的单价(元/kg),以及商场有多少kg这种商品
    所有输入数据都在int型范围内

    Output

    输出王胖子最多可以有多少零食(保存4位小数)

    Sample Input

    100 4
    10 9
    5 4
    8 5
    20 50
    

    Sample Output

    13.0000
    简单的贪心问题,每次跳单价最小的拿就行了。
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 struct Nod{
     5     int p, w;
     6 }nod[1010];
     7 bool cmp(Nod a, Nod b){
     8     return a.p < b.p;
     9 }
    10 int main(){
    11     int n, m;
    12     while(~scanf("%d%d",&n,&m)){
    13         for(int i = 0; i < m; i ++){
    14             cin >> nod[i].p >> nod[i].w;
    15         }
    16         double sum = 0;
    17         sort(nod,nod+m,cmp);
    18         for(int i = 0; i < m; i ++){
    19             //  cout << n << ' ' << nod[i].p << endl;
    20             //  cout << sum << endl;
    21             if(nod[i].p*nod[i].w <= n){
    22                 sum += nod[i].w;
    23                 n = n - nod[i].p*nod[i].w;
    24             }else{
    25                 sum += n*1.0/nod[i].p*1.0;
    26                 break;
    27             }
    28         }
    29         printf("%.4lf
    ",sum);
    30     }
    31     return 0;
    32 }

    L1-5 Dada的游戏

    Problem Description

    Dada无聊时,喜欢做一个游戏,将很多钱分成若干堆排成一列,每堆钱数不固定,谁能找出每堆钱数严格递增的最长区间,谁就是人生赢家了。Dada可能脑子里的水还没干,她找不出来,你来帮她找找吧。

    Input

    多组输入,至文件结尾。
    对于每组数据:
    第一行包含一个正整数n(1<=n<=100000),一共有n堆钱。
    第二行输入n个正整数a1,a2,...,an (1<=ai<=1000000000),代表每一堆的钱数
    大量输入,请使用scanf。

    Output

    打印严格递增的最长区间的长度

    Sample Input

    5
    1 7 2 11 15
    6
    100 100 100 100 100 100
    3
    1 2 3
    

    Sample Output

    3
    1
    3

    找递增区间最大的就行。
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N = 1e5+10;
     5 int a[N];
     6 int main(){
     7     int n;
     8     while(~scanf("%d",&n)){
     9         memset(a,0,sizeof(a));
    10         scanf("
    %d",&a[0]);
    11         for(int i = 1; i < n; i ++){
    12             scanf("%d",&a[i]);
    13         }
    14         int maxn = 1, ans = 1;
    15         for(int i = 0; i < n; i ++){
    16             if(a[i] < a[i+1]){
    17                 ans++;
    18             }else{
    19                 if(ans > maxn){
    20                     maxn = ans;
    21                 }
    22                 ans = 1;
    23             }
    24         }
    25         printf("%d
    ",maxn);
    26     }
    27     return 0;
    28 }

    L1-6 安装网线

    Problem Description

    副会长熊大佬的寝室要安装一条网线,可是网线的必经之路被一堵墙挡住了,墙有n层砖头,每一层有ki块砖块组成,总宽度固定。

    墙的俯视图
    熊大佬发现,可以从砖头的缝隙中传过去,但不幸的是,熊大佬的网线是高贵的超七类土豪金网线,无法在缝隙中弯折,所以对于无法笔直穿过的砖块只能用电钻钻出一个洞。现在熊大佬想问,为了让网线穿过这堵墙,最少需要钻开多少块钻块(不能从墙的左右边缘穿过,那样答案总是0就不好玩了)。

    Input

    输入有多组数据,直到文件结尾。
    每组数据首行为一个正整数n,表示墙的层数。
    之后n行,每行第一个数字ki表示这层的砖块数,之后有ki个正整数表示这层每块砖块的宽度。
    砖块总长度不超过INT_MAX/1000。
    每块砖块的宽度范围[1,10000],墙的层数范围[1,10000]。
    墙的宽度不会超过int范围。
    大量输入,请使用scanf。
    题目输入保证每层的砖块宽度和是相等的。

    Output

    每组数据输出一个整数,表示最少需要用电钻钻多少块砖头。

    Sample Input

    6
    4 1 2 2 1
    3 3 1 2
    3 1 3 2
    2 2 4
    3 3 1 2
    4 1 3 1 1
    

    Sample Output

    2

    这题看成求和就行,每行输入一个数,就把它和前面的数相加,放在map里,最后要把总和去掉。然后找里面出现次数最大的,在把n减去它就行了。
     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 int n, m;
     5 map<int,int> mp;
     6 int main(){
     7     while(~scanf("%d",&n)){
     8         mp.clear();
     9         int k;
    10         for(int i = 0; i < n; i ++){
    11             int tmp, sum = 0;
    12             scanf("%d",&m);
    13             for(int i = 0 ; i < m; i ++){
    14                 scanf("%d",&tmp);
    15                 sum+=tmp;
    16                 mp[sum] ++;
    17             }
    18             k = sum;
    19         }
    20         mp.erase(k);
    21         map<int,int>::iterator it = mp.begin();
    22         // for(; it != mp.end(); ++ it){
    23         //     cout << (*it).first << ' ' << (*it).second<<endl;
    24         // }
    25         // it = mp.begin();
    26         int maxn = (*it).second;
    27         it++;
    28         for(; it != mp.end(); ++it){
    29             int ans = (*it).second;
    30             if( ans > maxn ){
    31                 maxn = (*it).second;
    32             }
    33         }
    34         printf("%d
    ",n - maxn);
    35     }
    36     return 0;
    37 }

    L2-1 N!

    Problem Description

    输出N的阶乘。(注意时间限制150ms&&注意不能打表后输出,赛后我们会检查代码,如有发现,该位同学总分记0分处理)

    打表的定义:在本地主机预先计算出了每个值对应的答案,并把输入和输出的映射直接写入所提交的代码。

    Input

    多组输入到文件结尾
    每组输入一个整数n,(0<=n<=23)。

    Output

    每组测试数据输出一行,为n!。

    Sample Input

    1
    2
    

    Sample Output

    1
    2

    这题我算没做出来,,因为我打表了,从网上看到一个好理解的题解,就是把它看成万进制,其实就是大数乘以小数的计算。
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 1e4;
     4 void factorial(int n){
     5     int a[N];
     6     a[0] = 1;
     7     int res = 0;
     8     for(int i = 1; i <= n; i ++){
     9         int flag = 0;
    10         for(int j = 0; j <= res; j ++){
    11             a[j] = a[j]*i + flag;
    12             flag = a[j]/10000;
    13             a[j]%=10000;
    14         }
    15         if(flag > 0){
    16             a[++res] = flag;
    17         }
    18     }
    19     cout << a[res];
    20     for(int i = res-1; i >= 0; i--){
    21         cout << setw(4) << setfill('0') << a[i];
    22     }
    23     cout << endl;
    24 }
    25 int main(){
    26     int n;
    27     while(~scanf("%d",&n)){
    28         factorial(n);
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    Java API之时间、异常和集合
    JAVA API 之包装类、数学类和 Calendar 类
    regular expression ---正则表达式 --- REGEX 的一些补充
    正则表达式
    JavaScript 的一些应用场景分析
    JavaScript 简介
    ERROR internal error: process exited while connecting to monitor
    常用服务默认端口号
    shell笔记
    php登录注册
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6804287.html
Copyright © 2020-2023  润新知