复制代码

NerCoder 练习赛13

今天有点事,,明天要考CCF,就不写题解了,祝福我 BUFF  加成,我要AK 

A幸运数字Ⅰ

#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
typedef double    dl ;
#define INF ((ll)2e9)

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; 

#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define sz(a)   strlen(a)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);

#define lowbit(x) x&(-x)
#define X first
#define Y second 

#define pb push_back
#define pii pair<int,int>

ll poww(ll a,ll b,ll c )
{
    ll ans=1,base=a;
    while(b!=0)
    {
        if(b&1!=0) ans = ans*base%c; 
        base= base*base%c;
        b/=2;
    }
   return ans;
}
int gcd(int a,int b)
{
    if(b==0)return a;
    return gcd(b,a%b);
}

int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
int n;
int a,b,t;
void work()
{
    char c ;
    while(cin>>c)
    {
        if(c=='4'){
            a++;
            if(t==0)t=4;
        }
        if(c=='7'){
            b++;
            if(t==0)t=7;
        }
    }
    if(a==0&&b==0)cout<<-1<<endl;
    else if(a>b) cout<<4<<endl;
    else if(b>a) cout<<7<<endl; 
    else cout<<t<<endl;

}

int main()
{
    FAST_IO ;
    
    freopen("in","r",stdin);
    freopen("out","w",stdout);
    cout<<"hello"<<endl;
 
    work();
   
    return 0; 
}
View Code

 

B幸运数字Ⅱ    

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\
            freopen("out","w",stdout); 

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; 
#define pb push_back
#define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;) 
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr)) 
typedef long long LL; 

inline void read(LL& x){int f=1;char c;while(((c=getchar())<'0'||c>'9')&&c!='-');c=='-'?(f=-1,x=0):(x=c-'0');while((c=getchar())>='0'&&c<='9')x=x*10+c-'0';x*=f;}
inline void read(int& x){LL t;read(t);x=t;}
 
vector<LL> ans;
 
 
void p(LL s){
    LL t1=s*10+4;
    if(t1>LL(4444444444ll)) return;
    ans.pb(t1);
    LL t2=s*10+7;
    if(t2>LL(444444444)) return;
    ans.pb(t2);
    p(t1);p(t2);
}
int main()
{
     p(0);sort(ans.begin(),ans.end());
    LL l,r;read(l);read(r);
    LL as=0;
    while(l<=r){
        int q=int(lower_bound(ans.begin(),ans.end(),l)-ans.begin());
        as+=1LL*(min(r,ans[q])-l+1)*ans[q];
        l=min(r,ans[q])+1;
    }
    printf("%lld\n",as);
    return 0;
     
    return 0;
}
View Code

 


C幸运数字Ⅲ    

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\
            freopen("out","w",stdout); 

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; 

#define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;) 
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr)) 
typedef long long ll; 

int main()
{
    LOACL
     string s;
 
    int n,k;
    cin>>n>>k>>s;
    for(int i=0;i<n-1;i++)
    {
        if(k<=0)break;
        if(s[i]=='4'&&s[i+1]=='7')
        {
            k--;
            if(i&1)
            {
                s[i]='7';
                if(i>=1&&s[i-1]=='4')
                {
                    if(k&1)s[i]='4';
                    cout<<s<<"\n";
                    return 0;
                }
            }
            else
            {
                s[i+1]='4';
                if(i+2<s.size()&&s[i+2]=='7')
                {
                    if(k&1)s[i+1]='7';
                    cout<<s<<"\n";
                    return 0;
                }
            }
        }
    }
    cout<<s<<"\n";
  
    return 0;
}
View Code

 


D幸运数字Ⅳ    

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\
            freopen("out","w",stdout); 

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; 

#define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;) 
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr)) 
typedef long long ll; 
ll n ,k,x,y,p=1,s=1,ans;
ll a[sz],nf,g[110] ;
void work(ll s)
{
    if(s>inf) return ;
    ll t1= s*10+4;
    ll t2 = s*10+7;
    a[++nf]=t1;a[++nf]=t2;
    work(t1);
    work(t2);
}
 
