首页 > 其他分享 >【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31

【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31

时间:2025-01-17 21:33:51浏览次数:1  
标签:洛谷 213 int 31 long -- solve include define

训练情况

赛后反思

模拟题差点红温,差一道字符串模拟题AK

A题

问一个数 \(a\) 加多少后的个位数变成 \(b\),取出 \(a\) 的个位数,再用 \(b\) 去减,如果小于零答案再加十。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int a,b; cin>>a>>b;
    int ans = b-a%10;
    if(ans<0) ans += 10;
    cout<<ans<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

B题

巨大无比分类讨论,分为奇偶性不同和同奇和同偶三种情况,奇偶性不同计算离零的距离再+1就是答案,相同计算两数距离,再特判一下一端为零。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int a,b; cin>>a>>b;
    if(a==0){
        cout<<(b-1)/2<<endl;
        return;
    } else if(b == 0){
        cout<<(a-1)/2<<endl;
        return;
    }
    if(a%2==b%2){
        cout<<abs(b-a)/2-1<<endl;
    } else if(a&1){
        cout<<(b-1)/2+1+a/2<<endl;
    } else if(b&1){
        cout<<(a-1)/2+1+b/2<<endl;
    }
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

C题

直接模拟 \(x^2 \mod 10000\),进行 \(k-1\) 次就是答案,直接输出

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int x,c,k;
    cin>>x>>c>>k;
    for(int i = 1;i<k;i++){
        x = (x*x+c)%10000;
    }
    cout<<x<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

D题

遍历数列,找到 \(\le 15\) 的元素先插入新数列,之后全部处理完再插入 \(> 15\) 的元素

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; cin>>n;
    vector<int> a(n + 1);
    for(int i = 1;i<=n;i++) cin>>a[i];
    vector<int> b;
    for(int i = 1;i<=n;i++){
        if(a[i] <= 15) b.push_back(a[i]);
    }
    for(int i = 1;i<=n;i++){
        if(a[i] > 15) b.push_back(a[i]);
    }
    for(int i = 0;i<b.size();i++){
        cout<<b[i]<<" ";
    }
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

E题

巨大无比的模拟题,计算循环的起始和终止条件比较麻烦,我们先处理横杠部分,再处理箭头的上半部分,下半部分直接对称过来即可。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n,m,k; cin>>n>>m>>k;
    char s[n+3][m+3];
    for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) s[i][j] = 0;
    for(int i = (n+1)/2-(k-1)/2;i<=(n+1)/2+(k-1)/2;i++){
        for(int j = 1;j<=m-(n+1)/2;j++){
            s[i][j] = '#';
        }
    }
    for(int i = 1;i<=(n+1)/2;i++){
        for(int j = m-(n+1)/2+1;j<=m;j++){
            if(i>=(j-m+(n+1)/2)) s[i][j] = '#';
        }
    }
    for(int i = (n+1)/2;i<=n;i++){
        for(int j = m-(n+1)/2+1;j<=m;j++){
            s[i][j] = s[i-(i-(n+1)/2)*2][j];
        }
    }
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            if(s[i][j]=='#') cout<<s[i][j];
            else cout<<".";
        }
        cout<<endl;
    }
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

F题

先求列的和,再取最大值,从右往左找到第一个最大值的列,再取这个列的行取最大值并计数即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n,m; cin>>n>>m;
    vector<vector<int>> a(n + 1,vector<int>(m + 1));
    vector<int> sum(m + 1);
    int masum = 0;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>a[i][j];
            sum[j] += a[i][j];
            masum = max(masum,sum[j]);
        }
    }
    int pos = m;
    for(int i = m;i;i--){
        if(sum[i] == masum){
            pos = i;
            break;
        }
    }
    int maa = 0;
    for(int i = 1;i<=n;i++){
        maa = max(maa,a[i][pos]);
    }
    int ans = 0;
    for(int i = 1;i<=n;i++){
        if(a[i][pos]==maa) ans++;
    }
    cout<<maa<<" "<<ans<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

G题

不知道为什么错了最后三个点,我们先对节拍进行计数,维护一个flag表示是否在括号内,遇到左括号计数器+1并改变flag,右括号改变flag,如果不在括号内并且不是 ' 计数器加一,接下来我们计算连续的 L,R,L',R' 我们先判断较长的两个 L',R' 使用四个变量表示当前的连续次数,答案取连续最大值即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s; int opt; cin>>s>>opt;
    int n = s.size();
    int ans = 0,a=0,b=0,c=0,d=0;
    bool flag = false;
    int aa=0,bb=0,cc=0,dd=0;
    for(int i = 0;i<n;i++){
        if(s[i] == '(') ans++,flag=true;
        else if(s[i] == ')') flag=false;
        else if(!flag){
            if(s[i]!='\'') ans++;
        }

        if(i!=n-1&&s.substr(i,2) == "L\'"){
            bb++; if(!flag) aa=0,cc=0,dd=0;
        }
        else if(i!=n-1&&s.substr(i,2)=="R\'"){
            dd++; if(!flag) aa=0,bb=0,cc=0;
        }
        else if(s[i] == 'L'){
            aa++; if(!flag) bb=0,cc=0,dd=0;
        }
        else if(s[i] == 'R'){
            cc++; if(!flag) aa=0,bb=0,dd=0;    
        }
        a = max(aa,a);
        b = max(bb,b);
        c = max(cc,c);
        d = max(dd,d);
    }

    cout<<ans<<endl;
    if(opt) cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

