ACM之旅————第一天

最近两天看了一些算法入门,笔者今年大二,刚刚入门ACM(大一连电脑基础操作都不熟,所以没有勇气报名训练)。 在第一天超级简单的热身赛中学会使用C++的STL类库中algorithm   ,体会到内置类库的舒适,欣赏完它的标准写法后,不再重写,直接使用。以下是我第一天关于此的运用:

三人行必有我师焉 : 也就是三个数比较大小

#include <iostream>
#include <algorithm>

using namespace std;

int main(){	
   int a[3];
   for(int i=0;i<3;i++){
   	cin>>a[i];
   }
   **sort(a,a+3);**	
   cout<<a[2]<<endl;
   return 0;
}

丢失的数字

给你m个1到n之间的整数,你能找出1到n中的哪些整数没有出现吗?

输入
第一行2个整数n,m,直接用空格分隔(1 <= n <= 100000, m < n),表示有m个1到n之间的整数。
接下来m行,每行一个整数ai(1 <= ai <=n,数据保证m个数都不相同)。

输出
每行1个数,从小到大输出输入数据中没有出现过的1到n中的整数。

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
const int MAX_N=100000;
static int a[MAX_N];//数组太大要设置为静态的,否则会出问题的(我昨晚亲身经历,想了很久才找到这个错误)

int main()
{
	//实现输入
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>a[i];
    }
    //将输入的数从小到大排序
	**sort(a,a+m);**
	//遍历1~n,排除掉在a数组里的就是没有出现过的了
    for(int i=1;i<=n;i++){
    //二分查找
        if(**binary_search(a,a+m,i)**){
            continue;
        }else{
            cout<<i<<endl;
        }
    }
    return 0;
}

小明种苹果

小明在他的果园里种了一些苹果树,为了保证苹果的品质,在种植过程中要进行若干轮蔬果操作,也就是提前从树上把不好的苹果去掉。第一轮蔬果操作开始前,小明记录了每棵树上苹果的个数。每轮蔬果操作时,小明都记录了从每棵果树上去掉的苹果个数。在最后一轮蔬果操作结束后,请帮助小明统计相关的信息。

输入:第一行含两个正整数N和M,分别表示苹果树的棵数和蔬果操作的轮数。
第1+i行(1≤i≤N),每行包含M+1个整数ai0,ai1,…aiM。其中ai0为正整数,表示第一轮蔬果操作开始前第i棵树上苹果的个数。aij(1≤j≤M)为0或负整数,表示第j轮蔬果操作时从第i棵树上去掉的苹果个数。如果为零,表示没有去掉苹果;如果为负,其绝对值为去掉的苹果个数。每行中相邻两个数之间用一个空格分隔。
输出:输出只有一行,包含三个整数T、k和P。其中

·T为最后U一轮蔬果操作后所有苹果树上剩下的苹果总数(假设苹果不会因为其他原因减少);

·k为蔬果个数(也就是蔬果操作去掉的苹果个数)最多的苹果树编号(如有并列,输出满足条件的最小编号);

·P为该苹果树的蔬果个数。

相邻两个数之间用一个空格分隔。输入数据保证是正确的,也就是说,每棵树在全部蔬果操作结束后剩下的苹果个数是非负的

#include <iostream>
#include <math.h>
#include <cstdio>
#include <algorithm>

using namespace std;
int main()
{
    int N,M;
    cin>>N>>M;
    int a[N][M+1];
    int count[N]={0};
    int T=0;
    int K=0;
    int P=0;
    for(int i=1;i<=N;i++){
        for(int j=0;j<=M;j++){
            cin>>a[i-1][j];
        }
    }
     for(int i=1;i<=N;i++){
        for(int j=0;j<=M;j++){
            if(j>0){
                count[i-1]+=abs(a[i-1][j]);
            }
            T+=a[i-1][j];
        }
    }
    //数组中的最大值
    P=***max_element(count,count+N)**;
    for(int i=0;i<N;i++){
        if(count[i]==P){
            K=i+1;
            break;
        }
    }
    cout<<T<<" "<<K<<" "<<P<<endl;
    return 0;
}

足球

小明非常喜欢足球。一天,他在观看足球比赛时,在一张纸上写下了球员的当前位置。为了简化这种情况,他将其描述为由0和1组成的字符串。0代表主队的球员,1代表客队的球员。如果某个球队中至少有7名队员并排站立,那么这种情况就很危险。例如,情况00100110111111101很危险,而情况11110111011101则不是。现在小明记录了某一时刻的球员位置情况,请聪明的你帮他确定是否危险。
输入:仅一行,包含一个由字符“ 0”和“ 1”组成的非空字符串,代表玩家。字符串的长度不能超过100个字符。每个球队中至少有一名球员在场。
输出:如果情况很危险,请输出YES,否则输出NO。

#include <iostream>
#include <string>
#include <cstdio>

using namespace std;
int main()
{
    string str;
    cin>>str;
    //c++的string内置的find函数
    if((str.find("1111111",0)!=str.npos)||(str.find("0000000",0)!=str.npos)){
            puts("YES");
    }else{
		puts("NO");
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值