Educational Codeforces Round 185 (Rated for Div. 2)A-C

A. Maximum Neighborhood

ideas:

找规律,我们会发现对于任意一个数的价值是由"上,下,左,右"和他自己的总和

复制代码
    k-n
k-1  k	k+1
    k+n

总价值就是k*5

去除边界的特殊情况即可。

code:

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef long long ll;

void solve()
{
    int n;
    cin>>n;
    int res=0;
    int k=1,ans=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            ans=k*5;
            if(i==0)ans-=k-n;
            if(i==n-1)ans-=k+n;
            if(j==0)ans-=k-1;
            if(j==n-1)ans-=k+1;
            res=max(res,ans);
            k++;
        }
    }
    cout<<res<<endl;
}

int main ()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int t=1;
    cin>>t;
    while(t--)
        solve();
    return 0;
} 

B. Addition on a Segment

ideas:

起初一个全为0的数组,对它进行n次操作,每次选择一个区间,区间里的每一个数+1,问最长的区间长度。

首先我们看0,0所在的位置是不会被操作的,我们尽量放到一边去,这样才能最大化操作区间长度

其次我们看后面不为0的数,如果每次只操作一个长度为1的区间,最后他们的和一定为n,那么不为n(只能大于n),则就说明有更长的操作区间,于是长度为
sum−n+1sum-n+1sum−n+1

最后要于这两个约束求最小。

code:

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef long long ll;

void solve()
{
    int n;
    cin>>n;
    ll sum=0,cnt=0;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        sum+=x;
        if(x==0)cnt++;
    }

    ll ans=min(sum-n+1,n-cnt);
    cout<<ans<<endl;
}

int main ()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int t=1;
    cin>>t;
    while(t--)
        solve();
    return 0;
} 

C. Quotient and Remainder

ideas:

我们要进行qr匹配,通过题目的要求进行数学推到:
q=x/y&&r=xmodyq=x/y\&\&r=xmodyq=x/y&&r=xmody
x=q∗y+r(1<=y<x<=k)q∗y+r<=kr<y \begin{gathered} x=q*y+r(1<=y<x<=k) \\q*y+r<=k \\r<y \end{gathered} x=q∗y+r(1<=y<x<=k)q∗y+r<=kr<y

关于第三个不等式:r=xmody,r就不可能比y

于是我们可以得出r的表达式:

我们要去匹配qr所以要建立他们的关系式

显然得出y的表达式是毫不费力的,我们再根据第三个不等式,即可得出:
r<kq+1 r< \frac{k}{q+1} r<q+1k

这里好像得到了我们想要的关系式,仔细想想这只有对y的约束

x的约束:
q∗(r+1)+r<kr<k−qq+1 q*(r+1)+r<k\\ r<\frac{k-q}{q+1} q∗(r+1)+r<kr<q+1k−q

这个约束是由y的约束得过来的

于是我们得到了完整的qr的关系,通过双指针的查找即可。

code:

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
typedef long long ll;

void solve() {
    ll n, k;
    cin >> n >> k;
    
    vector<ll> q(n), r(n);
    for (int i = 0; i < n; i++) cin >> q[i];
    for (int i = 0; i < n; i++) cin >> r[i];
    
    vector<ll> a;
    for (int i = 0; i < n; i++) {
        a.push_back((k - q[i]) / (q[i] + 1));
    }
    sort(a.begin(), a.end());
    sort(r.begin(), r.end());
    
    ll cnt = 0;
    int j = 0;
    
    for (int i = 0; i < n && j < n; i++) {
        if (r[j] <= a[i]) {
            cnt++;
            j++;
        }
    }
    
    cout << cnt << endl;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int t;
    cin >> t;
    while (t--) solve();
    return 0;
}
相关推荐
aramae7 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能7 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
无敌贵点大王7 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868710 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
INGNIGHT11 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805411 小时前
C++常见八股
数据结构·c++·算法
qq_1998868712 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力
青山是哪个青山12 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法