京东8.12AK C++卷

选择题+三道编程题,整体难度不高,8000hc,东子也可以冲了

第一题思路:上界为n/2,然后暴力就好了

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#define ll long long
using namespace std;
string solve(string str,int num){
    if(num==0)return str;
    string str1=str.substr(0,num);
    string str2=str.substr(num,str.length()-num);
    string str3=str2+str1;
    return str3;
}
int judge(string str){
    int len=str.length();
    int num=0;
    for(int i=0;i<len;i++){
        if(str[i]!=str[len-i-1]){
            num++;
        }
    }
    return num/2;
}
int main(){
    string str;
    int n;
    cin>>n;
    cin>>str;
    int len=n/2;
    int ans=n/2;
    for(int i=0;i<=len;i++){
        string str_temp=solve(str,i);
        int num=judge(str_temp);
        ans=min(ans,num+i);
        // cout<<str_temp<<endl;
    }
    cout<<ans<<endl;
}

第二题思路:滚动数组的思想更新状态即可,卡点为当n为1,但输入大于9时,输出全为0

#include <iostream>
#include <cstring>
#include <string>
#include <queue>
#include <cmath>
#include <algorithm>
#include <stack>
#define ll long long
using namespace std;
const ll mod = 1e9+7;
ll dp[10];
ll last[10];
stack<int>st;
int main(){
    memset(dp,0,sizeof(dp));
    memset(last,0,sizeof(last));
    int n;cin>>n;
    ll tar;
    for(int i=1;i<=n;i++){
        ll w;cin>>w;
        if(n==1)tar=w;
        w=w%10;
        st.push(w);
    }
    if(n==1){
        int val=tar;
        for(int i=0;i<10;i++){
            if(i==val){
                cout<<1<<' ';
            }else{
                cout<<0<<' ';
            }
        }
        cout<<endl;
    }
    else{
        int u=st.top();st.pop();
        int v=st.top();st.pop();
        int x=(u*v)%10;
        int y=(u+v)%10;
        dp[x]++;dp[y]++;
        for(int i=0;i<10;i++){
            last[i]=dp[i];
        }
        while(!st.empty()){
            memset(dp,0,sizeof(dp));
            int w=st.top();st.pop();
            for(int i=0;i<10;i++){
                if(last[i]!=0){
                    int xx=(i+w)%10;
                    int yy=(i*w)%10;
                    dp[xx]=(dp[xx]+last[i])%mod;
                    dp[yy]=(dp[yy]+last[i])%mod;
                }
            }
            for(int i=0;i<10;i++){
                last[i]=dp[i];
            }
        }
        for(int i=0;i<10;i++){
            cout<<last[i]<<' ';
        }cout<<endl;
    }
    
}

第三题思路:分开判断摆正的正方形和斜的正方形即可

#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#define ll long long
using namespace std;
const int N = 55;
int n,m;
string mapInfo[N];
ll allsum;
bool islegal(int x,int y){
    if(x<0||x>n||y<0||y>m||mapInfo[x][y]!='X')return false;
    else return true;
}
void judge(int x,int y){
    int xx,yy;
    xx=x;
    yy=y;
    for(int i=1;i<=max(m,n);i++){
        xx=x+i;
        yy=y+i;
        if(islegal(xx,yy)==false)continue;
        xx=x;
        yy=y+i;
        if(islegal(xx,yy)==false)continue;
        xx=x+i;
        yy=y;
        if(islegal(xx,yy)==false)continue;
        allsum++;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            xx=x;yy=y;
            if(i==0&&j==0)continue;
            // if(x==0&&y==1&&i==1&&j==1)cout<<xx<<' '<<yy<<' '<<mapInfo[xx][yy]<<endl;
            xx=xx+i;
            yy=yy+j;
            // if(x==0&&y==1&&i==1&&j==1)cout<<xx<<' '<<yy<<' '<<mapInfo[xx][yy]<<endl;
            if(islegal(xx,yy)==false)continue;
            xx=xx+j;
            yy=yy-i;
            // if(x==0&&y==1&&i==1&&j==1)cout<<xx<<' '<<yy<<' '<<mapInfo[xx][yy]<<endl;
            if(islegal(xx,yy)==false)continue;
            xx=xx-i;
            yy=yy-j;
            // if(x==0&&y==1&&i==1&&j==1)cout<<xx<<' '<<yy<<' '<<mapInfo[xx][yy]<<endl;
            // cout<<"==========="<<endl;
            if(islegal(xx,yy)==false)continue;
            xx=xx-j;
            yy=yy+i;
            if(islegal(xx,yy)==false)continue;
            allsum++;
            // cout<<x<<' '<<y<<' '<<i<<' '<<j<<endl;
        }
    }
}
int main(){
    allsum=0;
    cin>>n>>m;
    for(int i=0;i<n;i++)cin>>mapInfo[i];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(mapInfo[i][j]=='X'){
                judge(i,j);
            }
        }
    }
    // ll ans=allsum/4;
    cout<<allsum<<endl;
}
全部评论
一看就是acm
2 回复 分享
发布于 2023-08-12 21:31 广东
Acm选手,太强了
1 回复 分享
发布于 2023-08-12 21:53 上海
同学,阿里控股集团JAVA开发岗投吗?我们和其他业务集团独立招聘,可以多次机会。需要的话,可以联系我。
点赞 回复 分享
发布于 2023-08-14 19:40 浙江

相关推荐

今天 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
评论
14
33
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务