7.8 考试总结

· · 个人记录

1 P10131

这题是第一题,但看了下,没有想出正解,主要是题目没太看懂,卡在了

6
1 1 1 2 2 2 YES

2
1 2 NO

这里。

#include<bits/stdc++.h>
using namespace std;
int n, a[200005];
void solve(){
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>a[i];
    }
    if(n==2&&a[1]==a[2]){
        cout<<a[1]<<endl;
        return ;
    }
    if(n==2&&a[1]!=a[2]){
        cout<<-1<<endl;
        return ;
    }
    vector<int> ans;
    for(int i=1; i<=n-2; i++){
        if(a[i]==a[i+1]||a[i]==a[i+2])
            ans.push_back(a[i]);
    }
    if(a[n-1]==a[n]) ans.push_back(a[n]);
    sort(ans.begin(), ans.end());
    for(int i=0; i<ans.size(); i++){
        if(i==0||ans[i]!=ans[i-1])
            cout<<ans[i]<<" ";
    }
    if(ans.size()==0) cout<<-1;
    cout<<"\n";
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

2 P10132

这题看了下,没想出正解,题目没太理解。

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int n,s,q[N],v[N];
int main(){
    cin>>n>>s;
    for(int i=1;i<=n;i++){
        cin>>q[i]>>v[i];
    }
    int p=1,fx=1,cnt=0;
    while(s>=1&&s<=n){
        if(q[s]==0){
            p=p+v[s];
            fx=-fx;
        }else if(q[s]==1&&v[s]<=p){
            v[s]=-1;
        }
        s=s+p*fx;
        cnt++;
        if(cnt>=1e7){
            break;
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(v[i]==-1)
        ans++;
    }
    cout<<ans<<"\n";
    return 0;
}

3 P10133

这题最后看了,想到了点思路,但时间没那么够。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200005;
int n,cnt=0,a[N],sub[N],sub2[N];
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sub[i]=a[i]-a[i-1];
        sub2[i]=sub[i]-sub[i-1];
        cnt+=abs(sub2[i]);
    }
    cout<<cnt<<"\n";
    return 0;
}

4 P10187

最后看了,原本是想写个暴力模拟的。但是讲之后是一道找规律的题目。规律是:如果把别人卡入了10,那别人必输。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        string s;
        cin>>s;
        int len=s.size();
        if(s[len-1]=='0') cout<<"E"<<endl;
        else cout<<"B"<<endl;
    }
    return 0;
}

5 P10188

一开始看到这个题目原本是想用队列,但是题目没看太明白,后面发现方法错了,也没思路了。。

6 P10189

暴力模拟写的,一开始看到这数据范围,感觉会超时,加了优化,可惜也并没有快多少。

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int n,q,a[N],b[N];
bool cmp(int x, int y){
    return x>y;
}
int main(){
    cin>>n>>q;
    for(int i=1; i<=n; i++)
        cin>>a[i];
    for(int i=1; i<=n; i++){
        cin>>b[i];
        b[i]=a[i]-b[i];
    }
    sort(b+1,b+n+1,cmp);
    while(q--){
        int v,s;
        cin>>v>>s;
        if(b[v]>s) puts("YES");
        else puts("NO");
    }
    return 0;
}