zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 192

    https://atcoder.jp/contests/abc192/tasks

    /*果然还是我太菜了qwq*/

    D

    当长度为1时需要特判一下,因为以任何大于该数为底的值都为该数。

    长度大于1时直接二分就行。

    /*
    */
    char s[100];
    int ma,len;
    ll m;
    bool check(ll x)
    {
    	ll now=0;
    	rep(i,1,len)
    	{
    		if(m<s[i]-'0')return 0;
    		if(now>(m-(s[i]-'0'))/x)return 0;
    		now=now*x+s[i]-'0';
    //		pdd(i,now);
    	}
    	return 1;
    }
    void solve()
    {
    	sc(s+1);
    	slld(m);
    	len=strlen(s+1);
    	rep(i,1,len)ma=max(ma,s[i]-'0');
    	if(len==1)
    	{
    		if(m>=ma)puts("1");
    		else puts("0");
    		return;
    	}
    	ll l=ma+1,r=m,ans=0;
    	while(l<=r)
    	{
    		ll mid=(l+r)>>1;
    		if(check(mid))l=mid+1,ans=mid-ma;
    		else r=mid-1;
    //		plld(mid);
    	}
    	plld(ans);
    }
    int main()
    {
    //    ios::sync_with_stdio(false);
    //    cin.tie(0);
        int T=1;
    //    sd(T);
        while(T--)solve(); 
    }
    

      

    E

    迪杰斯特拉

    给你一个无向图

    每条边有两个参数t,k代表经过这条边需要的时间t和时间为k的倍数时才可以通过

    /*
    */
    struct node{
    	int to,nex;
    	ll t,k;
    }a[maxn<<1];
    int n,m,head[maxn],cnt,x,y;
    ll d[maxn];
    void add(int fro,int to,ll t,ll k)
    {
    	a[++cnt].to=to;
    	a[cnt].t=t;
    	a[cnt].k=k;
    	a[cnt].nex=head[fro];
    	head[fro]=cnt;
    }
    void bfs()
    {
    	d[x]=0;
    	priority_queue<PLI,deque<PLI >,greater<PLI > >pq;
    	pq.push(mk(0,x));
    	while(!pq.empty())
    	{
    		PLI p=pq.top();
    		pq.pop();
    		ll val=p.fi;
    		int cur=p.se;
    		if(cur==y)return;
    		for(int i=head[cur];i;i=a[i].nex)
    		{
    			int to=a[i].to;
    			ll t=a[i].t,k=a[i].k;
    			ll tmp=val%k;
    			if(!tmp)tmp=k;
    			tmp=k-tmp;
    			if(d[to]>val+tmp+t)
    			{
    				d[to]=val+tmp+t;
    				pq.push(mk(d[to],to));
    			}
    		}
    	}
    }
    void solve()
    {
    	sdd(n,m);sdd(x,y);
    	rep(i,1,n)d[i]=1e18;
    	rep(i,1,m)
    	{
    		int u,v;
    		ll t,k;
    		scanf("%d%d%lld%lld",&u,&v,&t,&k);
    		add(u,v,t,k);
    		add(v,u,t,k);
    	}
    	bfs();
    	if(d[y]==1e18)d[y]=-1;
    	plld(d[y]);
    }
    int main()
    {
    //    ios::sync_with_stdio(false);
    //    cin.tie(0);
        int T=1;
    //    sd(T);
        while(T--)solve(); 
    }
    

      

    F

    这题。。。比赛时debug半天都没过,而且还wa30,结果没想到是f的锅。

    /*
    n种材料 第i种能力为ai
    从中选择大于等于1种材料混合它们
    混合k种的话 能力为总的能力
    每秒增加k能力 增加的是离散的不是连续的
    最早什么时候能获得准确x能力
    是可以获得x能力的 
    */
    int n,a[109],f[109];
    //选择i件物品必须sum[i]%i==f[i] 
    ll x,res,sum; 
    int tmp[109][109];
    void solve()
    {
    	sd(n);slld(x);
    	rep(i,1,n)sd(a[i]),sum+=a[i];
    	if(sum==x)
    	{
    		puts("0");
    		return;	
    	} 
    	rep(i,1,n)f[i]=x%i;
    	sort(a+1,a+1+n);
    	res=x-a[n];
    	rep(i,2,n)//选i个 
    	{
    		memset(tmp,-1,sizeof tmp);
    		tmp[0][0]=0;
    		rep(j,1,n)//排到当前 
    		{
    			dep(ii,min(i-1,j-1),0)//前边选了ii个的和 
    			rep(k,0,i-1)
    			{
    				if(tmp[ii][k]==-1)continue;
    				tmp[ii+1][(k+a[j])%i]=max(tmp[ii+1][(k+a[j])%i],tmp[ii][k]+a[j]);
    			}
    		}
    		if(tmp[i][f[i]]!=-1)res=min(res,(x-tmp[i][f[i]])/i);//,
    //		printf("%d %lld
    ",i,(x-tmp[i][f[i]])/i);
    	}
    	plld(res);
    }
    int main()
    {
    //    ios::sync_with_stdio(false);
    //    cin.tie(0);
        int T=1;
    //    sd(T);
        while(T--)solve(); 
    }
    

      

    欢迎加我qq1165750856一起玩呀~
  • 相关阅读:
    Atitit.ide eclipse编译速度慢的解决
    Atitit.ide eclipse编译速度慢的解决
    Atitit.可视化与报表原理与概论
    Atitit.可视化与报表原理与概论
    Atitit.数据检索与网络爬虫与数据采集的原理概论
    Atitit.数据检索与网络爬虫与数据采集的原理概论
    Atitit 游戏的原理与概论attilax总结
    Atitit 游戏的原理与概论attilax总结
    Atiti.ui原理与gui理论
    Atiti.ui原理与gui理论
  • 原文地址:https://www.cnblogs.com/HHHEN/p/14424615.html
Copyright © 2011-2022 走看看