首页 > 其他分享 >练习记录-cf-div2-856(A-C)

练习记录-cf-div2-856(A-C)

时间:2023-04-09 17:24:52浏览次数:38  
标签:std 856 const int ll cf long str div2

vp的 写出4道 C感觉目前不是能力范围 以后有机会留下来打比赛的话再说

A - Prefix and Suffix Array

给出字符串的前缀和后缀 问是不是回文 

我采用枚举 长度为n-1和1的拼凑 但是这并不奏效 一直wa3 后来改用拼两个n/2的 就过了 如果有大佬看到了 希望能解答一下qwq

#include<bits/stdc++.h>
#define close     std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const ll MAXN = 3e5+7;
const ll mod =1e9+7;
const ll inf =0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;

int lowbit(int x){ return x&-x; }
int gcd(int x,int y){int k=0; if(x<y){k=x;x=y;y=k;}while(x%y!=0){k=x%y;x=y;y=k;}return y;}
ll _power(ll a,int b){ll ans=1,res=a;while(b){if(b&1) ans=ans*res%mod;res=res*res%mod;b>>=1;}return ans%mod;}
void solve(){
    int n;cin>>n;
    string s;
    int flag=0,cnt=0;
    string str;
    for(int i=1;i<=(n-1)*2;i++){
        cin>>s;
        if(s.length()==n/2) str=str+s;
    }
    string ss=str;
    reverse(str.begin(),str.end());
    if(ss==str) flag=1;
    if(flag) cout<<"YES\n";
    else cout<<"NO\n";
}
int main(){
    close;
    int t;cin>>t;
    while(t--)
    solve();
}
View Code

B - Not Dividing

给出一串数字 长度为n 最多2*n次操作 让后一个数不能被前一个数整除

首先 1肯定不合格 要变成2

如果 b能被a整除 说明b是a的倍数 那么当a不是1的时候 b+1/a肯定会余一个1 肯定不是倍数了 

因此 从2遍历到n 如果这个数能被前面整除 直接+1、

注: 不能加前面的 因为无法证明是正确的

#include<bits/stdc++.h>
#define close     std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const ll MAXN = 3e5+7;
const ll mod =1e9+7;
const ll inf =0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;
int a[MAXN];
int lowbit(int x){ return x&-x; }
int gcd(int x,int y){int k=0; if(x<y){k=x;x=y;y=k;}while(x%y!=0){k=x%y;x=y;y=k;}return y;}
ll _power(ll a,int b){ll ans=1,res=a;while(b){if(b&1) ans=ans*res%mod;res=res*res%mod;b>>=1;}return ans%mod;}
void solve(){
    int n;cin>>n;
    for(int i=1;i<=n;i++){
    cin>>a[i];    
    if(a[i]==1) a[i]++;
    }
    for(int i=2;i<=n;i++){
        if(a[i]%a[i-1]==0) a[i]++;
    }
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
    cout<<"\n";
}
int main(){
    int t;cin>>t;
    while(t--)
    solve();
}
View Code

C - Scoring Subsequences

给一串递增的数字  在第i轮可以选前i个数字 你可以自由选择个数 每个数相乘 每选择一个 就会/当前个数 求最终结果最大的数的个数的最大值

因此 当给出 1 1 2 时 显然只选2 是最大的  如果给出 2 4 6  显然只选 6 4 是最大的 再选一个2 会/3 是亏的

因此 我们对每一次进行一个二分  2 4 6 对应的代价是 3 2 1 我们需要通过二分寻找该数字/代价>=1的情况 然后求数字的最大数量 这个是符合二分的 因为数字/代价一定是递增的

#include<bits/stdc++.h>
#define close     std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const ll MAXN = 3e5+7;
const ll mod =1e9+7;
const ll inf =0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;
int n;
int a[MAXN];
void solve(){
    cin>>n;
//    set<int> sz;
    vector<int> sz;
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=1; 
    for(int i=1;i<=n;i++){
        if(i==1) cout<<1<<" ";
        else{
            int l=1,r=sz.size();
            while(l<=r){
                int mid=l+r>>1;
                if(sz[mid-1]<sz.size()+2-mid) l=mid+1;
                else r=mid-1;
            }
            cout<<sz.size()+1-r<<" ";
        }
        sz.push_back(a[i]);
    }
    cout<<"\n";
}
int main(){
    int t;cin>>t;
    while(t--) 
    solve();
}
View Code

