首页 > 其他分享 >吉比特9.19笔试

吉比特9.19笔试

时间:2024-09-19 21:13:13浏览次数:1  
标签:9.19 比特 int 笔试 long vim yy ++ xx

第一题

给出n,d,m,分别代表多项式个数、维度和修改次数。
接下来n行以t开头,接下来t+1个数分别代表0次1次--的项系数
接下来m行以p,l,r开头分别代表修改第l个到第r个多项式的前p+1项系数。
最后输出n个多项式f(233)的结果,要求结果对1e7 + 9取模。

最后计算结果的次数上限设置为500的时候偶尔超时,多提交几次就AC了

#include <bits/stdc++.h>  
using namespace std;  
const int mod = 1e7 + 9;  
  
int main() {  
    int n, d,m;  
    cin >> n >> d >> m;  
    long long diff[5005][505];  
    long long nums[5005][505];  
    int time[5005];  
  
    for (int i = 0; i < n; i++) {  
        cin >> time[i];  
        for (int j = 0; j <= time[i]; j++) {  
            cin >> nums[i][j];  
        }  
    }  
    for (int i = 0; i < m; i++) {  
        int p,l,r;  
        cin >> p >> l >> r;  
        for (int j = 0; j <= p; j++) {  
            long long tmp;  
            cin >> tmp;  
            if (i % 2 == 0) tmp *= -1;  
            diff[l - 1][j] = (diff[l - 1][j] + tmp + mod) % mod;  
            diff[r][j] = (diff[r][j] - tmp + mod) % mod;  
        }  
    }  
    //依次计算每个多项式的数值  
  
    for (int i = 0; i < n; i++) {  
        long long res = 0;  
        long long base = 1;  
        for (int j = 0; j <= 500; j++) {  
            res = (res + ((nums[i][j] + diff[i][j]) * base) % mod) % mod;  
            base = (base * 233)%mod;  
            diff[i + 1][j] = (diff[i + 1][j] +  diff[i][j]) % mod;  
        }  
        if (i != n - 1) cout << res << " ";  
        else cout << res;  
    }  
}  
// 64 位输出请用 printf("%lld")

第二题

给定一个有正有负的序列,求其中的连续序列的最小和,不能为空序列。
直接贪心求解,注意不能为空。

#include <bits/stdc++.h>  
using namespace std;  
  
int main() {  
    int n;  
    cin >> n;  
    vector<int> nums;  
    long long now = 0;  
    long long res = 1e7;  
    for (int i = 0; i < n; i++) {  
        long long tmp;  
        cin >> tmp;  
        now = now + tmp;  
        res =min(res, now);  
        now = min(0LL, now);  
    }  
    cout << res;  
}  
// 64 位输出请用 printf("%lld")

第三题

给定一个\(n*m\)大小的地图,给出A和B分别所处的位置\(x1,y1,x2,y2\),地图上同时还存在k个水源。每一秒水源都会往四个方向扩张,请问A和B在多少秒后能够相遇,如果不能相遇输出-1
逃离火灾变种问题,暴力求解即可。

#include <bits/stdc++.h>  
using namespace std;  
  
int main() {  
    int T;  
    cin >> T;  
    while (T--) {  
        int n,m;  
        cin >> n >> m;  
        vector<vector<int>> vim(n + 1, vector<int>(m + 1, 0));  
        deque<pair<int, int>>dqw;  
        deque<pair<int, int>>dq1;  
        deque<pair<int, int>>dq2;  
        int x1,y1,x2,y2;  
        cin >> x1 >> y1 >>x2 >> y2;  
        dq1.push_back(make_pair(x1,y1));  
        dq2.push_back(make_pair(x2,y2));  
        vim[x1][y1] = 1;  
        vim[x2][y2] = 2;  
        int k;  
        cin >> k;  
        for (int i = 0; i < k; i++) {  
            int x,y;  
            cin >> x >> y;  
            vim[x][y] = 3;  
            dqw.push_back(make_pair(x,y));  
        }  
        vector<vector<int>> dir{{0,1},{0,-1},{1,0},{-1,0}};  
        int step = 0;  
        int flag = false;  
        int res = -1;  
        while ((!flag) && (!dq1.empty()) || (!dq2.empty())) {  
            step += 1;  
            int t = dqw.size();  
            for (int i = 0; i < t; i++) {  
                int x = dqw.front().first;  
                int y = dqw.front().second;  
                dqw.pop_front();  
                for (int j = 0; j < 4; j++) {  
                    int xx = x + dir[j][0];  
                    int yy = y + dir[j][1];  
                    if (xx <= 0 || xx > n || yy <= 0 || yy > m || vim[xx][yy] == 3) continue;  
                    vim[xx][yy] = 3;  
                    dqw.push_back(make_pair(xx,yy));  
                }  
            }  
            t = dq1.size();  
            for (int i = 0; i < t; i++) {  
                int x = dq1.front().first;  
                int y = dq1.front().second;  
                dq1.pop_front();  
                for (int j = 0; j < 4; j++) {  
                    int xx = x + dir[j][0];  
                    int yy = y + dir[j][1];  
                    if (xx <= 0 || xx > n || yy <= 0 || yy > m || vim[xx][yy] == 3|| vim[xx][yy] == 1) continue;  
                    if (vim[xx][yy] == 2) {  
                        flag = true;  
                        if (res == -1) res = step;  
                    }  
                    if (vim[xx][yy] == 0) {  
                        vim[xx][yy] = 1;  
                        dq1.push_back(make_pair(xx,yy));  
                    }  
                }  
            }  
            t = dq2.size();  
            for (int i = 0; i < t; i++) {  
                int x = dq2.front().first;  
                int y = dq2.front().second;  
                dq2.pop_front();  
                for (int j = 0; j < 4; j++) {  
                    int xx = x + dir[j][0];  
                    int yy = y + dir[j][1];  
                    if (xx <= 0 || xx > n || yy <= 0 || yy > m || vim[xx][yy] == 3 || vim[xx][yy] == 2) continue;  
                    if (vim[xx][yy] == 1) {  
                        flag = true;  
                        if (res == -1) res = step;  
                    }  
                    if (vim[xx][yy] == 0) {  
                        vim[xx][yy] = 2;  
                        dq2.push_back(make_pair(xx,yy));  
                    }  
                }  
            }  
        }  
        if (flag) cout << res << endl;  
        else cout << -1 << endl;  
    }  
}  
// 64 位输出请用 printf("%lld")

