360笔试(3-18)编程题

1.给一个半径为R的圆,圆心是(0,0),开始位于(R,0),分别求从始点顺时针和逆时针走长度为L的终点坐标

有可能走多圈,先处理成走一圈的形式,然后判是不是四个断点,如果是则输出

然后把L处理到第一象限,与x轴形成的夹角是L/R,y点坐标就是R*sin(L/R),那么x=sqrt(R*R-x*x)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const double pi=acos(-1);
const double esp=1e-8;
double L,R,S;

void solve(double &x,double& y,double l){
    double jiao=(l/S)*pi*2;
    y=R*sin(jiao);
    x=sqrt(R*R-y*y);
}

int main(){
    cin>>L>>R;
    S=pi*R*2;
    while(L>=S)L-=S;

    //先判断四个端点
    if(abs(L)<=esp){
        printf("%.3f %.3f\n",R,0);
        printf("%.3f %.3f\n",R,0);
        return 0;
    }
    else if(abs(L-(S/4))<=esp){
        printf("%.3f %.3f\n",0,R);
        printf("%.3f %.3f\n",0,-R);
        return 0;
    }
    else if(abs(L-(S/4)*2)<=esp){
        printf("%.3f %.3f\n",-R,0);
        printf("%.3f %.3f\n",-R,0);
        return 0;
    }
    else if(abs(L-(S/4)*3)<=esp){
        printf("%.3f %.3f\n",0,-R);
        printf("%.3f %.3f\n",0,R);
        return 0;
    }

    // 假设顺时针的话,然后判断在哪个象限
    double x,y;

    if(L<(S/4)){
        solve(x,y,L);
    }
    else if(L<(S/2)){
        L=S/2-L;
        solve(x,y,L);
        x*=-1;
    }
    else if(L<(S/4)*3){
        L-=S/2;
        solve(x,y,L);
        x*=-1;y*=-1;
    }
    else{
        L=S-L;
        solve(x,y,L);
        y*=-1;
    }

    printf("%.3f %.3f\n",x,-y);
    printf("%.3f %.3f\n",x,y);

    return 0;
}

2.给一个长度是n的串,串中只有1-9这9个数字,求把这个串拆分若干个字串,每个字串中没有重复的数字,输出有多少种分割方法,答案mod1000000007

做选择做的有点紧张,读错题了,简单dp,dp[i]表示分割前i个的种类,如果从j分割,那么j以及前面的是一个分割方法,(j+1)-i是一个分割,那么dp[i]=sigma(dp[j])j表示从i往回走,能走到的无重复的最远距离

简单题,血亏

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const int mod=1000000007;
int a[maxn],v[10];
int dp[maxn];

int main(){
    //freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",a+i);
    dp[0]=1;
    for(int i=1;i<=n;i++){
        for(int j=i-1;j>=0;j--){
            if(v[a[j+1]])break;
            v[a[j+1]]=1;
            dp[i]=(dp[i]+dp[j])%mod;
        }
        memset(v,0,sizeof(v));
    }
    printf("%d\n",dp[n]);
    return 0;
}

3.有一个双端队列,两个海盗分金子,每人轮流在取一个金子,可以在左端或者右端每次取一个金子,两人都会做最有选泽,输出先手和后手的得到的最多金子

博弈dp,记忆化搜索就能解,dp[i][j][2],表示i-j之间,第一个人个第二个人能得到的最佳答案

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=505;
int a[maxn];
int dp[maxn][maxn][2];
typedef pair<int,int> pr;
int t,n;

void dfs(int l,int r,int cnt){
    if(dp[l][r][cnt]!=-1)return ;
    if(l==r){
        dp[l][r][cnt]=a[l];
        dp[l][r][cnt^1]=0;
        return ;
    }
    dfs(l+1,r,cnt^1);
    dfs(l,r-1,cnt^1);
    int L=dp[l+1][r][cnt]+a[l],R=dp[l][r-1][cnt]+a[r];
    //cout<<l<<" "<<r<<" "<<L<<" "<<R<<endl;
    if(L>R){
        dp[l][r][cnt]=L;
        dp[l][r][cnt^1]=dp[l+1][r][cnt^1];
    }
    else{
        dp[l][r][cnt]=R;
        dp[l][r][cnt^1]=dp[l][r-1][cnt^1];
    }
}

