首页 > 其他分享 >牛客周赛46(思路待补)

牛客周赛46(思路待补)

时间:2024-06-13 21:21:56浏览次数:20  
标签:const 牛客 待补 res ll long 46 int ans

比赛链接:牛客周赛46


赛时感受

       本场参加的是内测,多亏了内测群的佬提供的思路,得以AK。
image
       ABC都是简单的签到题,D稍微需要分类一下,EF有点算法知识,E可以使用前缀和+二分搜索过掉,但是听说好像还能使用离散化树状数组等等,F是数学知识,隔板法和求质数、求组合。
       一开始脑袋懵了,以为C题的数据太大暴力过不了,转去写欧拉筛求质数妄图通过质数求出x的小于n的因子个数,后面发现更难处理了,后面突然想起直接对x暴力求解是O(n½)的时间复杂度,然后直接暴力过掉。F题思考了很久,最开始连暴力的思路也没有,后面求出了x可以拆出来的质数个数,本来想对每个位置求组合,但是对于x = 4, y = 3,x = 2 * 2,可能第一个乘数排列得到第一个2,第二个乘数可能排列得到第二个2,但是同样可能第一个乘数排列取到第二个2,第二个乘数排列取到第一个二,但是此时两种情况是相同的,重复计算了同一种情况,一直卡在这个点,还是数学薄弱了。


A

思路

       在有热的抹茶的时候先吃热抹茶,再吃冰抹茶,当冰抹茶吃完但是热抹茶还有时,需要判断当前还能吃热抹茶吗,若热抹茶吃完了病抹茶还没吃完,就直接吃掉剩下所有的冰抹茶。

题解

# python
s = list(map(int, input().split()))
if s[0] > s[1] * 2:
    print(s[1] + s[0])
else :
    print(s[0] + s[0] // 2)

 

B

思路

       将输入的第x种茶的美味值赋值为0,然后对没位置数组进行排序,计算没位置最大的茶的种数就可以知道有多少种红茶可以选择了。

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const int N = 1e5 + 10;
ll a[N];

int main() {
    int n, x;
    cin >> n >> x;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    a[x] = 0;
    sort(a + 1, a + 1 + n);
    int i = n;
    while (i >= 1) {
        if (a[i] == a[i - 1]) {
            i--;
        } else {
            break;
        }
    }

    cout << n - i + 1 << endl;
    return 0;
}

 

C

思路

题解

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const int N = 1e6 + 10;

int main() {
    ll n, x, ans = 0;
    cin >> n >> x;
    for (int i = 1; i <= x / i; i++) {
        if (x % i == 0 && i <= n) {
            ans++;
            if (i != (x / i) && x % (x / i) == 0 && (x / i) <= n) {
                ans++;
            }
        }
    }
    cout << (ans % 2 == 0 ? "OFF" : "ON") << endl;

    return 0;
}

 

D

思路

题解

#include <bits/stdc++.h>
using namespace std;

#define ll long long 
const int N = 1e5 + 10;

int main()  {
    int t;
    cin >> t;
    while (t--) {
        ll a[4], k;
        cin >> a[1] >> a[2] >> a[3] >> k;
        {
            sort(a + 1, a + 4);
            if (a[1] == k || a[2] == k || a[3] == k) {
                cout << 0 << endl;
            }
            else if (k == 0) {
                cout << 1 << endl;
            } 
            else if (k == 1) {
                if (a[1] == 0 && (a[2] != 1 || a[3] != 1)) {
                    cout << 1 << endl;
                } 
                else {
                    cout << 2 << endl;
                }
            }
            else if (k == 2) {
                if (a[1] == 0 && (a[2] == 1 || a[3] == 1)) {
                    cout << 1 << endl;
                }
                else if (a[1] == 0) {
                    cout << 2 << endl;
                }
                else if (a[1] == 1) {
                    cout << 2 << endl;
                }
                else {
                    cout << 3 << endl;
                }
            }
            else {
                cout << -1 << endl;
            }
        }
    } 
 
    return 0;
}

 

E

思路

题解

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const int N = 1e5 + 10;
struct p {
    int a, b;
}food[N];

bool cmp(struct p x, struct p y) {
    return x.b < y.b;
}

ll all_sum[N], sum[N];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> food[i].a;
    }
    for (int j = 1; j <= n; j++) {
        cin >> food[j].b;
    }
    
    sort(food + 1, food + 1 + n, cmp);
    
    for (int i = 1; i <= n; i++) {
        all_sum[i] = food[i].a * food[i].b + all_sum[i - 1];
        sum[i] = food[i].a + sum[i - 1];
    }
    
    int q;
    cin >> q;
    for (int i = 1; i <= n; i++) {
        ll l = 1, r = n, res = 0, mid;
        int k;
        cin >> k;
        while (l <= r) {
            mid = (l + r) >> 1;
            if (food[mid].b <= k) {
                res = mid;
                l = mid + 1;
            }
            else {
                r = mid - 1;
            }
        }
        cout << all_sum[res] + (sum[n] - sum[res]) * k << endl;
    }

    return 0;
}

 