我的二分写的比较丑

标签:std,856,const,int,ll,cf,long,str,div2
From: https://www.cnblogs.com/xishuiw/p/17300609.html

相关文章

  • 练习记录-cf-div2-864(A-D)
    状态不怎么好场上就写出3道还磨磨蹭蹭推错结论qwq 警钟长鸣A.LiHuaandMaze一开始以为要切割发现就把其中一个包起来就行了计算包某个块需要的最小块数#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)usingn......
  • FastCFS:再谈 选主 与 过半写:续:2节点群集 默认配置下,十分不可靠,几乎100%会发生脑裂问题
     如题:仅能由于测试。千万不要用于生产环境!“选主” 通常能够完成,无法是否有vote参与;问题在于:“过半写”的any或auto模式(即隐含的smart模式)在成功“选主“后,会运行在单节点server的群集模式下,此时,根本就无法且没有完成正常意义上的数据层的主从同步,即必然发生脑裂!数据就不一......
  • 【cf864】赛后结
    属实是失踪人口了,想了一下还是把题解打到这儿。conteset地址:https://codeforces.com/contest/1797 A.题目大意:n*m的方格上给两个点,询问最少增加的障碍格子使得这两个点不连通。解题思路:水题,但是手速有点慢。直接问靠不靠墙,靠几面墙,不靠墙答案4,靠一面答案3,靠两面答案2,取两个点......
  • 【题解】CF472G Design Tutorial: Increase the Constraints
    《正解分块+FFT跑1min,__builtin_popcount暴力跑10s》《没人写正解,CF也不卡》思路正解:分块+FFT乱搞:__builtin_popcount首先我们知道哈明距离可以用一种\(O(|字符集||S|)\)的算法求。具体考虑枚举字符集中的每一个字符,将两个串中是该字符的位置看作\(1\),不是该字......
  • FastCFS:再谈 选主 与 过半写
    这二者乍一看好像是一回事:都是要求遵循大多数原则(即过半数原则)。其实,在概念上是不同的! 选主:本质是功能角色的概念。“国不能一日无主、群龙不能无首;否则,则是”一盘散沙、溃不成军“。对于FastCFS组件的群集来说,必须要有master,这个master是在server中自动选出来的,选择mast......
  • FastCFS:FastVote-server的作用、使用的时机
     第一:fastvote-server仅仅是个简单的投票辅助服务器,所谓的投票客户端功能原生集成在fastdir、faststore服务器组件中第二:fastdir、faststore当且仅当 其群集中的servers个数为【偶数】(even)时,才去使用fastvote-server的辅助投票功能第三:当fastdir、faststore的配置中,servers......
  • CF1810E 题解
    一、题目描述:给你一个n个点,m条边的无向图,点带权,起点可任意选择。每走过一个新的点,你的能力值会+1。一开始你的能力值为0。你只能经过点权小于等于你能力值的点。每条边,每个点都可以经过无限次,问能否走遍整个图。如果可以,输出"YES"。否则输出"NO"。......
  • cf-edu-146b
    题目链接:https://codeforces.com/contest/1814/problem/B只有残缺的思路,还不足以解决这道题。完整思路:对于一个数x来说,如果一个数a除以它的余数为y,商为z,所需步数为y+z+(x-1),那么反过来(x变为它的商,z为除数,所需步数依然是不变的,可以举几个例子看看,易得。),所以我们只需要枚举\(n^(......
  • 4月CF杂题
    CodeforcesRound862(Div.2)E.ThereShouldBeaLotofMaximums题意:定义一棵点有颜色的树的\(\text{MAD}\)为树上编号最大的出现了至少两次的颜色。对于树上每条边,求出断开它后生成的两棵树的\(\text{MAD}\)的最大值。\(n\le2\times10^5,a_i\le10^9\)。先找到整棵树......
  • linux makefile make 中 extra_cflags 的作用。
    问题: 我在编译rtl8723bu  linux4.19 版本的时候,总是编译不过去,后来发现是extra_cflags的问题。  接下来看看网上的截图:关于extra_clags的知识。   再来看看gcc的参数。   ......