• 2018 计蒜之道 初赛 第二场


    这次Rank202我就很不爽了,凭什么有个罚时也是210的就排在200了

    主要还是T2太ZZ了,前几次都忘了输Emply。之前还因为map的变量名叫做hash被判错了?

    后面两题我都不会,这种玄学字符串的题目我是真的烦

    说实话我还是比较喜欢图论题

    A. 淘宝的推荐系统

    咋一看题目很烦,一般的O(n^2)的DP式子肯定都可以推出来,但优化......

    全机房开始YY数据结构,单调队列,线段树,主席树......感觉都比较科学,但有个dalao叫trie这就是什么鬼?

    好吧其实他是先看T2的

    这里其实仔细看一下数据范围就水得一匹,d<=100,p[i]<=1e5

    然后我们就换一种思路DP,设f[i]表示最后一件选择的价格为i的商品最多能卖出多少件,则有转移

    f[i]=max(f[i],f[j]+1)(max(1,i-d)<=j<=min(MAX_p[i],i+d))
    

    10min1A(如果先看到数据范围的话就可以5min了)

    CODE

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=30005,MAX=1e5+5;
    int f[MAX+100],t,n,d,x,ans;
    inline char tc(void)
    {
    	static char fl[100000],*A=fl,*B=fl;
    	return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
    }
    inline void read(int &x)
    {
    	x=0; char ch=tc();
    	while (ch<'0'||ch>'9') ch=tc();
    	while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
    }
    inline void write(int x)
    {
    	if (x/10) write(x/10);
    	putchar(x%10+'0');
    }
    inline int min(int a,int b)
    {
    	return a<b?a:b;
    }
    inline int max(int a,int b)
    {
    	return a>b?a:b;
    }
    int main()
    {
    	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    	register int i,j; read(t);
    	while (t--)
    	{
    		memset(f,0,sizeof(f));
    		read(n); read(d); ans=0;
    		for (i=1;i<=n;++i)
    		{
    			read(x); f[x]+=1;
    			for (j=x-1;j>=max(1,x-d);--j) f[x]=max(f[x],f[j]+1);
    			for (j=x+1;j<=x+d;++j) f[x]=max(f[x],f[j]+1);
    			ans=max(ans,f[x]);
    		}
    		write(ans); putchar('
    ');
    	}
    	return 0;
    }
    

    B. 阿里巴巴的手机代理商(简单)

    这种题目无力吐槽。

    尽管他们都选择把trie改成从后向前的来一口气AT2,T3,但我吸取了昨天的教训,迅速开map刚T2

    然后就如前文说的出现了SB错误,最后90min的时候才过,还交了6次

    然后浪费了一次绝佳上200的机会

    缅怀CJJT2炸裂

    记住一个教训:map的变量名不能叫hash!(雾)I don't know why

    CODE

    #include<iostream>
    #include<map>
    #include<string>
    #include<cstring>
    using namespace std;
    typedef long long LL;
    const LL N=1005;
    string p,s[N];
    map <string,LL> h;
    map <string,bool> vis;
    LL n,t,x,opt[N],a[N],tot;
    inline LL work(string p)
    {
    	vis.clear();
    	register LL i; LL len=p.size(),sum=0;
    	for (i=1;i<=n;++i)
    	if (opt[i]==1&&s[i].size()>=len&&!vis[s[i]])
    	{
    		LL p1=s[i].size()-1,p2=len-1; bool flag=1;
    		while (p2>=0)
    		{
    			if (s[i][p1]!=p[p2]) { flag=0; break; }
    			--p1; --p2;
    		}
    		if (flag) sum+=a[h[s[i]]],vis[s[i]]=1;
    	}
    	return sum;
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	register LL i; cin>>t;
    	while (t--)
    	{
    		h.clear(); memset(a,0,sizeof(a)); cin>>n; tot=0;
    		for (i=1;i<=n;++i)
    		{
    			cin>>p; 
    			if (p[0]=='i') 
    			{
    				opt[i]=1; cin>>s[i]>>x;
    				if (!h[s[i]]) h[s[i]]=++tot;
    				a[h[s[i]]]+=x;
    			}
    			if (p[0]=='q') opt[i]=2,cin>>s[i],cout<<work(s[i])<<endl;
    			if (p[0]=='d') 
    			{
    				opt[i]=3; cin>>s[i]; 
    				if (!a[h[s[i]]]) cout<<"Empty"<<endl; else a[h[s[i]]]=0;
    			}
    		}
    	}
    	return 0;
    }
    

    后面的两题我就不会了,自行Baidu吧

  • 相关阅读:
    PHP Context学习系列《十》
    学习php记录《九》
    学习php记录《八》
    php学习记录《七》
    换到新工作后
    学习php记录《六》
    学习php记录《五》
    学习php记录《四》
    学习php记录《三》
    html基础
  • 原文地址:https://www.cnblogs.com/cjjsb/p/9037635.html
Copyright © 2020-2023  润新知