F

思路

题解

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const int N = 1e5 + 10;
const ll mod = 1e9 + 7;
bool vis[N];
int isprime[N];
void prime() {
    for (int i = 2; i <= 5e4; i++) {
        if (vis[i] == false) isprime[++isprime[0]] = i;
        for (int j = 1; j <= isprime[0] && i * isprime[j] <= 5e4; j++) {
            vis[i * isprime[j]] = true;
            if (i % isprime[j] == 0) break;
        }
    }
}

ll qsm(ll x, ll y) {
    ll res = 1;
    while (y) {
        if (y & 1) {
            res *= x;
            res %= mod;
        }
        x *= x;
        y >>= 1;
        x %= mod;
    }
    return res;
}

ll inverse(ll x) {
    return qsm(x, mod - 2);
}

ll c(ll n, ll m) {
    ll res = 1;
    for (ll i = n; i > (n - m); i--) {
        res *= i;
        res %= mod;
    }
    ll x = 1;
    for (ll i = 1; i <= m; i++) {
        x *= i;
        x %= mod;
    }
    res *= inverse(x);
    return res % mod;
}

int main() {
    int t;
    cin >> t;
    prime();
    while (t--) {
        ll x, y, ans = 0, res = 1;
        cin >> x >> y;
        for (int i = 1; i <= isprime[0]; i++) {
            if (isprime[i] > x) break;
            if (x % isprime[i] == 0) {
                while (x % isprime[i] == 0) {
                    x /= isprime[i];
                    ans++;
                }
            }
            if (ans == 0) continue;
            res *= c(ans + y - 1, ans);
            res %= mod;
            ans = 0;
        }
        if (x > 1) {
            res *= y;
            res %= mod;
        }
        cout << res << endl;
    }
    return 0;
}

标签:const,牛客,待补,res,ll,long,46,int,ans
From: https://www.cnblogs.com/againss/p/18246784

相关文章

  • 二叉搜索树(待补充)
    二叉搜索树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左,右子树也分别为二叉搜索树;没有键值相等的节点。用Java来表示二叉树p......
  • AP3462 4-30V 输入、1.2A 固定输出同步降压驱动器
    产品描述 AP3462是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现1.2A的连续电流输出。AP3462具有优秀的恒压特性。AP3462采用电流模式的环路控制原理,实现了快速的动态响应。AP3462工作开关频率为220kHz,具有良好的EMI特性。AP3462内置有......
  • AP3464 4-30V 输入、2.4A 输出同步降压驱动器
    产品描述 AP3464是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现2.4A的连续电流输出。通过调节FB端口的分压电阻,设定输出1.8V到28V的稳定电压。AP3464具有优秀的恒压/恒流(CC/CV)特性。AP3464采用电流模式的环路控制原理,实现了快速的动态......
  • AP3465 4-30V 输入、3A 输出同步降压驱动器
    产品描述 AP3465是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现3A的连续电流输出。通过调节FB端口的分压电阻,设定输出1.8V到28V的稳定电压。AP3465具有优秀的恒压/恒流(CC/CV)特性。AP3465采用电流模式的环路控制原理,实现了快速的动态响......
  • 【肌电信号EMG】基于matlab低通滤波器肌肉激活度【含Matlab源码 4665期】
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • 【背包问题】基于matlab混合遗传算法求解背包问题(目标函数:总重 总价值)【含Matlab源码
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • 牛客周赛Ronud 46
    比赛链接A乐奈吃冰思路:我感觉这题才是最难的,可恶,wa了好几次,型号是OI赛制模拟,假设有x份冰,y份热,我们能吃min(x/2,y)份热,但我们可以吃完所有点冰Code:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()#definePIIp......
  • redis自学(46)键值设计
    Redis键值设计优雅的key结构Redis的Key虽然可以自定义,到但是最好遵循下面的几个最佳实践约定:l 遵循基本格式:[业务名称]:[数据名]:[id]l 长度不超过44字节(长度越小,占用的内存越少)l 不包含特殊字符  优点:①可读性强②避免key冲突③方便管理④更节省内存:ke......
  • 线程池(待补齐)
    #include<stdio.h>#include<stdbool.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<strings.h>#include<errno.h>#include<pthread.h>#defineMAX_WAITING_TASKS1000//处于等待状态的线程数量......
  • 牛客周赛 Round 46 题解 C++
    目录 A 乐奈吃冰B 素世喝茶C 爱音开灯D 小灯做题E 立希喂猫F 祥子拆团 A 乐奈吃冰#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<vector>#include<unordered_map>......