2017/8/4 考试吐槽

2017 8 4 得分:110

一句话:江南皮革厂倒闭了!会的东西全带着他们的小姨子跑了!成绩统统二十分!统统二十分!

A、聪明的质检员

链接:http://cogs.pro/cogs/problem/problem.php?pid=631

题意:找到一个式子:Y_i = \sum_j 1 \times \sum_j v_j ,  j \in [L_i, R_i] \text{且} w_j \ge W, j \text{是矿石编号}与标准差绝对值最小的情况。

吐槽:二分写成三分……少写一个库……心里苦啊……考试时就这么……100分飞了……(╯‵□′)╯︵┻━┻/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~

题解:不要被那个该死的绝对值吓到而投奔三分!去掉绝对值,我们就会发现,这个狗比函数是单调下降的!于是我们改用二分!二分时要注意,函数值大于标准差测一个,小于标准差再测一个!还有就是,验证答案的时候不要XJB用什么数据结构!(数据结构学傻了---$ysf$)一个前缀和足够!恭喜成为优化加$log$成员!给这位仁兄让个地方……唉不说了说多了都是泪啊啊……

还有就是:多用$long long$!

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxn=200005;
 8 int n,m,l[maxn],r[maxn],w[maxn],v[maxn];
 9 long long sumt[maxn],sumn[maxn],s;
10 long long check(int vall)
11 {
12     for(int i=1;i<=n;i++)
13     {
14         sumt[i]=sumt[i-1],sumn[i]=sumn[i-1];
15         if(w[i]>=vall)sumt[i]++,sumn[i]+=v[i];
16     }
17     long long ans=0;
18     for(int i=1;i<=m;i++)
19     {
20         ans+=(sumn[r[i]]-sumn[l[i]-1])*(sumt[r[i]]-sumt[l[i]-1]);
21     }
22     return ans-s;
23 }
24 int haha()
25 {
26     freopen("qc.in","r",stdin);
27     freopen("qc.out","w",stdout);
28     scanf("%d%d%lld",&n,&m,&s);
29     int maxx=0,minn=1000001;
30     for(int i=1;i<=n;i++)
31     {
32         scanf("%d%d",&w[i],&v[i]);
33         maxx=max(maxx,w[i]);
34         minn=min(minn,w[i]);
35     }
36     for(int i=1;i<=m;i++)scanf("%d%d",&l[i],&r[i]);
37     int L=minn,R=maxx,mid;
38     long long ans=(long long)1e12;
39     while(L<=R)
40     {
41         mid=(L+R)>>1;long long t=check(mid);
42         if(t>=0)L=mid+1;
43         else R=mid-1;
44         ans=min(ans,abs(t));
45     }
46     printf("%lld\n",ans);
47 }
48 int sb=haha();
49 int main(){;}
cogs631

B、lucky

听说是tyvj上有但是我怎么没找到呢……不管了直接描述题意:只含有4、7的数是幸运数,不含有出现两次及以上元素序列就是不幸运的。现在给出一个序列,问长度为k的不幸运序列有几种情况。

吐槽:表打小了……(╯‵□′)╯︵┻━┻吔屎……

题解:首先我们找出来最大值范围内所有的幸运数(打表或暴搜),然后,我们处理数列中每一个数字,计算出不是幸运数的个数和幸运数的种数。

对于每一个不是幸运数的数,我们可以看出这是个简单的组合问题,而对于是幸运数的,我们直接作为0-1背包处理,因为每个幸运数最多出现一次。因此,总的公式就是:

ans=\sum_{i=1}^k {\binom{d}{k-i} \times f_i}

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const long long mod=(long long)1e9+7;
 7 long long c[100005],con[100025],f[100025];long long n,k;
 8 long long qpow(long long q,long long tim)
 9 {
10     long long tmp=q,l=1;
11     for(;tim;tim>>=1,tmp=tmp*tmp%mod)
12         if(tim&1)l=l*tmp%mod;
13     return l;
14 }
15 long long lucky_num[2050],cnt;
16 void dfs(long long val)
17 {
18     lucky_num[++cnt]=val;
19     if(1ll*val*10+4<=1e10)dfs(val*10+4);
20     if(1ll*val*10+7<=1e10)dfs(val*10+7);
21 }
22 long long ans;
23 long long tot;
24 int haha()
25 {
26     //freopen("lucky8.in","r",stdin);
27     //freopen("lucky.out","w",stdout);
28     dfs(4);dfs(7);
29     sort(lucky_num+1,lucky_num+cnt+1);
30     scanf("%lld%lld",&n,&k);
31     long long n2=n;
32     for(long long i=1;i<=n2;i++)
33     {
34         long long x;scanf("%lld",&x);
35         long long K=lower_bound(lucky_num+1,lucky_num+2046,x)-lucky_num;
36         if(lucky_num[K]==x)
37         {
38             con[K]++;
39             if(con[K]==2){n-=2;tot++;}
40             else if(con[K]>2)n--;
41         }
42     }
43     sort(con+1,con+2046,greater<long long>());
44     c[0]=1;
45     for(long long i=1;i<=n;i++)
46     {
47         c[i]=(n-i+1)*c[i-1]%mod*qpow(i,mod-2)%mod;
48     }
49     f[0]=1;
50     for(long long i=1;i<=tot;i++)
51         for(long long j=i+1;j;j--)
52             f[j]=(f[j]%mod+f[j-1]*con[i]%mod)%mod;
53     long long tim=min(tot,k);
54     for(long long i=0;i<=tim;i++)
55         ans=(ans+c[k-i]*f[i]%mod)%mod;
56     printf("%lld\n",ans);
57     //while(1);
58 }
59 int sb=haha();
60 signed main(){;}
View Code

 C、兔农

链接:http://cogs.pro/cogs/problem/problem.php?pid=1374

题意:一个数列,与$Fibonacci$数列唯一的不同就在于如果$f[i]mod n=1$,$f[i]--$。求出这个数列对于一个模数取膜后的某一项。

吐槽:暴力答不对啊……死了得了……

题解:暴力好打,然而正解至今没有看懂(明明是你太蒻了好不好),只能丢链接加%dalao了……

$vfk$的:http://vfleaking.blog.163.com/blog/static/174807634201341721051604/

鏼的:http://jcvb.is-programmer.com/posts/39528.html

回来再填坑吧……(逃

posted @ 2017-08-04 21:39  ccc000111  阅读(134)  评论(0编辑  收藏  举报