zoukankan      html  css  js  c++  java
  • 0314考试总结

    总体来说今天的题目其实还是蛮良心的。

    T1昨天刚刚学习的预处理组合数,今天正好就用上了,挺好的不过如何A呢?手玩了1个小时,发现的确不是很好搞,于是暴力50弃疗。

    T2什么玩意啊...问了学长题意以后刚了一会,发现的确没什么思路,略过。

    T3想了想贪心,自己手玩了一些小数据,发现贪心的思想是错误的。然后想着如何正解的时候,用了个假的贪心,发现四组大数据全部过了,稳!

    --------------------------------------中午打球-------------------------------------------

    下午来的时候评测,发现自己只有0+0+70

    whatfa?T1怎么回事,一看程序,忘了取模,加上...瞬间多了50分。

    听了一波题解,发现T1和昨天的思路很像,都是组合数和走的方案数的模型转换,这个操作不错,以后遇到这种题目可以尝试往这方面想一下。

    改了以后AC的code:

    #include<bits/stdc++.h>
    using namespace std;
    long long ans=0,maxn=0,v[10010],f[4010][4010],n,fv[10010],mod=1000000007,a[210000],b[210000],ff[10010];
    long long f2[4010][4010];
    int main()
    {
    	freopen("a.in","r",stdin);
    	freopen("a.out","w",stdout);
    	scanf("%lld",&n);
    	for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i],&b[i]);
    	v[1]=1;
    	for(int i=2;i<=10000;i++)v[i]=(mod-mod/i)*v[mod%i]%mod;
    	ff[0]=1;fv[0]=1;
    	for(int i=1;i<=10000;i++){ff[i]=ff[i-1]*i%mod;fv[i]=fv[i-1]*v[i]%mod;}
    	memset(f,0,sizeof(f));
    	for(int i=1;i<=n;i++){scanf("%d%d",&a[i],&b[i]);maxn=max(maxn,a[i]);maxn=max(maxn,b[i]);}
    	maxn++;
    	for(int i=1;i<=n;i++){f[maxn-a[i]][maxn-b[i]]++;f2[maxn+a[i]][maxn+b[i]]++;}
    	for(int i=1;i<=maxn*2;i++)
    		for(int j=1;j<=maxn*2;j++)
    		{
    			f[i][j]+=f[i-1][j]+f[i][j-1];
    			f[i][j]%=mod;
    			if(f2[i][j]){ans+=f[i][j]*f2[i][j];ans%=mod;}
    		}
    	for(int i=1;i<=n;i++)
    	{
    		ans-=((ff[a[i]*2+b[i]*2]*fv[b[i]*2]%mod)*fv[a[i]*2]%mod);
    		ans=((ans%mod)+mod)%mod;
    	}
    	printf("%lld
    ",ans/2);
    	return 0;
    }
    

      T2好像是个什么构造的题,感觉考场上敲这种题目是很不知得的。

      T3树形DP或者乱搞的题目,澜神好强大啊...

  • 相关阅读:
    数组和字符串//反转字符串
    数组和字符串//实现strStr()
    数组和字符串//二进制求和
    数组和字符串//加一
    数组和字符串//至少是其他数字两倍的最大数
    LeetCode111_求二叉树最小深度(二叉树问题)
    数据结构6.8_树的计数
    数据结构6.7_回溯法和树的遍历
    数据结构6.6_赫夫曼树及其应用
    数据结构6.5_树与等价问题
  • 原文地址:https://www.cnblogs.com/mybing/p/8570217.html
Copyright © 2011-2022 走看看