2019CCPC哈尔滨站题解

J. Justifying the Conjecture

  • 题目意思
    • 我们需要将一个合数转化为一个素书和一个合数相加的结果。
  • 思路分析
    • 我们很容易判断如果这个数字x是奇数,那么我们可以和3和x-3组合在一起。因为x-3一定是一个偶数,但是这里要排除x-3=2的情况,所以我们先对0-5的情况进行特判就行了。然后如果x为偶数,那么拆分成2和x-2的形式,因为这里x-2一定是一个偶数,偶数除了2都是合数。
  • 代码如下
#include<bits/stdc++.h> 

using namespace std;
typedef long long ll;

void solve(){
   
	int n;
	cin>>n;
	if(n<=5){
   
		puts("-1");
	}else{
   
		if(n&1){
   
			cout<<"3 "<<n-3<<endl;
		}else{
   
			cout<<"2 "<<n-2<<endl;
		}
	}
} 

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

K. Keeping Rabbits

  • 初始给出n个重量,假设总和为sum,每个兔子每天的体重增加1的概率是他占所有的兔子的总的重量的比例。问k天之后每只兔子的重量的期望值是多少?
  • 首先,我们知道k天之后所有的兔子的总的重量增加为k,那么我们现在就是要把这k分配到n只兔子上面。我们知道,这n只兔子除了体重的差别之外其余任何都是一样的,也就是等概率的。所以我们知道每千克的体重的价值都是等价的。那么最后这k一定是根据体重的占比均匀分到每个兔子上面,所以每只兔子最后的体重就是 a [ i ] + k ∗ ( a [ i ] ∗ k ∑ i = 1 n a [ i ] ) a[i]+k*(a[i]*\frac{k}{\sum^n_{i=1}a[i]}) a[i]+k(a[i]i=1na[i]k)。带入得结果即可。
  • 代码如下
#include<bits/stdc++.h>

using namespace std;
double a[200010];
void solve(){
   
    int n,k;
    scanf("%d %d",&n,&k);
    double sum=0;
    for(int i=1;i<=n;i++){
   
        scanf("%lf",&a[i]);
        sum+=a[i];
    }
    double tmp=(double)k/sum;
    for(int i=1;i<=n;i++){
   
        double ans=a[i]+tmp*a[i];
        printf("%.6lf ",ans);
    }
    puts("");
}

int main(){
   
    //freopen("data.in","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--){
   
        solve();
    }
    return 0;
}

F. Fixing Banners

  • 从6个字符串里面各取一个字符,问是否可以可以拼接成一个字符串harbin.
  • 首先,我们对六个字符串进行预处理。处理出每个字符串里面的情况,然后我们对这六个字符串的下标进行全排列。对每种情况进行判断即可。这里要注意使用scanf进行读入。
  • 代码如下
#include<bits/stdc++.h>

using namespace std;
int a[10];
bool num[10][30];
string c="0harbin";
char s[2000010];
void solve(){
   
    for(int i=1;i<=6;i++){
   
        a[i]=i;
        for(int j=0;j<30;j++){
   
            num[i][j]=false;
        }
    }
    for(int i=1;i<=6;i++
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值