• 19-11-08-+


    $RP++$

    ZJ:

    犯傻了……

    T1因为暴力打错所以表也死了。

    后来改对我也没再打。(我在干什么????

    T2仿佛是个原题(货车运输??)蒟蒻没做过不过现在也涨知识了。

    T3多测 return 0  挂15分……

    43
    Miemeng 20
    00:00:47
    30
    00:00:47
    5
    00:00:47
    55
    00:00:47

    TJ解:

    大家都AC了我写这个没意义了吧

    T1:

    简单打表会发现,我们的字符串的长相不会影响答案。

    然后我们再简单证明一下。

    我们的合法情况只有在原字符串的中间插入一些字符(或者卡在开头结尾)

    那么为了防止重复,紧接着的下一个字符不能是字符串内的该位字符。

    但是有一个不需要考虑,开头/结尾,不然就会因为把一种情况全部删除而容斥失败。

    于是:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #define LL long long
    #define N 1111111
    
    using namespace std;
    
    LL n,len;
    char st[N];
    const int Mod=998244353;
    
    LL ppow(LL a,LL b){
    	LL res=1;
    	if(b<0)return 0;
    	while(b){
    		if(b&1)res=res*a%Mod;
    		a=a*a%Mod;
    		b>>=1;
    	}
    	return res;
    }
    int main(){
    #ifndef LOCAL
    	freopen("magic.in" ,"r",stdin);
    	freopen("magic.out","w",stdout);
    #endif
    	ios_base::sync_with_stdio(false);
    	cin>>n>>st;
    	len=strlen(st);
    	cout<<(ppow(26,n)%Mod-ppow(26,n-len)%Mod-len*25%Mod*ppow(26,n-len-1)%Mod+Mod+Mod+Mod)%Mod<<endl;
    }
    

    T2:

    (反)货车运输。

    先跑最小生成树,然后树上倍增维护边权即可!

    //climb
    
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    #define N 111111
    
    using namespace std;
    
    int dn,hei;
    struct YW{
    	int up,down;
    }ys[N];
    int upw[N],per[N];
    int ans=0x7fffffff;
    struct A_MAX{
    	int up,down,id;
    	A_MAX(){}
    	A_MAX(const YW a,int b){up=a.up,down=a.down,id=b;}
    	friend bool operator < (const A_MAX &a,const A_MAX &b){
    		return a.up<b.up;
    	}
    };
    struct Del_MAX{
    	int up,down,id;
    	Del_MAX(){}
    	Del_MAX(const YW a,int b){up=a.up,down=a.down,id=b;}
    	friend bool operator < (const Del_MAX &a,const Del_MAX &b){
    		return a.up-a.down<b.up-b.down;
    	}
    };
    bool is_del[N];
    priority_queue<A_MAX>aq;
    priority_queue<Del_MAX>dq;
    namespace B_eq_0{
    	inline bool CMP(const YW &a,const YW &b){
    		return a.up>b.up;
    	}
    	void work(){
    		sort(ys+1,ys+dn+1,CMP);
    		int pos=0,wpos=0;
    		for(int i=1;i<=dn;i++){
    			pos+=ys[i].up;
    			if(pos>=hei){
    				printf("%d
    ",i);
    				return ;
    			}
    			wpos+=upw[i];
    			if(pos<=wpos){
    				puts("-1");
    				return ;
    			}
    		}
    		puts("-1");
    		return ;
    	}
    }
    namespace C_eq_0{
    	void work(){
    		for(int i=1;i<=dn;i++){
    			aq.push(  A_MAX(ys[i],i));
    			dq.push(Del_MAX(ys[i],i));
    		}
    		int pos=0;
    		for(int i=1;i<=dn;i++){
    			while(is_del[aq.top().id] && pos+aq.top().down+dq.top().up-dq.top().down < hei){
    				aq.pop();
    			}
    			if(is_del[aq.top().id]){
    				printf("%d
    ",i);
    				return;
    			}
    			else if(!is_del[aq.top().id] && aq.top().up+pos>=hei){
    				printf("%d
    ",i);
    				return;
    			}
    			pos+=dq.top().up;
    			pos-=dq.top().down;
    			is_del[dq.top().id]=1;
    			dq.pop();
    		}
    		puts("-1");
    		return ;
    	}
    }
    int getans(){
    	int pos=0,wtpos=0;
    	for(int i=1;i<=dn;i++){
    		pos+=ys[per[i]].up;
    		if(pos>=hei)
    			return i;
    		pos-=ys[per[i]].down;
    		wtpos+=upw[i];
    		if(pos<=wtpos)return 0x7fffffff;
    	}
    	return 0x7fffffff;
    }
    
    int main(){
    #ifndef LOCAL
    	freopen("climb.in" ,"r",stdin);
    	freopen("climb.out","w",stdout);
    #endif
    	bool down_0=1,upw_0=1;
    	scanf("%d%d",&dn,&hei);
    	for(int i=1;i<=dn;i++){
    		per[i]=i;
    		scanf("%d%d",&ys[i].up,&ys[i].down);
    		if(ys[i].down!=0)down_0=0;
    	}
    	for(int i=1;i<=dn;i++){
    		scanf("%d",upw+i);
    		if(upw[i]!=0)upw_0=0;
    	}
    	if(dn<=10){
    		do{
    			ans=min(ans,getans());
    		}while(next_permutation(per+1,per+dn+1));
    		printf("%d
    ",ans>dn?-1:ans);
    		return 0;
    	}
    	if(down_0)    B_eq_0::work();
    	else if(upw_0)C_eq_0::work();
    	else{
    		for(int i=1;i<=dn;i++){
    			aq.push(  A_MAX(ys[i],i));
    			dq.push(Del_MAX(ys[i],i));
    		}
    		int pos=0,wpos=0;
    		for(int i=1;i<=dn;i++){
    			while(is_del[aq.top().id] && pos+aq.top().down+dq.top().up-dq.top().down < hei){
    				aq.pop();
    			}
    			if(is_del[aq.top().id]){
    				printf("%d
    ",i);
    				return 0;
    			}
    			else if(!is_del[aq.top().id] && aq.top().up+pos>=hei){
    				printf("%d
    ",i);
    				return 0;
    			}
    			pos+=dq.top().up;
    			if(pos>=hei){
    				printf("%d
    ",i);
    				return 0;
    			}
    			pos-=dq.top().down;
    			wpos+=upw[i];
    //			cout<<pos<<" "<<wpos<<endl;
    			if(pos<=wpos)break;
    			is_del[dq.top().id]=1;
    			dq.pop();
    		}
    		puts("-1");
    
    	}
    }
    

    T3

    你见我写过T3题解吗

  • 相关阅读:
    .NET使用DAO.NET实体类模型操作数据库
    .NET连接数据库及基本增删改查
    Struts2超链接
    微信小程序与Java后台的通信
    Java中重载和重写的区别
    Java中Double保留后小数位的几种方法
    北大集训2019游记
    HTML5前端
    软件测试面试题2018
    软件测试笔试题(2018精华篇)
  • 原文地址:https://www.cnblogs.com/kalginamiemeng/p/Exam20191108.html
Copyright © 2020-2023  润新知