HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

Codeforces Round #767 (Div. 2)

A. Download More RAM

题目描述: 给你两个长度为n的数组a,b,再给你一个初始值k,你可以使用数组b增加k的值,但前提是你当前的k要大于等于将要使用的数组b对应元素的下标,问k最大能到多少。

思路: 比较明显的贪心,将两个数组捆绑然后按照a从小到大排序,然后模拟即可。

时间复杂度:O(nlogn)
** 代码**

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define PII pair<int, int>
#define x first
#define y second
const int maxn = 1e6 + 10;
const int INF = 0x3f3f3f3f;
bool cmp(pair<int, int> a, pair<int, int> b)
{
return a.second < b.second; //从小到大排序
}
const ll M = 11092019;
const int N = 100010;
int a[N][3];
struct node
{
int a;
int b;
bool operator <(node &M)
{
return a<M.a;
}
}s[N];
int main()
{
int t;cin>>t;
while(t--){
int n,k;cin>>n>>k;
for(int i=0;i<n;i++){
cin>>s[i].a;
}
for(int i=0;i<n;i++){
cin>>s[i].b;
}
sort(s,s+n);
for(int i=0;i<n;i++)
{
if(k>=s[i].a) k+=s[i].b;
else break;
}
cout<<k<<endl;
}
return 0;
}

B. GCD Arrays

题目描述:
给定一个排列a,元素范围为[lr , rs],再给你一个整数k,你可以执行下列操作不超过k次:

从a中取出两个元素
将两数相乘
将乘积插入原数组的末尾
问是否能通过上述操作使得数组的最大公约数大于1。

思路: 考虑到奇数乘偶数就可以变成偶数,偶数的最大公约数至少为2,故可以统计区间内奇数的个数,如果超过k,就不能达成目的,否则能;需要特判长度为1的奇数序列。

时间复杂度:O(T)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define PII pair<int, int>
#define x first
#define y second
const int maxn = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const ll M = 11092019;
const int N = 100010;
int main()
{
int t;cin>>t;
while(t--){
int l,r,k;
cin>>l>>r>>k;
int num=(r-l+1)-(r/2-(l-1)/2);
if(l==r){
if(l>1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else{
if(k>=num) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}

原文

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/15840910.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(36)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起