这是牛客IOI周赛22-普及组的一道题
原题链接:
https://ac.nowcoder.com/acm/contest/11038/B
这是我比赛期间唯一会做的一道题,并且当我a完这题的时候大佬都将4道题a完了。这狠是打击我,但是还好没爆零。好了废话不多说,先上题解。
#include<bits/stdc++.h>
using namespace std;
struct nation{
int v,id;
bool operator<(const nation & m)const{return v<m.v;}
}na[800520];
int n;
int main(void){
cin>>n;
for(int i=1;i<=n;++i){
cin>>na[i].v;
na[i].id=i;
}
sort(na+1,na+1+n);
int ans=1;
for(int i=n-1;i>=1;i--){
if(na[i].id<na[i+1].id)ans++;
}
cout<<ans<<endl;
return 0;
}
这道题的难度并不大,并且要会的东西也不多–只有俩项
sort函数和结构体;
先说结构体的用法:
1先声明后定义
struct 结构体名
{
成员列表
};//最后的分号不可丢
struct 结构体名 变量名;
//2声明与定义同时进行
struct student
{
int num;
char name[20];
int age;
char sex;
float score;
}stu1,stu2;
要用结构体也是因为这题有俩个相关联的数:我们给每个国家两个属性,一个是战斗力大小,一个是位置序号
struct nation{
int v,id;
bool operator<(const nation & m)const{return v<m.v;}
}na[800520];
接下来就是sort函数了
sort有三个参数,第三个参数不写时,默认按照升序排列,如果想按降序排序,需要我们写一个返回值为布尔类型的排序函数
第一个参数:数组名,也就是数组首地址
第二个参数:一般形式为“数组名+n”,其中n是从数组首地址开始,排序的数字元素的个数
sort的前两个参数相当于是确定一个你想要排序的元素的地址所在的区间
排序的最后一个元素的地址,而是进行排序的最后一个元素的后一个元素的地址
要用sort需要头文件: #include<algorithm>
重点我发现一个c++的宝藏头文件:#include<bits/stdc++.h>
这个头文件包含c++中大部分头文件,我们就不用记其他的头文件了