最近两天看了一些算法入门,笔者今年大二,刚刚入门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;
}