头像

Expelliarmus2011




离线:6小时前


最近来访(102)
用户头像
magicalbunny
用户头像
走るの好きか
用户头像
逝川
用户头像
dare
用户头像
卷卷rivaler
用户头像
GZNU第一深情
用户头像
九天
用户头像
ljl13541791618
用户头像
醴陵小炒肉
用户头像
LAG_流雲
用户头像
hema5177
用户头像
雪之下
用户头像
来份烧鸭饭
用户头像
163.com
用户头像
徐晓耕
用户头像
魔戒粉哈迷
用户头像
@w宇敬_7
用户头像
白日梦Q
用户头像
梦一万次你
用户头像
incra

活动打卡代码 AcWing 424. 循环

#include<bits/stdc++.h>
using namespace std;
const int N=109;
int m,nums[N],power[N];
void mul(int c[],int a[],int b[]){
    static int tmp[N];
    memset(tmp,0,sizeof tmp);
    for(int i=0;i<m;i++)
        for(int j=0;j<m;j++)
            if(i+j<m)
                tmp[i+j]+=a[i]*b[j];
    for(int i=0,t=0;i<m;i++){
        t+=tmp[i];
        tmp[i]=t%10;
        t/=10;
    }
    memcpy(c,tmp,sizeof tmp);
}
void mul(int c[],int a[],int b){
    for(int i=0,t=0;i<m;i++){
        t+=a[i]*b;
        c[i]=t%10;
        t/=10;
    }
}
int main() {
    string str;
    cin>>str>>m;
    for(int i=0,j=str.size()-1;j>=0;i++,j--)nums[i]=str[j]-'0';
    memcpy(power,nums,sizeof nums);
    int per[N]={1};
    int pn[N],p1[N];
    for(int k=1;k<=m;k++){
        memcpy(pn,nums,sizeof nums);
        memset(p1,0,sizeof p1);
        p1[0]=1;
        int r=0;
        while(r<=10){
            mul(pn,pn,power);
            mul(p1,p1,power);
            r++;
            if(pn[k-1]==nums[k-1]) break;
        }
        memcpy(power,p1,sizeof p1);
        if(r>10){
            memset(per,0,sizeof per);
            per[0]=-1;
            break;
        }
        mul(per,per,r);
    }
    int k=m;
    while(!per[k]) k--;
    while(k>=0) cout<<per[k--];
    return 0;
}


活动打卡代码 AcWing 428. 数列

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int k,n,res;
int k_mul(int x){
    int mul=1;
    while(x--) mul*=k;
    return mul;
}
int main()
{
    cin>>k>>n;
    for(int i=0;i<10;i++)
        if(n>>i&1)
            res+=k_mul(i);
    cout<<res<<endl;
    return 0;
}


活动打卡代码 AcWing 439. 细胞分裂

#include<bits/stdc++.h>
using namespace std;
const int INF=1e8;
unordered_map<int,int> get(int x){
    unordered_map<int,int> res;
    for(int i=2;i<=x/i;i++)
        if(x%i==0){
            int s=0;
            while(x%i==0) x/=i,s++;
            res[i]=s;
        }
    if(x>1) res[x]=1;
    return res;
}
int main() {
    int n,m1,m2;
    cin>>n>>m1>>m2;
    auto a=get(m1);
    int res=INF;
    while(n--){
        int x;
        cin>>x;
        auto b=get(x);
        int t=0;
        for(auto [k,v]:a){
            if(!b.count(k)){
                t=INF;
                break;
            }
            else
                t=max(t,(v*m2+b[k]-1)/b[k]);
        }
        res=min(res,t);
    }
    if(res==INF) res=-1;
    cout<<res<<endl;
    return 0;
}


活动打卡代码 AcWing 416. 麦森数

我的超时方法(暴力)