H题

直接模拟维护这个数列的变换操作,先求列的最大值和最小值,之后再全部遍历列,遇到相同的这个列的所有元素取出来之后,置零。最后对取出来的数进行排序,再按照题目要求,第奇数行从左往右,第偶数行从右往左,遇到零的位置放回去,进行 \(k\) 次即可

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

const int N = 53;

int n,m,k;
int a[N][N];

void op(){
    int ma = 0;
    int mi = LONG_LONG_MAX;
    int sumc[N]; for(int i = 1;i<=m;i++) sumc[i] = 0;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            sumc[j]+=a[i][j];
        }
    }
    for(int i = 1;i<=m;i++){
        ma = max(ma,sumc[i]);
        mi = min(mi,sumc[i]);
    }
    vector<int> p;
    for(int i = 1;i<=m;i++){
        if(sumc[i] == ma || sumc[i] == mi){
            for(int j = 1;j<=n;j++) p.push_back(a[j][i]),a[j][i] = 0;
        }
    }
    sort(p.begin(),p.end(),greater<int>());
    // for(int i = 0;i<p.size();i++) cout<<p[i]<<" ";
    // cout<<endl;
    // for(int i = 1;i<=n;i++){
    //     for(int j = 1;j<=m;j++){
    //         cout<<a[i][j]<<" ";
    //     }
    //     cout<<endl;
    // }
    int tot = -1;
    for(int i = 1;i<=n;i++){
        if(i&1){
            for(int j = 1;j<=m;j++){
                if(!a[i][j]) a[i][j] = p[++tot];
            }
        } else {
            for(int j = m;j;j--){
                if(!a[i][j]) a[i][j] = p[++tot];
            }
        }
    }
}

void solve(){
    cin>>n>>m>>k;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i = 1;i<=k;i++) op();
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

标签:洛谷,213,int,31,long,--,solve,include,define
From: https://www.cnblogs.com/longxingx/p/18677695

相关文章

  • KB31N 统计指标
    BAPI:BAPI_ACC_STAT_KEY_FIG_POSTHEAD表:COBKDATA:LS_DOC_HEADERTYPEBAPIDOCHDRP,LV_DOC_NOTYPEBAPIDOCHDRP-DOC_NO,LT_DOC_ITEMSTYPESTANDARDTABLEOFBAPISKFITMWITHHEADERLINE,LT_RETURNTYPESTANDARDTABLEOFBAPIRE......
  • 洛谷P1803
    凌乱的yyy/线段覆盖-洛谷代码区:#include<stdio.h>#include<stdlib.h>structGAME{ intstart; intend;};intcmp(constvoid*a,constvoid*b){ structGAME*game1=(structGAME*)a; structGAME*game2=(structGAME*)b; returngame1->end-game2->......
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......
  • 213. 打家劫舍 II
    213.打家劫舍IIvarrob=function(nums){if(!Array.isArray(nums)||nums.some(isNaN)){thrownewError("Invalidinput:numsmustbeanarrayofnumbers");}constn=nums.length;if(n===0)return0;if(n===1)......
  • 洛谷题单指南-线段树的进阶用法-P3168 [CQOI2015] 任务查询系统
    原题链接:https://www.luogu.com.cn/problem/P3168题意解读:一个任务管理系统,能够查询在某个时间点运行的任务中优先级最小的k个任务的优先级之和。解题思路:由于总时间n不超过100000,考虑针对所有时刻建立可持久化线段树,根节点为root[i]的线段树维护时刻i的任务情况,节点区间表示......
  • 20221320 冯泰瑞 《信息安全综合实践》课程设计报告——基于文本文件信息隐藏和二值图
    20221320冯泰瑞《信息安全综合实践》课程设计报告——基于文本文件信息隐藏和二值图像信息隐藏的回声信息隐藏算法实现任务简介隐藏原理研究发现,HAS(HumanAudioSystem,人类听觉系统)存在感知掩蔽效应,即强信号的存在会使其附近的弱信号难以被感知。因此,当回声与原声的间隔充分......
  • 计算机毕业设计—312059 SSM新时代网咖管理系统(源码免费领)
      摘  要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的新时代网咖管理系统;新时代网咖管理系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本新时代网咖管理系统是针对目前网咖管理系统的实际需......
  • 计算机毕业设计—311017 spring boot酒店预定系统(源码免费领)
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对酒店客房预定等问题,对酒店信息管理进行研究分析,然后开发设计出酒店预订系统以解决问题。......
  • 洛谷题单指南-线段树的进阶用法-P2617 Dynamic Rankings
    原题链接:https://www.luogu.com.cn/problem/P2617题意解读:动态求区间第k小问题。解题思路:树套树的典型应用,具体阐述参考:https://www.cnblogs.com/jcwy/p/18640914100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=100005;structOp{charop;......
  • 每日一题洛谷P5726 【深基4.习9】打分C++
    #include<iostream>#include<iomanip>usingnamespacestd;intmain(){ intn; cin>>n; intstr[1000]={0}; intmax=0; intmin=10; for(inti=0;i<n;i++){ cin>>str[i]; if(str[i]>max){ max=str[i......