标签:9.19,比特,int,笔试,long,vim,yy,++,xx
From: https://www.cnblogs.com/tanch25/p/18421384

相关文章

  • 2024.9.19
    双向链表插入:即在单链表插入的基础上增加对前指针的修改循环链表:即将尾部结点的next从NULL改为指向头指针线性表的应用:1.线性表的合并(LB合并到LA中):将LB中元素逐个取出,在LA中进行逐个查访,不存在就插入。2.有序表的合并(LA,LB合并到LC):对LA,LB中元素依次比大小后插入。链式......
  • java学习9.19
    结合前端,在本地运行实现登陆操作。将在输入框的数据传给服务器,服务器再通过调用数据库的数据进行对比,实现简单的判断逻辑到这里的我就感觉内容多了起来,在之前连接数据库,数据库操作的时候,跟着教程走,只是知道简单的用法也能在之后自行配置这里的话数据库等操作变成了一个环节,还有......
  • C语言指针进阶笔试题(含解析)
    笔试题1:intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); return0;} 解析:*(a+1),a是首元素的地址,加1之后就是第二个元素的地址,解引用就是2。ptr是&a+1,取出的是整个数组的地址,加1跳过整个数组:强转为int......
  • 2024.09.19短时训练赛总结
    $T1$感觉没有蓝,只有中绿左右。赛时写了正解,漏了个$+$号,寄了,然后逆元处理了$inv$,但是不知道为什么写的是快速幂,于是就T了。考虑枚举两端改变,中间随便的区间$[i,j]$,然后乱搞即可。$\color{black}{zzzcr}$有一个$O(n)$的做法是考虑双指针,然后对于有交的区......
  • 【2024潇湘夜雨】WIN11_Pro_21H2.22000.3197软件选装纯净特别版9.19
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_21H2.22000.3197.2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也不要在意,可能部分优化不适用。3.OS版本号为22000.3197。......
  • 【面试经验】2024年9月滴滴后端笔试 java
    比较简单,两题编程。选择题好像是20题,有部分不确定,有C++的几题。题目记不清了,凭印象写一下。编程题第一题充电第一题:n个玩具,m电量,尽可能让一个大的区间内的玩具的电量充满。输出充满电的玩具个数。双指针+滑动窗口。importjava.util.Scanner;publicclassMa......
  • 我在使用C语言编程的时候可以完全了解内存中数据的情况,每一个字节每一个比特都能了如
    在Rust中,虽然编译器默认会帮助你管理内存,提供安全的抽象,但你仍然可以像在C语言中一样,完全掌控每个字节、每个位的操作。Rust提供了多种方式来实现对内存的精细控制,只是默认情况下这些操作受到更多的安全检查和限制。以下是一些方法,帮助你在Rust中实现对内存的精确控制:1.......
  • 58. 区间和(第九期模拟笔试)
    中秋节摆了一天,感觉畏难情绪一直困扰着我,要好好调制状态才行。#include<iostream>#include<vector>usingnamespacestd;intmain(){intn=0;cin>>n;vector<int>sum(n,0);for(inti=0;i<n;++i){intnum;cin>>......
  • 360 9.14笔试
    第二题大模拟真的有点折磨了第一题给出m种饮料,每种饮料只有一杯,接下来有n个客人,每个客人有两种想喝的饮料,请问最多能满足多少位客人。数据范围比较小n=20,所以直接暴力求解#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>......
  • 虾皮9.14笔试
    三道都是简化的板子题第一题给出每个位置的过路费,求从左上角到右下角的最小花费是多少。只允许往下或者往右走。数据范围只有100直接暴力搜索即可。intminPathSum(vector<vector<int>>&grid){intm=grid.size();intn=grid[0].size();intres=......