B
http://codeforces.com/problemset/problem/1176/B
思维题吧 让统计3的倍数的个数 (可以用已知数创造倍数
代码:
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main()
{
int a[1010],t,n,i,s0,s1,s2,ans;
cin>>t;
while(t--)
{
ans=0;
s1=s2=s0=0;
memset(a,0,sizeof(a));
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
if(a[i]%3==0)
s0++;
if(a[i]%3==1)
s1++;
if(a[i]%3==2)
s2++;
}
if(s1>=s2)
ans=s2+(s1-s2)/3;
else
ans=s1+(s2-s1)/3;//(用5个5和一个人4手动一下)
cout<<s0+ans<<endl;
}
//cout<<s0+ans<<endl;
return 0;
}
A题
http://codeforces.com/problemset/problem/1176/A
一切尽在不言中 看代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,ans=0,t;
cin>>t;
while(t--)
{
ans=0;
cin>>n;
while(n%2==0)
{
ans++;
n/=2;
}
while(n%3==0)
{
ans+=2; //乘的那个2直接算一步
n/=3;
}
while(n%5==0)
{
ans+=3; //乘的那个4直接算两步
n/=5;
}
if(n==1)
cout<<ans<<endl;
else
cout<<"-1"<<endl;
}
return 0;
}
C
http://codeforces.com/problemset/problem/1176/C
一看题无从下手 一看代码秒懂
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int a[maxn];
int main()
{
int n,i,x;
cin>>n;
for(i=0;i<n;i++)
{
cin>>x;
if(x==4)
a[4]++;
else if(x==8)
{
a[8]++;
a[8]=min(a[8],a[4]);
}
else if(x==15)
{
a[15]++;
a[15]=min(a[8],a[15]);
}
else if(x==16)
{
a[16]++;
a[16]=min(a[16],a[15]);
}
else if(x==23)
{
a[23]++;
a[23]=min(a[16],a[23]);
}
else if(x==42)
{
a[42]++;
a[42]=min(a[42],a[23]);
}
}
cout<<n-6*a[42]<<endl;
return 0;
}