https://qluacm.club/contest.php?cid=1008
A 约数个数
题意:给出m分解的形式,求m的因数有多少能被g整除
解法(来自wx爸爸,我爱她):暴力求m再%g会TLE。
不妨看分解的形式。如样例m=32 * 52,g=3。
那么所有可以整除g的数中,必然存在至少一个3(如不存在,输出0结束)
于是对于样例,所求因数中存在的3有两种情况:1个或2个。
5有三种:0,1,2。
2*3=6
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,g,b=0;
long long m=1;
int p[11],a[11];
scanf("%d %d",&n,&g);
for(int i=1;i<=n;++i)
{
scanf("%d",&p[i]);
if(p[i]==g) b=1; //判断是否存在g
}
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
if(p[i]==g) m=m*a[i];
else m=m*(a[i]+1);
}
if(b==1) printf("%lld",m);
else printf("0");
printf("\n");
return 0;
}
F 折纸达人
全部变成F
题意:折纸,四种折法(合并一下成为两种),剪法亦然
解法:剪一剪就知道了,怀念我昨晚的一桌子纸片
1⃣️如果只存在左右(上下)折的情况,并且左右(上下)剪,最后只会得到两堆废纸
2⃣️如果左右/上下均存在,左右/上下假装无事发生,2(上下/左右)剪的次数+1
怎么得出来的?剪一剪就知道了
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
string a;
string c;
const long long d=1000000007;
long long ksm(long long a,long long b)
{
long long i,ans=1;
for(i=1;i<=b;i++)
{
while(b!=0)
{
if(b%2!=0) ans=((ans%d)*(a%d))%d;
a=((a%d)*(a%d))%d;
b=b/2;
}
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;++i)
{
long long sum1=0,sum2=0;
int n;
scanf("%d",&n);
cin>>a;
cin>>c;
for(int j=0;j<n;++j)
{
if(a[j]=='B'||a[j]=='T') ++sum1;
if(a[j]=='R'||a[j]=='L') ++sum2;
}
if((c[1]=='L'||c[1]=='R')&&sum1>0) printf("%lld\n",ksm(2,sum1)+1);
else if((c[1]=='B'||c[1]=='T')&&sum2>0) printf("%lld\n",ksm(2,sum2)+1);
else printf("2\n"); //这里做了一个异向是否折过的判断,其实并不需要
}
return 0;
}
H 神奇老虎机
……不想说话
只需要结尾特判
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t,n,a[1001];
scanf("%d",&t);
for(int j=1;j<=t;++j)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
if(i==n) printf("1\n");
else
{
if(a[i]>=1&&a[i]<10) printf("1 ");
else if(a[i]>=10&&a[i]<100) printf("10 ");
else printf("100 ");
}
}
}
return 0;
}
L 寄蒜几何
终于在补题通道关闭前AK了?
思路:尺取法,量取三分之一sum,如果连续的两端长度都和它相等,则Yes
如果sum不是三的倍数,直接No
我的问题:
·没有判断每一部分是否与c(sum/3)相等
·过于繁杂
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,x[1000001];
int sum=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&x[i]);
sum=sum+x[i];
}
if(sum%3!=0) printf("No\n");
//printf("%d\n",sum);
else
{
int sum1=0;
bool b=0;
int i,j;
for(i=1;i<=n;++i)
{
int q=0;
for(j=i;j<=n;++j)
{
//printf("%d\n",x[j]);
sum1=sum1+x[j];
//printf("%d\n",sum1);
if(sum1==sum/3)
{
sum1=0;
++q;
}
if(q==2)
{
b=1;
break;
}
}
if(b==1) break;
}
if(b==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现