一年后你也会发现其实真的很水

0.前置知识:

代码中 i++\texttt{i++}i=i+1\texttt{i=i+1} 的简写(编译也能成功并且效果相同)

1.A1110

从前向后枚举并比对即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n;
    scanf("%lld",&n);
    ll a[n+1];
    for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
    ll p,ans=-1;
    scanf("%lld",&p);
    for(ll i=1;i<=n;i++) if(a[i]==p){ans=i;break;}
    printf("%lld",ans);
}

2.A1107

开一个数组 aa,其中 aia_i 表示 ii 的位置上有没有种树,11 表示没有,00 表示有。模拟即可。

代码:

#include <iostream>
using namespace std;
int main(){
    int n,m,x,y,ans=0;
    cin>>n>>m;
    int a[n+1]={0};
    for(int i=0;i<m;i++){
        cin>>x>>y;
        for(int j=x;j<=y;j++){
            a[j]=1;
        }
    }
    for(int i=0;i<=n;i++){
        if(a[i]==0) ans++;
    }
    cout<<ans; 
}

3.A1118

先用数组 aabbggkk 记录下输入的数据。询问时从后向前枚举地毯,如果这个地毯在覆盖了这个点,输出并结束程序即可。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int a[10001],b[10001],g[10001],k[10001];
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);
        }
        int x,y;
        scanf("%d%d",&x,&y);
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(a[i]<=x&&a[i]+g[i]>=x&&b[i]<=y&&b[i]+k[i]>=y)ans=i+1;
        }
        if(ans==0)cout<<-1<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}

4.A1124

将第一个矩阵存入数组 aa,输入第二个矩阵时累加并输出即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,m;
    scanf("%lld %lld",&n,&m);
    ll a[n+1][m+1],x;
    for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) scanf("%lld",&a[i][j]);
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            scanf("%lld",&x);
            printf("%lld ",x+a[i][j]);
        }
        printf("\n");
    }
}

5.作业

1.P1039

这题就记录一个 bb 数组,其中 bib_i 表示原数组中 ii 出现的次数即可。

下面代码:偷懒就写快速排序了

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a[1000001];
int main(){
    cin>>n;
    for(ll i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
    for(ll i=1;i<=n;i++) cout<<a[i]<<" ";
    return 0;
}

2.P1332

正常输入后从后往前输出即可。

下面代码我又偷懒用了 stdstd 中的栈

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n;
    cin>>n;
    stack<ll> st;
    for(ll i=1;i<=n;i++){
        ll x;
        cin>>x;
        st.push(x);
    }
    while(!st.empty()){
        cout<<st.top()<<" ";
        st.pop();
    }
    return 0;
}

3.P1333

从前向后枚举并比对即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,x;
int main(){
    cin>>n>>x;
    for(ll i=1;i<=n;i++){
        ll p;
        cin>>p;
        if(p==x){
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<0;
    return 0;
}

4.P1334

从第二个数输出到最后再输出第一个数就行了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n;
    cin>>n;
    ll p;
    cin>>p;
    for(ll i=1;i<n;i++){
        ll k;
        cin>>k;
        cout<<k<<" ";
    }
    cout<<p;
    return 0;
}

5.P1335

从前向后比对并删除第一个。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,x;
    cin>>n>>x;
    bool flag=true;//记录当前是否没出现过x
    for(ll i=1;i<=n;i++){
        ll p;
        cin>>p;
        if(!flag||x!=p) cout<<p<<" ";//如果之前出现过x了或者这个值和x不同
        else flag=false;
    }
}

6.P1336

每一个进行比对,不等就输出。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,x;
    cin>>n>>x;
    for(ll i=1;i<=n;i++){
        ll p;
        cin>>p;
        if(x!=p) cout<<p<<" ";
    }
}

7.P1337

先输出前面不变的,在输出插入的,最后把后面的全输出完就可以了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,x,p,k;
    cin>>n>>p>>x;
    for(ll i=1;i<=p;i++){
        cin>>k;
        cout<<k<<" ";
    }
    cout<<x<<" ";
    for(ll i=p+1;i<=n;i++){
      cin>>k;
      cout<<k<<" ";
    }
}

8.P1340

把每个月的天数先存到数组里,最后输出就好。

#include<bits/stdc++.h>
using namespace std;
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
    int m;
    cin>>m;
    cout<<day[m];
    return 0;
}

9.P1341

同样的,从中间输出到后面,有正中间的就输出,最后输出前面的。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int len=s.length();
    if(len%2){
        int mid=len/2;
        for(int i=mid+1;i<len;i++) cout<<s[i];
        cout<<s[mid];
        for(int i=0;i<mid;i++) cout<<s[i];
    }
    else{
        int mid=len/2;
        for(int i=mid;i<len;i++) cout<<s[i];
        for(int i=0;i<mid;i++) cout<<s[i];
    }
}

10.P1342

同样开一个数组记录每一个字母出现的次数。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll p[26];
int main(){
    string s;
    getline(cin,s);
  //s.length()就是长度
    for(ll i=0;i<s.length();i++){
        if(s[i]>='a'&&s[i]<='z') p[s[i]-'a']++;
      //如果是小写字母就加上相应的,s[i]-'a'就是对应的ASCII码,比如'a'-'a'=0,'b'-'a'=1,'c'-'a'=2......
        else if(s[i]>='A'&&s[i]<='Z') p[s[i]-'A']++;//大写字母
    }
    for(ll i=0;i<26;i++){
        if(p[i]){
            cout<<char(i+'a')<<" "<<p[i]<<endl;
        }
    }
}

11.P1343

使用指针,ii 表示当前 aa 数组的处理进度,jj 表示当前 bb 数组的处理进度。此时 aia_iaa 数组中最小的, bjb_jbb 数组中最小的(因为 aa 数组和 bb 数组是有序的)。那么当前最小的那个值一定在 aia_ibjb_j 中,比较输出即可,不要忘了 i=i+1i=i+1j=j+1j=j+1

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1000001],b[1000001];
int main(){
    ll n,m;
    cin>>n>>m;
    for(ll i=1;i<=n;i++) cin>>a[i];
    for(ll i=1;i<=m;i++) cin>>b[i];
    ll x=1,y=1;
    ll i,j;
    while(x+y!=n+m+2){
        if(x<=n) i=a[x];
        else i=0x3f3f3f3f3f3f3f3f;
        if(y<=m) j=b[y];
        else j=0x3f3f3f3f3f3f3f3f;
        if(i<=j){
            cout<<i<<" ";
            x++;
        }
        else{
            cout<<j<<" ";
            y++;
        }
    }
}

12.P1343

考虑暴力枚举。枚举 LL,如果 aL(ni+1)a_L*(n-i+1)(也就是最理想的状态,aR>aLa_R>a_L 且此时 RLR-L 最大也就是 R=nR=n\le 当前最优解,直接结束循环(因为这不可能是最优解或是并列的最优解)。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a[1000001];
int main(){
    scanf("%lld",&n);
    ll ans=-0x3f3f3f3f3f3f3f3f;
    for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
    for(ll i=1;i<n;i++){
        if(a[i]*(n-i+1)>ans) for(ll j=i+1;j<=n;j++) ans=max(ans,min(a[i],a[j])*(j-i));
    }
    printf("%lld",ans);
}

嗨呀终于写完了