首页 > 其他分享 >《看了受制了》第二十四天,7道题,合计114道题

《看了受制了》第二十四天,7道题,合计114道题

时间:2023-09-24 14:23:16浏览次数:53  
标签:道题 return int res ll 114 第二十四 include Mod

2023年9月23日

今天周六,尽力做了做,虽然Acwing没能AK。。没读懂题。

Acwing5152 简单输出

题目理解

基础语法

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}


int main() {


    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        int t;
        cin >> t;
        for(int j = 1; j <= t; j++)
            cout << j << " ";
        cout << endl;
    }

    return 0;
}

Acwing5153 删除

题目理解

改题目难点在于,如何快速判断一个数是否为8的倍数。

  • 当且仅当一个数的最后一位能被2或5整除,这个数就能被2或5整除。

  • 当且仅当一个数的最后两位能被4或25整除,这个数就能被4或25整除。

  • 当且仅当一个人的最后三位能被8或125整除,这个数就能被8或125整除。

  • 当且仅当一个数各个位上的数字之和能被3或9整除,这个数就能被3或9整除

  • 当且仅当一个数的最后一位的两倍与剩下的数之差能被7整除(或最后三位与剩下的数只差能被7正整除),这个数就能被7整除。

  • 当且仅当一个数的奇数位上的数之和与偶数位上的数之和的差值为11的倍数。

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}

string s;

int main() {

    cin >> s;


    for(int i = 0 ; i < s.size(); i++)
        for(int j = i + 1; j < s.size(); j++)
            for(int k = j + 1; k < s.size(); k++)
            {
                int t = (int)(s[i] - 48) * 100 + (int)(s[j] - 48) * 10 + (int)(s[k] - 48);
                if(t % 8 == 0 && i < j && j < k)
                {
                    cout << "YES" << endl;
                    cout << t;
                    return 0;
                }
            }

    for(int i = 0 ; i < s.size(); i++)
        for(int j = i + 1; j < s.size(); j++)
        {
            int t = (int)(s[i] - 48) * 10 + (int)(s[j] - 48);
            if(t % 8 == 0 && i < j)
            {
                cout << "YES" << endl;
                cout << t;
                return 0;
            }
        }

    for(int i = 0 ; i < s.size(); i++)
    {
        int t = (int)(s[i] - 48);
        if(t % 8 == 0)
        {
            cout << "YES" << endl;
            cout << t;
            return 0;
        }
    }
    cout << "NO";
    return 0;
}

Acwing5155 牛的基因学

题目理解

这个题目读懂以后非常EZ。哎,阅读理解不过关。。。
1. 理解最大值

我们可以得到以下几点:

  • 就是相同字符的数量
  • 我们需要不断进行左移
    2. 如何构造最大值

    注意一下几点:
  • 观察这个序列,我们可以看当i为0,j0 1 2时,它的基因虽然是在左移,但是达到的效果是和每一个对比!!
  • 观察下面的当i为不同的情况也是一样的。
  • 那么最大值,就是n个出现次数最多的!!
  • 所以我们可以让构造的串就是n个出现次数最多的字符。

那么当我们长度为n的串,出现次数最多的个数为x,那么我们的答案就是:

\[x^n \]

最后在取模即可,快速幂、xn次枚举都可以~

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}

ll n, cnt = 0;
string s;
ll a[30];


int main() {

    cin >> n >> s;

    for(int i = 0 ; i < n; i++)
        a[(int)(s[i]) - 64]++;

    sort(a + 1, a + 30);

    ll res = 0;
    ll maxx = a[29];

    for(int i = 29; i >= 26; i--)
        if(maxx == a[i])
            cnt++;

    cout << qmi(cnt, n);

    return 0;
}

Acwing1353 滑雪场设计

题目理解

因为雪山的高度,都是0 ~ 100,那么高度差有是17,直接枚举每一个区间即可。

代码实现

#include <iostream>
using namespace std;
int a[1002], n, m, ans = 0x3f3f3f3f, l = 0;
int main() {
    cin >> n;
    for(int i = 1; i <= n; i ++ ) cin >> a[i];
    for(l = 0; l <= 100 - 17; l ++ ) {
        m = 0;
        for(int i = 1; i <= n; i ++ ) {
            if(a[i] < l) m += (a[i] - l) * (a[i] - l);
            else if(a[i] > l + 17)  m += (a[i] -  l - 17) * (a[i] -  l - 17);
        }
        ans = min(ans, m);
    }
    cout << ans;
}

Acwing903 昂贵的聘礼

题目理解

这个题目读完以后建图方式不难,就是每一个替代品,到主物品进行建图,这个我也可以达到。
难点在于,枚举的方式。我一开始枚举的方式是不同的物品的起点,然后阶级限制是abs(le[i] - now) <= m,这样的话枚举的阶级限制就成了2m,与题意的m不符合的。
那么就需要更改我们的枚举方式,采用枚举酋长的等级。因为必然是要和酋长进行交换的,那么我们只需要从酋长的等级 - m,开始枚举,定上下界即可。

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}



const int N = 110;

int g[N][N], d[N];
int p[N], le[N];
bool st[N];
int n, m, res = INF;

int dijkstra(int u)
{
    memset(d, INF, sizeof d);
    memset(st, 0, sizeof st);

    d[0] = 0;


    for(int i = 1; i <= n + 1; i++)
    {
        int t = -1;
        for(int j = 0; j <= n; j++)
            if(!st[j] && (t == -1 || d[j] < d[t]))
                t = j;

        st[t] = true;

        for(int j = 1; j <= n; j++)
            if(d[j] > d[t] + g[t][j] && le[j] <= u + m && le[j] >= u)
                d[j] = d[t] + g[t][j];
    }

    return d[1];
}

