先来吐槽一下 €€£ 的数据,第一题把我卡成了 \(90\),第二题卡成了 \(12\),最后一道题还多水了 \(10\) 分。
总得分:\(90+12+65+40=207\)。
应该得的分:\(100+52+65+60=277\)
如果再好一点就是:\(100+52+65+100=317\)
第一题:我只能说我不会写对拍,手造的几组数据全都对了。
我一不小心取到了 \(n\) 的这个值,所以在范围很小的时候把我卡掉了。
第二题:结构体掌握度不够,平常不怎么使用结构体的。
或者说时间也不够了,大量的时间花在了第 \(3\) 题。(我倒回来做的第 \(2\) 题)
第三题:这个怎么说呢,其实我早就知道我写出来的程序有一定概率会错,但是我就是不知道怎么改。
模拟能力太菜了属于是。
第 \(4\) 题:一个重大的失误,数组开小了,丢了 \(20\) 分
以后我要 const int N=1e...
。
题解
第一题没什么好说的:
#include<iostream>
using namespace std;
int main(){
int n,l,r;
cin>>n>>l>>r;
int w=r-l;
int t=l%n;
if(w+t<n) cout<<w+t;
else cout<<n-1;
}
第二题就模拟一下,卡卡常也许就过了。
第三题也就一个模拟,可以投机取巧做一下。
第 \(4\) 题用一个 set
模拟就可以了
#include<bits/stdc++.h>
const int INF=200005;
using namespace std;
int n;
set<int>s1,s2;
int cur;
bool p;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int q;
cin>>q;
if(q){
s1.insert(i);//苹果
}
else{
s2.insert(i);//橘子
}
}
s1.insert(INF);
s2.insert(INF);
if(*s1.begin()<*s2.begin()){
p=0;
}
else p=1;
while((!p&&s1.size()>1)||(p&&s2.size()>1)){
if(!p){
cur=*s1.upper_bound(cur);
if(cur==INF){
cur=0;
if(*s1.begin()<*s2.begin()){
p=0;
}
else p=1;
cout<<endl;
continue;
}
cout<<cur<<' ';
s1.erase(cur);
p=!p;
}
else{
cur=*s2.upper_bound(cur);
if (cur==INF){
cur=0;
if(*s1.begin()<*s2.begin()){
p=0;
}
else p=1;
cout<<endl;
continue;
}
cout<<cur<<' ';
s2.erase(cur);
p=!p;
}
}
cout<<endl;
while(s1.size()>1){
cout<<*s1.begin()<<endl;
s1.erase(*s1.begin());
}
while(s2.size()>1){
cout<<*s2.begin()<<endl;
s2.erase(*s2.begin());
}
}
明年继续!