题目:拼数
for(int i = 0; i < n; i++)
cin >> a[i]; 注意:cin可以实现a[1]里放一个字符串这种。数组并不是a[1]里只能放一个数
注意cin输入时 空格不放入数组(字符串中)所以数据行输入时用cin
排序注意
bool cmp (string a, string b){ //从大到小字典序排序
return a + b > b + a; //注意体会这个技巧
}
sort(a, a + n, cmp); //从大到小字典序排序
sort 函数的写法sort(nums+1, nums+1+n); 详情见下方代码块
数组可以理解为:从num数组标号1到n
sort 注意 包括前面 不包括后面
#include<bits/stdc++.h>
using namespace std;
int nums[200010];
int main() {
int n; scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&nums[i]);
sort(nums+1, nums+1+n);
int cnt = 0;
for(int i = 1; i <= n; i++) {
cnt++;
if(nums[i] != nums[i+1]) {
printf("%d %d\n", nums[i], cnt);
cnt = 0;
}
}
}
cmp函数的意思为比较a+b和b+a。选择较大的放前面,实现降序。!!!一定注意类型是字符串
#include<bits/stdc++.h>
using namespace std;
string a[21]; //记录20个数,用字符形式
bool cmp (string a, string b){ //从大到小字典序排序
return a + b > b + a; //注意体会这个技巧
}
int main( ){
int n; cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, cmp); //从大到小字典序排序
for(int i=0; i < n; i++)
cout << a[i];
return 0;
}
cmp函数写法2
用true的返回值来写
bool cmp(stu a,stu b){
if(a.sum > b.sum)
return true;
else if(a.sum < b.sum)
return false;
else{ //a.sum == b.sum
if(a.c > b.c)
return true;
else if(a.c < b.c)
return false;
else{ //a.c == b.c
if(a.id > b.id)
return false;
else return true;
}
结构体的写法
注意:结构体stu(同学) 与st(张三,李四等)
bool cmp(stu a,stu b) 注意!!!
#include<bits/stdc++.h>
using namespace std;
struct node{
int id; //学号
int c,m,e; //语、数、外
int sum;
}st[305]; //直接写数组
bool cmp(node a,node b){//这里写的是Node
排序:例题:外卖店优先级
输入:每一行的数据为结构体变量a[n]的两个元素
代码注意排序部分
bool cmp(node a, node b){ //结构体排序
if(a.id==b.id)
return a.time<b.time;
return a.id<b.id;
}
id从小到大排,id相同的时间从小到大排
//改写自:https://www.jianshu.com/p/1e625af51a3a
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int order[N]; //order[id] 第id号店上一次的订单
int prior[N]; //prior[id] 第id号店的优先级
int flag[N]; //flag[id] 第id号店在不在优先缓存中
struct node{
int time,id;
}a[N];
bool cmp(node a, node b){ //结构体排序
if(a.id==b.id)
return a.time<b.time;
return a.id<b.id;
}
int main(){
int m,n,T; cin>>n>>m>>T;
for(int i=0;i<m;i++)
cin>>a[i].time>>a[i].id;
sort(a,a+m,cmp); //按结构体中的时间排序
for(int i=0;i<m;i++){
int tt=a[i].time, id=a[i].id;
if(tt != order[id])
//如果当前订单不等于上一次的订单,则减去它们之间的间隔
prior[id] -= tt-order[id]-1;
prior[id] = prior[id] < 0 ? 0: prior[id]; //不小于0
if(prior[id]<=3) flag[id]=0;
prior[id]+=2;
if(prior[id]> 5) flag[id]=1;
order[id]=tt;
}
for(int i=1;i<=n;i++) //最后处理第T时刻
if(order[i]<T){
prior[i] -= T-order[i];
if(prior[i]<=3)
flag[i]=0;
}
int ans=0;
for(int i=0;i<=n;i++)
if(flag[i])
ans++;
cout<<ans;
return 0;
}
bool的意思
bool就是布尔的意思,布尔值的返回值只有真(true)和假(false),多用于判断。
break循环的意思
当break语句用于do-while、for、while循环语句中时,可使程序终止循环。
输入数据时如果想要黑框不消失一直输
写出while(1)
当输入的数据不符合要求时 break
逻辑表达式?:
s[i]=1?1:0
意思是s[i]等于1吗,等于1的话整个表达式值为1,不等于1时整个表达式值为0。
用法实例:
s1[i+1]=(s1[i+1]=='*'?'o':'*');