int main() {

    memset(g, INF, sizeof g);
    scanf("%d%d", &m, &n);

    for(int i = 0; i <= n; i++) g[i][i] = 0;

    for(int i = 1; i <= n; i++)
    {
        int cnt;
        scanf("%d%d%d", &p[i], &le[i], &cnt);
        g[0][i] = min(g[0][i], p[i]);
        while(cnt--)
        {
            int a, b;
            scanf("%d%d", &a, &b);
            g[a][i] = min(g[a][i], b);
        }
    }

    for(int i = le[1] - m; i <= le[1]; i++)
        res = min(res, dijkstra(i));

    cout << res;
    return 0;
}

AtcoderABC321 A

题目理解

判断是否严格下降

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
vector<int> vec;
int n, X;
int a[110];
int b[110];
bool check(int mid)
{

    memcpy(b, a, sizeof a);
    b[n] = mid;
    sort(b + 1, b + 1 + n);
    int p = 0;

    for(int i = 2; i < n; i++)
        p += b[i];
    
    if(p >= X) return true;

    return false;
}

int main() {
    cin >> n >> X;
    int sum = 0;
    for(int i = 1; i <= n - 1; i++)
    {
        cin >> a[i];
        sum += a[i];
    }

    sort(a + 1, a + n);

    if(sum - a[1] < X)
    {
        cout << -1;
    }else{
        int l = 0, r = 100;
        while(l < r)
        {
            int mid = (l + r) >> 1;

            if(check(mid)) r = mid;
            else l = mid + 1;
        }
        cout << l;
    }

    return 0;
}

AtcoderABC321 B

题目理解

如果和减最小的 < x,就根本不行,输出0即可。不然二分找答案。

代码实现

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;

const int Mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll qmi(ll a, ll b){
    ll res = 1;
    while(b)
    {
        if(b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x){ return qmi(x, Mod - 2);}
ll mo(ll x){ return (x % Mod + Mod) % Mod;}
vector<int> vec;
int n, X;
int a[110];
int b[110];
bool check(int mid)
{

    memcpy(b, a, sizeof a);
    b[n] = mid;
    sort(b + 1, b + 1 + n);
    int p = 0;

    for(int i = 2; i < n; i++)
        p += b[i];
    
    if(p >= X) return true;

    return false;
}

int main() {
    cin >> n >> X;
    int sum = 0;
    for(int i = 1; i <= n - 1; i++)
    {
        cin >> a[i];
        sum += a[i];
    }

    sort(a + 1, a + n);

    if(sum - a[1] < X)
    {
        cout << -1;
    }else{
        int l = 0, r = 100;
        while(l < r)
        {
            int mid = (l + r) >> 1;

            if(check(mid)) r = mid;
            else l = mid + 1;
        }
        cout << l;
    }

    return 0;
}

标签:道题,return,int,res,ll,114,第二十四,include,Mod
From: https://www.cnblogs.com/wxzcch/p/17725931.html

相关文章

  • CodeForces 1149D Abandoning Roads
    洛谷传送门CF传送门考虑一条\(1\toi\)的路径是否在最小生成树上。称边权为\(a\)的边为轻边,边权为\(b\)的边为重边。轻边若不成环则一定在最小生成树上,因此先把轻边合并,这样形成了若干连通块。那么如果两点在一个连通块,它们只能通过轻边互达。同时,因为是树上路径,所......
  • 《看了受制了》第二十三天,4道题,合计107道题
    2023年9月22日哎,再一次意识到弱小。。Acwing1127香甜的黄油题目理解求n遍最短路,求出每个点到某个点到所有牧场的最短路即可。代码实现#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<unord......
  • currently, chromedriver 114.0.5735.90 is recommended for chrome 114.*, so it is
    报错原因是驱动和浏览器不匹配解决办法1.下载低版本的谷歌浏览器  本次使用的是114  下载地址:https://downzen.com/en/windows/google-chrome/download/11405735199/  2.下载谷歌浏览器的插件https://registry.npmmirror.com/binary.html?path=chromedriver/114.......
  • 041802114金晶的自我介绍~
    我的学号041802114;我是退役大学生士兵金晶,在部队是一名医疗救护员;我的爱好是运动还有看书;推荐紫荆园二楼的漳州鸭面;最近常听的歌我推荐一首lauv的《parisintherain》;想要说些什么呢,那就是“勇敢的人先享受世界”......
  • 《看了受制了》第二十天,7道题,合计97道
    2023年9月19日牛客,ACWING图论!思前想后,这个图论一定要从0到0.1!!!牛客周赛游游的字符串题目理解输出k个you,然后剩下的都是o即可代码实现#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<queue>#include<map>#definexfirst#def......
  • 洛谷 P1143. 进制转换
    进制转换题目描述请你编一程序实现两种不同进制之间的数据转换。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制$n\(2\len\le16)$,第二行是一个$n$进制数,若$n>10$则用大写字母$\verb!A!\sim\verb!F!$表示数码$10\sim15$,并且该$n$进制数对应的十进制的......
  • 前端歌谣的刷题之路-第二十四题-阶乘
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目请......
  • 114. 二叉树展开为链表
    给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,......
  • 前端歌谣的刷题之路-第二十四题-阶乘
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 《看了受制了》第二十天,6道题,合计90道题
    2023年9月18日今天上午写了Atcoder的翻译,以后对于我这种菜鸡来说,多多少少有点用了。前两个题是贪心,第三个是BFS。Acwing908最大不相交区间数量题目理解全部按右端点进行排序然后如果下一个点的左,比我的右端点还大,那么就肯定不在一个区间然后更新目前的右端点即可代码实......