今天早上也是打完了包河区,不得不说是太
了
所以说,还是水一篇文章吧
T1 签到题
超级简单题吧,用max_score
和max_name
来计最大的名字和分数。
int n;scanf("%d",&n);
int score,max_score;
string name,max_name;
对于一个新输入的数据比一下大小就行了。。。
if(score>max_score)max_score=score,max_name=name;
T2 模拟题
按照题目来进行反转即可啊。
int n;
while(n--){
string s;cin>>s;
int rev=s;
...
}
用rev来计s颠倒后的字符串是什么,可以分为两步:
1: 反转s
2: 按照6,9反转 0,1,8不操作 2,3,4,5,7来讲一下:
用一个f=0来计,如果有2,3,4,5,7就f=1,最后判断一下f,如果f=1就直接输出0
写一下
for(int i=0;i<rev.size();i++){
if(rev[i]=='6')rev[i]='9';
else if(rev[i]=='9')rev[i]='6';
else if(rev[i]!='0'&&rev[i]!='1'&&rev[i]!='8'){f=1;break;}
}
最后对比一下s和rev即可。
if(s!=rev)f=1;
printf("%d\n"!f);
T3 模拟题
首先用getline来读取这个句子,maxstr和minstr计最大和最小长度的字符串,用stringstream来把里面所有的单词全部取出:
string s;cin>>s;
stringstream sins;
sins<<s;
string tmp,maxstr,minstr;
for(int i=0;i<101;i++)minstr+=' ';
while(sins>>tmp){
...
}
然后把他们和maxstr和minstr比一下大小:
while(sins>>tmp){
int l=tmp.size(),mx=maxstr.size(),mi=minstr.size();
if(l>mx)maxstr=tmp;
if(l<mi)minstr=tmp;
}
T4 结构体&排序 or 秀操作?
首先把题目总结一下,首先就是残疾人就不计数据了,因为不用排队啊。然后用结构体数组存一下排队的所有人。
这里我用ol计了一下一个人是否是老年人
struct Node{
int age,num,idx,ol;
//年龄,编号,序列号,老年标记
}e[N];
bool cmp(const Node& ex,const Node& ey){
if(ex.ol&&ey.ol){
if(ex.age!=ey.age)return ex.age>ey.age;
else return ex.idx<ey.idx;
}
else if(ex.ol||ey.ol)
return ex.ol>ey.ol;
else
return ex.idx<ey.idx;
}
int main(){
int tot=0,n;scanf("%d",&n);
for(int i=1;i<=n;i++){
int u,v,w;scanf("%d%d%d",&u,&v,&w);
if(!w){
e[++tot].age=v;
e[tot].num=u;
if(v>=60)e[tot].ol=1;
e[tot].idx=tot;
}
}
...
}
然后排序
sort(e+1,e+1+tot,cmp);
最后输出qwq不写了
秀操作小贴士
用set或者priority_queue来排数据。
T5 二分答案题
这是刷过的题啊,二分木材的长度:
对于长度x,看看它最多能弄多少段木材,判断是否>=m即可。
bool check(int x){
int t=0;
for(int i=1;i<=n;i++)t+=a[i]/x;
return t>=m;
}
//二分答案:二分最大值
while(l<r){
int mid=l+r>>1;
if(check(mid))l=mid+1;
else r=mid;
}
printf("%d",l-1);