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=1na[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(){
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