int main(){
    //freopen("in.txt","r",stdin);
    int cas=1;
    cin>>t;
    while(t--){
        cin>>n;
        for(int i=0;i<n;i++)cin>>a[i];
        memset(dp,-1,sizeof(dp));
        dfs(0,n-1,0);

        printf("Case #%d: %d %d\n",cas++,dp[0][n-1][0],dp[0][n-1][1]);
    }
    return 0;
}
时间: 2024-09-29 09:48:16

360笔试(3-18)编程题的相关文章

2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网

 2017年校招全国统一模拟笔试(第二场)编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/276712b113c6456c8cf31c5073a4f9d7来源:牛客网 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度. 输入描述: 输入为两行字符串(可能包含空格),长度均小于等于50. 输出描述: 输出为一个整数,表示最长公共连续子串的长度. 输入例子: abcde abgde 输出例子

网易2017校招内推笔试练习卷编程题1--1019.数字黑洞20

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给

网易2017校招内推笔试练习卷编程题2--出专辑

你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中.每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒.为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ? 输入描述: 每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L. 保证 n ≤ 100 , s ≤ L ≤ 10000 输出描述

2017-08-23 华为笔试第二道编程题详解

[题目描述] 给定一个整数,给出消除重复数字以后最大的整数 输入描述 :正整数,注意考虑长整数 输出描述 : 消除重复数字后的最大整数 [示例1] 输入 : 423234 输出 : 432 [思路] 使用栈作为辅助工具,首先从前往后遍历数组 * 栈为空就压入栈 * 栈非空,判断当前数组元素是否大于栈顶元素 * 是 , 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素 * 判断栈中是否已经存在当前数组元素,否,将当前数组元素压入栈 [参考] http://www.cnblogs.com/

360笔试编程题

360笔试题目: C++简单实现: 1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 #include <sstream> 5 #include <cstring> 6 #include <vector> 7 #include <algorithm> 8 9 using namespace std; 10 11 12 const int MAX

京东校招笔试(C++方向)编程题

这次笔试是今年校招我参加的第一次笔试..出了很多状况,基础知识不扎实,导致选择题耽误了太多时间,导致后面的题目没做完,编程题也没有在 时间内写出来,基本没有面试机会了.不过我继续研究第二个编程题,在10几分钟后做了出来. 这个题目具体已经不记得了,但是大概意思还是记得,我们把由4和7组成的数,按小大排序,例如:4 7 44 47 74 77 444 447 474 477 744 747 774 777 他们的序号依次为1,2,3,4.....,题目的输入是每行输入一个整数,可以很大(好像是最大

小米2015笔试编程题

小米2015笔试编程题 1.[编程题] 懂二进制 时间限制:1秒 空间限制:32768K 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子1: 1999  2299 输出例子1: 7 分析:第一步求这两个数的异或,得到一个新的数,相同位是0,不同位是1:第二步采用位运算求这个数里边1的个数即为结果 1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

小米13笔试编程题 4

朋友圈(25分) 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈. 假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1.2.3属于一个朋友圈,4.5属于另一个朋友圈,结果为2个朋友圈. 最后请分析所写代码的时间.空间复杂度.评分会参考代码的正确性和效率. C/

360春招技术岗编程题

360公司 2018校招 技术综合G卷在线考试编程题| 30.0分3/3[本题为选答题]奇异 长度(Web)时间限制:C/C++语言 1000MS:其他语言 3000MS内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述:给你一个图,0节点连接这一个联通块a,1节点连接着一个联通块b,ab仅由01这条边相连.现在我们定义奇异路径为恰好经过0-1这条边一次的路径,其他边可以经过任意次,且路径不带方向,1-2-3与3-2-1认为是两条路径.重边也算多条路.在这个图中有无数