#include<bits/stdc++.h>
using namespace std;
vector<int> a,b;
vector<int> mul(vector<int> &A, int b){
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size()||t;i++){
        if(i<A.size()) t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main() {
    int p;
    cin>>p;
    a.push_back(1);
    for(int i=1;i<=p;i++)a=mul(a,2);
    a[0]-=1;
    cout<<a.size()<<endl;
    int cnt=0;
    if(a.size()<=500){//前面补0
        for(int i=1;i<=500-a.size();i++) b.push_back(0);
        for(int i=a.size()-1;i>=0;i--) b.push_back(a[i]);
    }
    else for(int i=0;i<500;i++) b.push_back(a[i]);//取后面500个
    for(int i=0;i<a.size();i++){
        cout<<b[i];
        cnt++;
        if(cnt%50==0) puts("");
    }
    return 0;
}

发现:可以利用快速幂(我怎么没想到😰)

#include<bits/stdc++.h>
using namespace std;
const int N=500;
int p;
int a[N],tmp[N],res[N];
void mul(int c[],int a[],int b[]){
    memset(tmp,0,sizeof tmp);
    for(int i=0;i<N;i++)
        for(int j=0;i+j<N;j++)
            tmp[i+j]+=a[i]*b[j];
    for(int i=0,t=0;i<N;i++){
        t+=tmp[i];
        c[i]=t%10;
        t/=10;
    }
}
void qmi(int k){
    res[0]=1;
    a[0]=2;
    while(k){
        if(k&1) mul(res,res,a);
        mul(a,a,a);
        k>>=1;
    }
    res[0]--;
}
int main() {
    cin>>p;
    cout<<int(p*log10(2))+1<<endl;
    qmi(p);
    for(int i=0,k=N-1;i<10;i++){
        for(int j=0;j<50;j++,k--)
            cout<<res[k];
        cout<<endl;
    }
    return 0;
}


活动打卡代码 AcWing 432. Hanoi双塔问题

#include<bits/stdc++.h>
using namespace std;
const int N=209;
int n;
vector<int> f[N];
vector<int> use;
vector<int> add(vector<int> A,vector<int> B){
    if(A.size()<B.size()) return add(B,A);
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size();i++){
        t+=A[i];
        if(i<B.size()) t+=B[i];
        C.push_back(t%10);
        t/=10;
    }
    if(t) C.push_back(t);
    return C;
}
int main() {
    cin>>n;
    use.push_back(2);
    for(int i=1;i<=n;i++)
        f[i]=add(add(f[i-1],f[i-1]),use);
    for(int i=f[n].size()-1;i>=0;i--) cout<<f[n][i];
    return 0;
}


活动打卡代码 AcWing 2767. 优秀的拆分

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=35;
LL n;
int main() {
    cin>>n;
    if(n%2==1){cout<<"-1\n";return 0;}
    for(LL i=30;i>=1;i--){
        if(!n) return 0;
        if((1<<i)<=n){
            cout<<(1<<i)<<" ";
            n-=(1<<i);
        }
    }
    return 0;
}


活动打卡代码 AcWing 449. 质因数分解

#include<bits/stdc++.h>
using namespace std;
int n;
int main() {
    cin>>n;
    for(int i=2;i*i<=n;i++)
        if(n%i==0){
            cout<<n/i<<endl;
            break;
        }
    return 0;
}


活动打卡代码 AcWing 415. 栈

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=40;
int n;
LL c[N][N];
int main(){
    cin>>n;
    for(int i=0;i<=n*2;i++)
        for(int j=0;j<=i;j++)
            if(!j) c[i][j]=1;
            else c[i][j]=c[i-1][j]+c[i-1][j-1];
    cout<<c[n*2][n]/(n+1)<<endl;
    return 0;
}


活动打卡代码 AcWing 464. 推销员

阿明想积累很多疲劳值->疲劳值和工资成正比

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=1e5+9;
int n,f[N],g[N],h[N];
PII q[N];//q[i].x是a[i], q[i].y是s[i]
int main() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>q[i].y;
    for(int i=1;i<=n;i++) cin>>q[i].x;
    sort(q+1,q+1+n,greater<PII>());
    for(int i=1;i<=n;i++){
        f[i]=f[i-1]+q[i].x;
        g[i]=max(g[i-1],q[i].y);
    }
    for(int i=n;i>=1;i--) h[i]=max(h[i+1],q[i].x+q[i].y*2);
    for(int i=1;i<=n;i++) cout<<max(f[i]+g[i]*2,f[i-1]+h[i])<<endl;
    return 0;
}


活动打卡代码 AcWing 464. 推销员

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=1e5+9;
int n,f[N],g[N],h[N];
PII q[N];//q[i].x是a[i], q[i].y是s[i]
int main() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>q[i].y;
    for(int i=1;i<=n;i++) cin>>q[i].x;
    sort(q+1,q+1+n,greater<PII>());
    for(int i=1;i<=n;i++){
        f[i]=f[i-1]+q[i].x;
        g[i]=max(g[i-1],q[i].y);
    }
    for(int i=n;i>=1;i--) h[i]=max(h[i+1],q[i].x+q[i].y*2);
    for(int i=1;i<=n;i++) cout<<max(f[i]+g[i]*2,f[i-1]+h[i])<<endl;
    return 0;
}