8.28 吉比特 笔试

一、前言

最后一题大题看不懂,前两道模板题。前面写完还剩一个多小时,最后一题实在看不懂,提前出来了。有没有大佬最后一题做出来的分享一下思路。

二、大题

1、前缀和

给定一个长度为n的序列a和一个整数q,其中整数q表示共q次询问,每次询问给定两个整数l, r,计算表达式al - a+1 - ... - ar的值

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e5 + 7;

int n, q;
int a[maxl];
int sum[maxl];

void solve() {
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        sum[i] = sum[i - 1] + a[i];
    }

    int l, r;
    while (q--) {
        cin >> l >> r;
        cout << a[l] - (sum[r] - sum[l]) << endl;
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) solve();
    return 0;
}

2、快速幂

给定数字a,b,mod,求a的b次方对mod取余数。

#include<bits/stdc++.h>
using namespace std;
/*#define int long long*/
#define endl '\n'
#define P pair<int, int>
#define x first
#define y second
const int maxl = 1e6 + 7;

int a, b, mod;

int f() {
    int res = 1;
    while (b) {
        if (b & 1) res = res * a % mod;
        a = a * a % mod;
        b = b >> 1; 
    }
    return res;
}

void solve() {
    cin >> a >> b >> mod;
    cout << f() << endl;
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    /*cin >> t;*/
    while(t--) solve();
    return 0;
}

#笔试##吉比特##吉比特校招#
全部评论
t3是所有小朋友面积集合的最小值的最大,二分check就可以,推一下式子
1 回复 分享
发布于 08-28 21:06 北京
最后一题,先推公式,计算出面积为1的正n边形需要的周长,这里n越大,这个周长就越小,所以在分配的时候,这个周长越长,就给他多分配长度,使得他尽可能达到标准面积;同理,面积为1如果是圆,那么所需的周长是最小的,也就是说需要分配的长度就是最小的;因此我们在分配的时候,边数越多,分配到的长度就越小,这样可以使得所有多边形的面积最接近,也就是可以达到面积的最小值的最大值。分别计算每一个小朋友分配到的权值,然后根据权值计算周长,再根据周长计算面积,得到这个面积取最小值就可以
1 回复 分享
发布于 08-28 21:14 广东
我寻思最小面积不是0么
点赞 回复 分享
发布于 08-28 21:03 陕西
看不懂,没有要求正多边形,最小值是0,最小的最大是全给圆形;如果要求了,最小是全给边最少的,最大一样。实例1都看不懂,只能写个圆的交了,9.09%
点赞 回复 分享
发布于 08-28 21:07 湖南
二分s然后用s算出长度然后看看是不是符合
点赞 回复 分享
发布于 08-28 21:14 福建
第二题我为啥提交通过一直百分之零,第一题也没全过😭😭😭
点赞 回复 分享
发布于 08-28 23:51 河北
include <bits/stdc++.h> using namespace std; #define int long long (54686)#define vi vector<int> #define pi acos(-1) double ebs = 1e-6; double getM1(double s) { return sqrt(s * 4 * pi); } double getM2(double s, int x) { return sqrt(s * x * 4 * tan(pi / x)); } void solve() { int n, len; cin >> n >> len; vi a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } auto check = [&](double x) { double sum = 0; for (int i = 0; i < n; i++) { if (a[i] == -1) { sum += getM1(x); } else { sum += getM2(x, a[i]); } } return sum <= len; }; double l = 0, r = len / 4.0 / pi * len; while (r - l >= ebs) { double m = (l + r) / 2; if (check(m)) l = m; else r = m; } cout << l << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); } // S1 = x * (n / x)^2 / 4tan(2pi / x / 2) = n * n / x / 4tan(pi / x) // n^2 = S1 * x * 4tan(pi / x) // S2 = (n / 2pi)^2 * pi = n * n / 4pi // n^2 = S2 * 4pi
点赞 回复 分享
发布于 08-29 17:57 北京

相关推荐

10-31 18:00
门头沟学院 UE4
点赞 评论 收藏
分享
华为 终端鸿蒙 30w
点赞 评论 收藏
分享
5 9 评论
分享
牛客网
牛客企业服务