- chenshixian 的博客
陈室先的总结7.23day13
- @ 2024-7-23 20:05:00
题目传送门
T1位数问题
错的原因
暴力写的,以后不能这么局限,要多思考
思路
这里可以发现x位的单数个与双数个来源于n-1的单数个与双数,单数个可以由n-1的双数扩充九倍+ n-1的单数,双数个可以由n-1的单数扩充九倍+ n-1的双数,但第一位不能为0,所以输出要减一下n-1双数个数
代码
#include<bits/stdc++.h>
using namespace std;
int n,m=12345,a[10000][10];
int main(){
freopen("bit.in","r",stdin);
freopen("bit.out","w",stdout);
cin>>n;
a[1][0]=9,a[1][1]=1;
if(n==1){cout<<9;return 0;}
for(int i=2;i<=n;i++){
a[i][0]=((a[i-1][0]*9)%m+a[i-1][1])%m;
a[i][1]=(a[i-1][0]+(a[i-1][1]*9)%m)%m;
}
cout<<(a[n][0]-a[n-1][0]+m)%m;
return 0;
}
T2先先的生日
错的点
在找因数是没优化,以后不能这样子不优化就交
思路
这道题是一道找约数的题,我们每次输入后让这个数加入哈希表,然后我们扫一遍数组中的约数(要用i<sqrt()优化)如果是n自己的话要减一,最后输出
代码
#include<bits/stdc++.h>
using namespace std;
unordered_map<int ,int>ma;
int n,a[100010];
int main(){
freopen("birth.in","r",stdin);
freopen("birth.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
ma[a[i]]++;
}
for(int i=1;i<=n;i++){
int j=a[i],s=0;
for(int h=1;h<=sqrt(j);h++){
if(j%h==0){
int x=h,y=j/h;
if(x==j&&y==j)s+=ma[y],s--;
else if(x==y)s+=ma[x];
else{
if(y==j)s--;
s+=ma[x];
s+=ma[y];
}
}
}
cout<<s<<"\n";
}
return 0;
}
小静的考验
错的点
根本没做,以后不能空题,要发挥思维
思路
这里我们输入后先逆序循环(n-1)~1如果那么就开始操作,需要乘法的定律,如下
if(a[i]>a[i+1]){
long long k=ceil(a[i]*1.0/a[i+1]);
a[i]=a[i]*1.0/k;
c+=k-1;
}
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[2000010],st[2000010],c;
int main(){
freopen("xiaojing.in","r",stdin);
freopen("xiaojing.out","w",stdout);
long long t;
cin>>t;
while(t--){
cin>>n;
c=0;
for(long long i=1;i<=n;i++)cin>>a[i];
for(long long i=n-1;i>=1;i--){
if(a[i]>a[i+1]){
long long k=ceil(a[i]*1.0/a[i+1]);
a[i]=a[i]*1.0/k;
c+=k-1;
}
}
cout<<c<<"\n";
}
return 0;
}
超级感染
错的点
公式推错了,以后要多打草稿
思路
这道题是一道排列组合的题,公式还算好推,但在取余是要加取余数,防止出现负数情况,快速幂也要写,其他的没了
代码
#include<bits/stdc++.h>
using namespace std;
long long q(long long b,long long e,long long m){
long long r=1;
while(e){
if(e&1)r=r*b%m;
b=b*b%m;
e>>=1;
}
return r;
}
int main(){
freopen("super.in","r",stdin);
freopen("super.out","w",stdout);
long long mo=100003;
long long m,n;
cin>>m>>n;
if(n==1){cout<<0;return 0;}
cout<<(((q(m,n,mo)+mo)%mo-((m*q(m-1,n-1,mo))+mo)%mo)+mo)%mo;
}