首页 > 其他分享 >YL 模拟赛总结 10

YL 模拟赛总结 10

时间:2024-03-02 17:23:48浏览次数:19  
标签:二分 10 YL int 草地 mid 1031 模拟

Problem


T1

二分板子。

对于 \(c_i\) 降序排序,然后二分 \(h\) 指数,在 check 中贪心地使用综述增加引用次数即可。

T2

通过观察可以发现,在一篇论文的贡献列表中,若某一位置出现了比它前面的名字的字典序更小的情况,则说明从这个位置开始,后面的人的资历一定 \(\ge\) 前面的人。

根据这一性质,我们对于每一条贡献列表,都去寻找这样的位置,然后更新答案数组即可。

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

int k,n;
string a[131];
unordered_map<string,int> m;
char ans[131][131];

int main(){
    cin>>k>>n;
    for(int i=1;i<=n;i++){
        string s;
        cin>>s,m[s]=i;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j) ans[i][j]='B';
            else ans[i][j]='?';
        }
    }
    while(k--){
        for(int i=1,p=1;i<=n;i++){
            cin>>a[i];
            if(a[i]<a[i-1]) p=i;
            for(int j=1;j<p;j++)
                ans[m[a[j]]][m[a[i]]]='0',ans[m[a[i]]][m[a[j]]]='1';
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++) cout<<ans[i][j];
        cout<<'\n';
    }
    return 0;
}

T3

我们反向思考,考虑每块草地可以让几对牛交友。

显然,一块草地相邻的位置若拥有 \(\ge 2\) 头牛,则可以让一对牛交友。

但是,有可能这块草地与其他草地重复让某一对牛交友。

这种情况只会出现于两块草地呈斜对角的状态时,特判一下即可。

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

int n,m,ans;
char mp[1031][1031];
int cnt[1031][1031];
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};

int calc(int x,int y){
    cnt[x][y]=0;
    for(int i=0;i<4;i++)
        cnt[x][y]+=(mp[x+dx[i]][y+dy[i]]=='C');
    return cnt[x][y]>=2;
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>mp[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            if(mp[i][j]=='G'){
                ans+=calc(i,j);
                if(cnt[i][j]==2&&mp[i-1][j]=='C'){
                    ans-=(mp[i][j-1]=='C'&&cnt[i-1][j-1]==2);
                    ans-=(mp[i][j+1]=='C'&&cnt[i-1][j+1]==2);
                }
            }
        }
    cout<<ans;
    return 0;
}

T4

又是二分板子(

首先,朴素的想法是二分 \(X\) 的值,然后模拟 \(K\) 天还奶的过程进行校验。

但这样做时间复杂度是 \(O(n)\),无法通过。

我们发现,题目中的 \(\frac{N-G}{X}\) 会随着时间的推移慢慢变小。

那么当它某一时刻 \(\le m\) 时,那么它接下来将一直会变小,所以 \(\frac{N-G}{X}\) 的值会恒定为 \(m\),此时就没必要继续模拟下去了,直接使用数学公式校验即可。

并且,我们也无需一天一天地模拟。具体见 here

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

int n,k,m;

bool check(int x){
    int s=0;
    for(int d=0;d<k;){
        int y=(n-s)/x;
        if(y<=m) return s+(k-d)*m>=n;
        int tme=min(k-d,(n-s)%x/y+1);
        s+=tme*y,d+=tme;
    }
    return s>=n;
}

signed main(){
    //freopen("loan.in","r",stdin);
    //freopen("loan.out","w",stdout);
    cin>>n>>k>>m;
    int l=0,r=n+1;
    while(l+1<r){
        int mid=(l+r)>>1;
        if(check(mid)) l=mid;
        else r=mid;
    }
    cout<<l;
    return 0;
}

标签:二分,10,YL,int,草地,mid,1031,模拟
From: https://www.cnblogs.com/XOF-0-0/p/18048923

相关文章

  • YL 模拟赛总结 9
    ProblemT1我们考虑一种贪心策略:对于价格前\(n-1\)小的咖啡,我们求出一种最优方案使得按照此方案买完咖啡后钱数\(\ge20\)且最接近\(20\)。至于如何求出最优方案,进行一遍01背包即可。#include<bits/stdc++.h>usingnamespacestd;intn,k;inta[1031],dp[1031];i......
  • YL 模拟赛总结 6
    ProblemT1为了方便处理,我们令男生为\(1\),女生为\(-1\)。求一遍前缀和\(sum\),若存在两个下标\(l,r\)使得\(sum_l=sum_r\),则说明区间\([l+1,r]\)的和为\(0\),即男女人数相等。在这样的区间中取长度最大的即可。需要特殊处理\(sum_0\)。#include<bits/stdc++.h>#defi......
  • YL 模拟赛总结 7
    ProblemT1预处理出前\(10^4\)个格子需要填什么数,然后输出即可。具体地,我们记录\(e\)为当前层数,\(o\)为上一层的最后一个的位置,\(last\)为上一个填的格子的位置。我们知道,一个格子要么在一层的起点,要么在一层的中间,要么在一层的末尾。枚举\(1\sim5\)分别对这三种情......
  • YL 模拟赛总结 11
    ProblemT1略。T2略。T3结论题。令所有牛的最终饥饿值为\(x\),则分别对于每一头牛进行考虑:对于第一头牛,它需要的最少玉米袋数为\(h_1-x\);对于第二头牛,它单独需要的最少玉米袋数为\(h_2-x\),而第一头牛已经用了\(h_1-x\)袋玉米,因此它需要的最少玉米袋数为\(h_2-x-......
  • CF10E 题解
    传送门有\(n\)种货币。找一个最小的金额\(x\),使得贪心法付款不是最优解;如果贪心法始终都是最优解,输出\(-1\)。\((n\le400)\)将货币集合记作一个\(n\)维向量\(C=(c_1,c_2,\dots,c_n)\)。对于金额\(x\)的一个表示法,也记作一个\(n\)维向量\(V\)。即\(C\timesV=x\)。......
  • Go 100 mistakes - #89: Writing inaccurate benchmarks
          ......
  • 3.1~3.10解题报告
    [cf1525E]AssimilationIV依据题面,可以知道每个点只会被计算一次,所以可以从点出发,求每个点被覆盖的概率,正着计算会有很多重复,所以考虑先算出不可能的情况,在与1作差,很明显,若所有城市到点A的距离都小于n,则一定成立,如果有一个不满足,则若此城市第一个放置,就要分两种情况,若其余距离均......
  • 解决Puppeteersharp 被检测到的方法, 顺带学习了js如何实现 模拟点击拖动事件
    varlaunchOptions=newLaunchOptions{Headless=false,DefaultViewport=null,IgnoreHTTPSErrors=true,ExecutablePath=path+"\\.local-chromium\\chrome-win\\chr......
  • GAMES101 Rasterization 光栅化
    向量点乘的作用计算两个方法方向夹角计算两个方向是否接近关于两个方向的计算向量叉乘\[\vec{a}\times\vec{b}=\begin{pmatrix}y_az_b-y_bz_a\\z_ax_b-x_az_b\\x_ay_b-y_ax_b\end{pmatrix}\]\[\veca\times\vecb=A^*b=\begin{pmatrix}0&-z_a&y_a\\z_a&0&-x_a\\-y_a&x......
  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......