• 2020牛客暑期多校训练营(第七场)解题报告


    D


    温暖的签到题。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    #define ll long long
    ll input(){
    	ll x=0,f=0;char ch=getchar();
    	while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar();
    	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    	return f? -x:x;
    }
    
    int main(){
    	int T=input();
    	while(T--){
    		ll n=input();
    
    		if(n==1||n==24){
    			printf("Fake news!
    ");
    		}else{
    			printf("Nobody knows it better than me!
    ");
    		}
    	}
    }
    

    B

    数学题?我们设(n<m),当医院数量为(n)时候需要给每个医院安排(m)个口罩,那么我们可以分别给每个医院安排(lfloor frac{n}{m} floor)个装了(n)个口罩的盒子,此时每个医院还要额外再拿(m mod n)个口罩才能达到要求。当医院的数量为m时,也用相似的思路解决就行了。然后(gcd)搞一搞就可以了。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    #define ll long long
    ll input(){
    	ll x=0,f=0;char ch=getchar();
    	while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar();
    	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    	return f? -x:x;
    }
    
    #define PII pair <int,int>
    #define fr first
    #define sc second
    #define mp make_pair
    
    int cnt=0;
    vector<PII> Ans;
    
    void gcd(int n,int m,int sum){
    	if(n<m) swap(n,m);
    	if(m==0){
    		cnt+=(sum/n);
    		Ans.push_back(mp(n,sum/n));
    		return;
    	}
    	int tmp=n/m;
    	Ans.push_back(mp(m,m*tmp));
    	sum-=m*m*tmp;
    	cnt+=tmp*m;
    	if(sum) gcd(m,n%m,sum);
    }
    
    int main(){
    	int T=input();
    	while(T--){
    		int n=input(),m=input();
    		cnt=0;
    		Ans.clear();
    		gcd(n,m,n*m);
    		printf("%d
    ",cnt);
            for(int i=0;i<Ans.size();i++){
                for(int j=0;j<Ans[i].second;j++){
                    printf("%d ",Ans[i].first);
                }
            }
            printf("
    ");
    	}
    }
    

    H

    数学题。易推出答案的公式为:((sum_2^kfrac{n}{k}+frac{n-1}{k})+k-1)。用整除分块随便搞搞就行了。复杂度(O(sqrt n))

    #include <bits/stdc++.h>
    
    using namespace std;
    
    #define ll long long
    ll input(){
    	ll x=0,f=0;char ch=getchar();
    	while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar();
    	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    	return f? -x:x;
    }
    
    const ll mod=1e9+7;
    
    ll cal(ll n,ll k){
    	ll res=0;
    	for(int i=2,j;i<=n&&i<=k;i=j+1){
    		if(n/i!=0) j=min(n/(n/i),k);
            else j=k;
            res=(res+n/i*(j-i+1))%mod;
        }
        return res;
    }
    
    int main(){
    	ll n=input(),k=input();
    
    	printf("%lld
    ",((cal(n,k)+cal(n-1,k))%mod+n+k-1)%mod);
    }
    

  • 相关阅读:
    IsEmpty函数和IsNull函数之间的区别
    JavaScript的self和this使用小结
    PHP中读写文件实现代码
    ExtJs的数据代理proxy
    php递归列出所有文件和目录的代码
    解析Extjs与php数据交互(增删查改)
    MySql 批量创建、导入实例
    MySQL 进入 导入
    小知识:批量导入数据
    js 扩展实例
  • 原文地址:https://www.cnblogs.com/-aether/p/13417348.html
Copyright © 2020-2023  润新知