首页 > 其他分享 >cf

cf

时间:2022-10-31 01:11:59浏览次数:45  
标签:蓝糖 int ll cf 位数 整除 1000

10.31

Divisibility by Eight(1500)

题目大意:
给你一个不包含前导0的整数,位数100位,问是否可以在通过删除一些位数,且不能改变原有位置的情况下整除8?

解题思路:
我们可以发现1000正好是8的倍数,所以我们只需要枚举是否存在1位数,2位数,3位数可以整除8即可,至于为什么不用枚举4位数及更高的位数呢?我们来分析一下,对于任意一个4位数及更高位数的整数 x 都可以表示为 x = 1000 * n + k 的形式,而1000是8的倍数,那么自然1000 * n 也是8的倍数,所以我们可以通过判断k是否能整除8进而来判断x是否能整除8,又因为k可能是1位数,2位数,3位数,所以正好可以应证前面的结论。

 

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

int main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if((s[i]-'0')%8==0){
            cout<<"YES"<<endl;
            cout<<s[i]<<endl;
            return 0;
        }
    }
    for(int i=0;i<s.size();i++){
        for(int j=i+1;j<s.size();j++){
            if(((s[i]-'0')*10+(s[j]-'0'))%8==0){
                cout<<"YES"<<endl;
                cout<<s[i]<<s[j]<<endl;
                return 0;
            }
        }
    }
    for(int i=0;i<s.size();i++){
        for(int j=i+1;j<s.size();j++){
            for(int k=j+1;k<s.size();k++){
                if(((s[i]-'0')*100+(s[j]-'0')*10+s[k]-'0')%8==0){
                    cout<<"YES"<<endl;
                    cout<<s[i]<<s[j]<<s[k]<<endl;
                    return 0;
                }
            }
        }
    }
    cout<<"NO"<<endl;
    return 0;
}


Gift Set(2100)

题意

 


有x个红糖,y个蓝糖。每一个礼包里面要么有a个红糖+ b个蓝糖,要么是a个蓝糖+ b个红糖。
问最多能打多少份礼包。
T ≤104组数据,1 ≤x, y,a, b ≤10°。


题解


不难发现答案具有包含性,能打n份就─定能打n —1份。
交换,令a >b,那么每打包一份礼包,x和y都至少会减少b。
直接二分答案s,那么在x, y ≥S · b的前提下,再把x和y都减去s · b后,相当于在x, y中只用找单独的s个ab就行了({x. y}变成了{x - sb, y - sb}, {a, b}变成了{a - b, 0},其中一个为0了,两种糖果不再绑定),这等价于此时a = b或者 x/(a-b) + y/(a-b) >= s

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll x,y,a,b;

bool check(ll k){
    ll X=x,Y=y,A=a,B=b;
    if(X<k*B||Y<k*B) return false;
    X-=k*B,Y-=k*B;
    A=A-B;
    if(A==0) return true;
    return X/A+Y/A>=k;
}

void solve(){
    cin>>x>>y>>a>>b;
    if(x<y)swap(x,y);
    if(a<b)swap(a,b);
    ll l=0,r=1e9+10;
    for(int i=1;i<=200;i++){
        ll mid=(l+r)>>1;
        if(check(mid)) l=mid;
        else r=mid;
    }
    cout<<l<<endl;
}

int main(){
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

 

标签:蓝糖,int,ll,cf,位数,整除,1000
From: https://www.cnblogs.com/wxk1213/p/16842902.html

相关文章

  • CF149D Coloring Brackets
    题意:给出一串合法括号,按以下规则给括号染色:1.每个符号可以染红色、蓝色,或者不染色;2.相邻两个符号不能染同一种颜色,可以都不染色;3.一对括号有且仅有一个符号染色。求......
  • CF1622D. Shuffle 题解 组合数学/枚举
    题目链接:​​https://codeforces.com/problemset/problem/1622/D​​题目大意:给定一个长度为\(n\)的01字符串\(s\),你可以对这个字符串进行最多一次操作,该次操作需要选择......
  • 【XSY2414】【CF587C】Duff in the Army(倍增lca)
    看到题目中\(a<=0\),自然就想到用暴力维护这个东东。设倍增数组\(fa[u][i]\)和\(minn[u][i]\),其中\(minn\)存的是一个结构体,结构体中包含两个东东:一个数组和这个数组中的元......
  • aPtCfU - Chapter2 Solutions
    1.\(2^{10}-{10\choose0}-{10\choose10}-{10\choose5}=770\).2.\(\dfrac{6!}{3!3!}\left(\dfrac{1}{2}\right)^7\).\(\left(\dfrac{1}{2}\right)^4+4\left(\dfrac......
  • CF1481E
    \(*\text{Defficult:}\color{Red}{2500}\)一道很有AT风格的DP。Description有\(n\)本书,每本书有一个颜色,每次操作可以将一本书移动到最右。求问使所有相同颜色......
  • CF840C
    首先考虑相乘等于平方相当于两个数除去平方因子后相同。所以我们把所有数都除去平方因子,然后问的相当于是序列有多少排列满足相邻两项不等。为了更方便地DP,我们对修改后的......
  • CF1394D
    所谓单调递增或单调递减,其实只用看成一条有向的链,\(b\)大的点指向\(b\)小的点即可。所以对于边\((u,v)\),假设\(b_u\neb_v\),那么这条边的方向确定。一个点对答案的......
  • gatk 对多个样本的g.vcf文件进行合并、进行变异检测
     001、gatkCombineGVCFs-RGCF_000001735.4_TAIR10.1_genomic.fna--variantSRR21814498.g.vcf--variantSRR21814509.g.vcf--variantSRR21814514.g.vcf-Ocoho......
  • CF1394C
    首先,我们关注一下“相似”是什么意思:它等价于,两个字符串中B和N的数量分别相同。显然地我们可以发现,每次操作,相当于给字符串加或减一个B或N或BN。把每个字符串中......
  • CF1675G
    首先,可以感性地发现移动小球时出现负值不会影响最终答案,只要最终方案是非负的就行了。所以,我们不妨规定,一个箱子只能从右边一个箱子拿小球,或者向右边一个箱子放小球。设......