1. 个人总结前言 这次小白月赛也算是一个教训,检验出了很多常见问题和不好的习惯 , 如下

  1. 喜欢每个测试点memset(a,0,sizeof(a))而导致超时 , 代码写的比较复杂而不考虑尽可能简略以减少错误
  2. 读题一掠而过,长一些的题目很经常读错导致代码写错 1,2两个问题集中体现在第一题和第二题中
  3. 对于精度问题总是不注意,体现在C题,之后尽量把精度问题都成10至整数再写(多次犯病) 相信大多数选手也会偶尔犯如上错误,于是乎在提交几次后过不去导致心态崩裂进而开摆

A 深渊水妖*

  • 最开始设置了len(区间长度),对于len>=2的区间再进一步统计,但是这道题好像l==r的情况也包含在测试点内? 故一直过不去,后把len去掉,将所有递增区间全部放入结构体数组中,进行排序
bool cmp(node a,node b){
    if(a.num!=b.num)return a.num>b.num;
    else return a.left<b.left;
}
using namespace std;
const int N = 1e5+ 8;
typedef long long ll;
int n,a[N],t;
struct node{
    int num,left,right;
};
bool cmp(node a,node b){
    if(a.num!=b.num)return a.num>b.num;
    else return a.left<b.left;
}
int main()
{
    scanf("%d",&t);
    while(t--){
        vector<node>vv;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        int l=1,maxx=0;
        for(int i=2;i<=n;i++){
            if(a[i]<a[i-1]) {
                vv.push_back({a[i-1]-a[l],l,i-1});
                maxx = max(a[i-1]-a[l],maxx);
                l=i;
            }
        }
        vv.push_back({a[n]-a[l],l,n});
        maxx = max(maxx,a[n]-a[l]);
        sort(vv.begin(),vv.end(),cmp);
        for(int i=0;i<vv.size();i++){
            if(vv[i].num==vv[0].num)cout<<vv[i].left<<' '<<vv[i].right<<' ';
            else break;
        }
        printf("\n");
    }
    return 0;
}








所以大家还是尽可能先一句话总结题目并简略代码思路后再写

C 绝命沙虫

  • 主要是精度问题,化整后即可过
using namespace std;
typedef long long ll;
ll n,t,ans,inf = 10000;
double m;
int main()
{
    cin>>t;
    while(t--){
        cin>>n>>m;
        ans=0;
        ll num = n,a=0,b=0;//a是红,b是绿
        ll mm=m*10;
        while(num){
            a=num*100;
            b=min(inf,num*10*(mm-10));
            ans+=floor(a/10);
            ans+=floor(b/10);
            num=floor(a/200);
        }
        cout<<ans<<endl;
    }
    return 0;
}


D丛林木马

  • 易发现a的每一位都要加上b的所有位 即可先用sum存储b所有位数*fastpow(10,lb-i-1)的和 a中每一位加上b每一位的全过程 a这一位贡献了lb次(b的位数)故
  • 核心代码
    for(int i=0;i<la;i++){
        ll now = (a[i]-'0')*fastpow(10,la-i-1)%mod;
        ans=(ans+now)%mod;
    }
    ll sum = 0;
    for(int i=0;i<lb;i++){
        ll now = (b[i]-'0')*fastpow(10,lb-i-1)%mod;
        now=(now*la+ans)%mod;
        sum=(sum+now)%mod;
    }

整体代码

using namespace std;
const int N = 1e5 + 8;
typedef long long ll;
int t;
const int mod = 998244353;
ll fastpow(ll base,ll pow){
    ll res = 1;
    while(pow){
        if(pow&1){
            res=res*base%mod;
        }
        base=base*base%mod;
        pow>>=1;
    }
    return res%mod;
}
void solve(){
    string a,b;
    cin>>a>>b;
    int la=a.size(),lb=b.size();
    if(la>lb){
        swap(a,b);
        swap(la,lb);
    }
    ll ans = 0;
    for(int i=0;i<la;i++){
        ll now = (a[i]-'0')*fastpow(10,la-i-1)%mod;
        ans=(ans+now)%mod;
    }
    ll sum = 0;
    for(int i=0;i<lb;i++){
        ll now = (b[i]-'0')*fastpow(10,lb-i-1)%mod;
        now=(now*la+ans)%mod;
        sum=(sum+now)%mod;
    }
    cout<<sum<<endl;
}
int main()
{
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}