void get1(long long d,long long x,long long y,long long z){
    d--;
    bool p[20];
    for (int i=1;i<=z;i++) p[i]=true;
    for (int i=1;i<=z;i++){
        int j=d/(x/y);
        x/=y;d%=x;y--;
        if (i==z){for (int k=1;k<=z;k++) if (p[k]) g[i]=k;}
        else{for (int k=1,s=0;k<=z;k++){if (p[k]) s++;if (s-1==j){p[k]=false;g[i]=k;break;}}}
    }
}
void get(ll d,ll x,ll y,ll z)
{
    d--;bool p[20];
    CLR(p,1);
    f(i,1,z)
    {
        int j = d/(x/y);
        x/=y;
        d%=x;y--;
        if(i==z)
        {
            f(k,1,z)
            {
                if(p[k])
                    g[i]=k;
            }
        }
        else
        {
            int s =0;
            f(k,1,z)
            {
                if(p[k]) s++;
                if(s-1==j)
                {
                    p[k]=false;
                    g[i]=k;
                    break;
                }
            }
        }
 
    }
}
bool pan(long long x){
    while (x){
        if (x%10!=7&&x%10!=4) return false;
        x/=10;
    }
    return true;
}
int main()
{
    LOACL
    cin>>n>>k;
    work(0);sort(a+1,a+nf+1);
    while(p<k)++s,p*=s;
    if(s>n){cout<<-1<<endl;return 0;}
    for (long long i=1;i<=nf;i++)if(a[i]<=n-s) ans++;
    get(k,p,s,s);
//f(i,1,100) cout<<g[i]<<" ";cout<<endl;
     for (long long i=1;i<=s;i++) if (pan(i+n-s)&&pan(g[i]+n-s)) ans++;
    cout<<ans<<endl;
    return 0;
}
View Code

 


Fm皇后

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\
            freopen("out","w",stdout); 

const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; 

#define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;) 
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr)) 
typedef long long ll; 
ll n ,k,x,y,p=1,s=1,ans;
ll a[sz],nf,g[110] ;
void work(ll s)
{
    if(s>inf) return ;
    ll t1= s*10+4;
    ll t2 = s*10+7;
    a[++nf]=t1;a[++nf]=t2;
    work(t1);
    work(t2);
}
 
void get1(long long d,long long x,long long y,long long z){
    d--;
    bool p[20];
    for (int i=1;i<=z;i++) p[i]=true;
    for (int i=1;i<=z;i++){
        int j=d/(x/y);
        x/=y;d%=x;y--;
        if (i==z){for (int k=1;k<=z;k++) if (p[k]) g[i]=k;}
        else{for (int k=1,s=0;k<=z;k++){if (p[k]) s++;if (s-1==j){p[k]=false;g[i]=k;break;}}}
    }
}
void get(ll d,ll x,ll y,ll z)
{
    d--;bool p[20];
    CLR(p,1);
    f(i,1,z)
    {
        int j = d/(x/y);
        x/=y;
        d%=x;y--;
        if(i==z)
        {
            f(k,1,z)
            {
                if(p[k])
                    g[i]=k;
            }
        }
        else
        {
            int s =0;
            f(k,1,z)
            {
                if(p[k]) s++;
                if(s-1==j)
                {
                    p[k]=false;
                    g[i]=k;
                    break;
                }
            }
        }
 
    }
}
bool pan(long long x){
    while (x){
        if (x%10!=7&&x%10!=4) return false;
        x/=10;
    }
    return true;
}
int main()
{
    LOACL
    cin>>n>>k;
    work(0);sort(a+1,a+nf+1);
    while(p<k)++s,p*=s;
    if(s>n){cout<<-1<<endl;return 0;}
    for (long long i=1;i<=nf;i++)if(a[i]<=n-s) ans++;
    get(k,p,s,s);
//f(i,1,100) cout<<g[i]<<" ";cout<<endl;
     for (long long i=1;i<=s;i++) if (pan(i+n-s)&&pan(g[i]+n-s)) ans++;
    cout<<ans<<endl;
    return 0;
}
View Code

 

posted @ 2018-03-17 20:09  pg633  阅读(143)  评论(0编辑  收藏  举报