T1
长度奇数必定不行
偶数提取出来判断即可
#include<bits/stdc++.h>
using namespace std;
int T;
string s,s1,s2;
void work()
{
s1="",s2="";
cin>>s;
int S=s.size();
if(S%2==1)
{
puts("NO");
return;
}
for(int i=0;i<S/2;i++)
{
s1+=s[i];
}
for(int i=S/2;i<S;i++)
{
s2+=s[i];
}
if(s1==s2)
{
puts("YES");
}
else
{
puts("NO");
}
}
int main()
{
cin>>T;
while(T--)
{
work();
}
return 0;
}
T2
因为个数很少
暴力枚举数字然后添加即可
最后去重再累加答案
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int T;
LL n,a[114514];
void work()
{
LL top=0,ans=0;
scanf("%lld",&n);
LL m=sqrt(n)+10;
for(LL i=1;i<=m;i++)
{
LL x=i*i;
LL y=i*i*i;
if(x<=n) a[++top]=x;
if(y<=n && x!=y) a[++top]=y;
}
sort(a+1,a+1+top);
ans=min(1LL,top);
for(LL i=2;i<=top;i++)
{
if(a[i]!=a[i-1]) ans++;
}
printf("%lld\n",ans);
}
int main()
{
scanf("%d",&T);
while(T--)
{
work();
}
return 0;
}
T3
由于 $T$ 只能是 abc
的一种排列
我们只要特判 $T=$ abc
即可,需要改成 a...acb...bc...c...
的形式
#include<bits/stdc++.h>
using namespace std;
int T,b[30];
string s,t;
void work()
{
memset(b,0,sizeof b);
cin>>s>>t;
for(int i=0;i<s.size();i++)
{
b[s[i]-'a']++;
}
if(b[0]==0 || b[1]==0 || b[2]==0)
{
for(int i=0;i<26;i++)
{
for(int j=1;j<=b[i];j++)
{
putchar(i+'a');
}
}
}
else if(t=="abc")
{
for(int i=1;i<=b[0];i++) putchar('a');
for(int i=1;i<=b[2];i++) putchar('c');
for(int i=1;i<=b[1];i++) putchar('b');
for(int i=3;i<26;i++)
{
for(int j=1;j<=b[i];j++)
{
putchar(i+'a');
}
}
}
else
{
for(int i=0;i<26;i++)
{
for(int j=1;j<=b[i];j++)
{
putchar(i+'a');
}
}
}
puts("");
return;
}
int main()
{
scanf("%d",&T);
while(T--)
{
work();
}
return 0;
}
T4
$a\%b=x$ 仅当 $a > 2 \times x$ 才可
如果数组中有排列的数字就直接用,没有的数字排序后按上面公式判断是否可行
#include<bits/stdc++.h>
using namespace std;
int T,n,a[100010],b[100010],top;
bool v[100010];
bool cmp(int x,int y)
{
return x<y;
}
void work()
{
top=0;
for(int i=0;i<=n;i++) v[i]=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>0 && a[i]<=n && !v[a[i]])
{
v[a[i]]=1;
}
else
{
b[++top]=a[i];
}
}
sort(b+1,b+1+top);
int cnt=0;
for(int i=1;i<=n;i++)
{
if(v[i]) continue;
if(b[++cnt]<=i*2)
{
puts("-1");
return;
}
}
printf("%d\n",cnt);
}
int main()
{
scanf("%d",&T);
while(T--)
{
work();
}
return 0;
}
T5
待填充
T6
待填充