J. Justifying the Conjecture
题意:把一个数分解成一个素数和一个合数。
思路:如果n是偶数,分解成2和n-2;如果n是奇数,分解成3和n-3.特判5以内的数。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t,x;
scanf("%d",&t);
while(t--)
{
scanf("%d",&x);
if(x<=5) cout<<-1<<endl;
else if(x&1) cout<<3<<" "<<x-3<<endl;
else cout<<2<<" "<<x-2<<endl;
}
}
K. Keeping Rabbits
把初始n个兔子重量相加,假设总和为sum。即k天之后第i各兔子得重量为a[i]+k*a[i]/sum.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int an[100007];
int main()
{
int t,n,k;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&k);
double sum=0;
for(int i=0;i<n;i++) {scanf("%d",&an[i]);sum+=an[i];}
for(int i=0;i<n;i++)
{
double ans=an[i]+k*an[i]/sum;
printf("%.8lf",ans);
cout<<" ";
}
cout<<endl;
}
}
F. Fixing Banners
从6个字符串里面各取一个字符,问是否可以可以拼接成一个字符串harbin
.
一个全排列即可解决,直接上代码。
#include<bits/stdc++.h>
using namespace std;
int a[10];
bool num[10][30];
string an="#harbin";
char s[2000007];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
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++)
{
scanf("%s",s+1);
int len=strlen(s+1);
for(int j=1; j<=len; j++)
{
num[i][s[j]-'a'+1]=true;
}
}
bool h=0;
do
{
//for(int i=1; i<=6; i++) cout<<a[i]<<" ";
//cout<<endl;
bool flag=true;
for(int i=1; i<=6; i++)
{
if(num[a[i]][an[i]-'a'+1]==false)
{
flag=false;
break;
}
}
if(flag)
{
cout<<"Yes"<<endl;
h=1;
break;
}
}
while(next_permutation(a+1,a+7));
if(!h)cout<<"No"<<endl;
}
}