A. Perfectly Imperfect Array
是否存在a的一个子序列,使其所有元素乘积不是完全平方。
正难则反,考虑必定完全平方的情况:每个元素都是完全平方数,那么剩下的就是成立的情况。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e4+5;
int judge(int x)
{
double y=sqrt(x);
if(y==(int)y) return 1;
else return 0;
}
int a[105],b[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,flag=1;
scanf("%d",&n);
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
flag*=judge(a[i]);
}
flag?printf("NO\n"):printf("YES\n");
}
return 0;
}
B. AND 0, Sum Big
要求子序列所有元素按位与运算为0且总和最大。
找规律,其实就是求0分布的情况,答案是
n
n
nk 。具体看图解。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e4+5;
const int mod=1e9+7;
ll n,k;
int main()
{
int t;
cin>>t;
while(t--)
{
ll ans=1;
cin>>n>>k;
for(int i=1;i<=k;i++) ans=ans*n%mod;
cout<<ans<<endl;
}
return 0;
}