Codeforces Round #725 (Div. 3)部分题解

Posted KaaaterinaX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #725 (Div. 3)部分题解相关的知识,希望对你有一定的参考价值。

C
一眼过去就是二分,序列排序后对每个元素二分找出上下边界,加起来就可以了。

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
//#include <unordered_set>
#include <string.h>
#include <map>
//#include <unordered_map>
#include <stdlib.h>
#include <time.h>
#include <vector>
#include <deque>
#define YES "YES"
#define NO "NO"
#define INF 0x3f3f3f3f
#define FAST ios::sync_with_stdio(false)
#define ll long long
#define pb push_back
#define endl '\\n'
#define eps const double eps=1e-6
 
using namespace std;
const int maxn=2e5+7;
int num[maxn];
int main(){
    int t;
    cin>>t;
    while(t--){
        int n,l0,r0;
        cin>>n>>l0>>r0;
        for(int i=1;i<=n;i++){
            cin>>num[i];
        }
        sort(num+1,num+1+n);//从小到大排序
        //二分
        ll ans=0;
        for(int i=1;i<n;i++){
            int l=i+1,r=n;
            int t=num[i];
            int tl=0,tr=0;
            while(l<=r){
                int mid=(l+r)>>1;
                if(t+num[mid]<l0){
                    l=mid+1;
                }
                else{
                    tl=mid;
                    r=mid-1;
                }
            }
            l=i+1;
            r=n;
            while(l<=r){
                int mid=(l+r)>>1;
                if(t+num[mid]>r0){
                    r=mid-1;
                }
                else{
                    tr=mid;
                    l=mid+1;
                }
            }
            
            if(tr!=0&&tl!=0)
                ans+=tr-tl+1;
            
        }
        cout<<ans<<endl;
    }
}

D
这个想了一下下qaq,发现就是质因数分解,看每个数字最多能被整除多少次,与k比较就行了,另外要注意k=1特判。

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
//#include <unordered_set>
#include <string.h>
#include <map>
//#include <unordered_map>
#include <stdlib.h>
#include <time.h>
#include <vector>
#include <deque>
#define YES "YES"
#define NO "NO"
#define INF 0x3f3f3f3f
#define FAST ios::sync_with_stdio(false)
#define ll long long
#define pb push_back
#define endl '\\n'
#define eps const double eps=1e-6
 
using namespace std;
//---------------------------------------------------//
template<typename T>inline void read(T &x){
    x=0;
    char c=getchar();
    ll f=1;
    if(c>'9'||c<'0'){
        if(c=='-'){
            f=-1;
        }
        c=getchar();
    }
    while(c<='9'&&c>='0'){
        x=(x<<1)+(x<<3)+c-'0';
        c=getchar();
    }
    x*=f;
}
template<typename T> inline void write(T x){
    
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9){
        write(x/10);
    }
    putchar(x%10+'0');
}
//_____________________________________________________//
const int maxn=1e5+7;
int cnt=0;
bool vis[maxn];
int pri[maxn];
void Prime(){
    for(int i=2;i<=maxn-7;i++){
        if(!vis[i]){
            pri[++cnt]=i;
        }
        for(int j=1;j<=cnt&&i*pri[j]<=maxn;j++){
            vis[i*pri[j]]=1;
            if(i%pri[j]==0){
                break;
            }
        }
    }
}
 
int divid(int n){
    int ss=sqrt(n);
    int res=0;
    for(int i=1;i<=cnt&&pri[i]<=ss;i++){
        while(n%pri[i]==0){
            res++;
            n/=pri[i];
        }
    }
    if(n!=1){
        res++;
    }
    return res;
}
//int divid(int n){
//    int res=0;
//    for(int i=2;i<=n/i;i++){
//        while(n%i==0){
//            res++;
//            n/=i;
//        }
//    }
//    if(n>1){
//        res++;
//    }
//    return res;
//}//用这个t了。。
int main(){
    Prime();
    int t;
    cin>>t;
    while(t--){
        int a,b,k;
        cin>>a>>b>>k;
        int cnta=divid(a);
        int cntb=divid(b);
//        cout<<"cnta="<<cnta<<endl;
//        cout<<"cntb="<<cntb<<endl;
        if(k==1){
            if(a!=b&&(a%b==0||b%a==0)){
                cout<<"Yes"<<endl;
            }
            else{
                cout<<"No"<<endl;
            }
        }
        else{
            if(cnta+cntb>=k){
                cout<<"Yes"<<endl;
            }
            else{
                cout<<"No"<<endl;
            }
        }
    }
}

F
好短,好神奇,举了几个例子就看到规律了emm
大概就是分开看个位,十位…到最高位

#include<iostream>

#define ll long long

int main(){
    int t;
    cin>>t;
    while(t--){
        int l,r;
        cin>>l>>r;
        ll ans=0;
        while(l!=0||r!=0){
            ans+=r-l;
            l/=10;
            r/=10;
        }
        cout<<ans<<endl;
    }
}

啊,毫无技术含量,发点div3的简单题水水访客量,呜呜。

以上是关于Codeforces Round #725 (Div. 3)部分题解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #725 (Div. 3)Codeforces-1538

Codeforces Round #725 (Div. 3)Codeforces-1538

Codeforces Round #725 (Div. 3)Codeforces-1538

Codeforces Round #725 (Div. 3)部分题解

Codeforces Round #725 (Div. 3) ABCDEFG题解

Codeforces Round #725 (Div. 3) 题解(A-G)