Week 11 T4

Posted pedestrian6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Week 11 T4相关的知识,希望对你有一定的参考价值。

问题描述】

 

众所周知,衡量一个编译器是否优秀的标准,除了它的编译速度和正确性以外,编译出的代码的质量也很重要。最近,作为XCC系列编译器作者的Dr. X发明了一种跨时代的优化算法:“NanGe不等式优化”。一个程序可以看成是由若干个连续的函数构成的,NanGe不等式算法能针对某一个函数进行优化,得到一个优化效果值, 不同的函数的效果值可能是不同的。但这个算法还有一个很大的Bug: _该算法不能同时优化相邻的两个函数,否则就会直接Compile Error,值得注意的是,一个程序的第一个函数和最后一个函数也算是相邻的。 _现在给你一个程序从头到尾每个函数的优化效果值,Dr. X想用NanGe不等式对该程序的M个函数进行优化,他该怎么选择才能使总的优化效果值最大(前提是不能出现错误)?如果错误不能避免,请输出“Error!”

 

 

 

【输入格式】      

输入文件的第一行包含两个正整数n、m。

第二行为n个整数Ai。

 

【输出格式】  

输出文件仅一个整数,表示最后对该程序进行优化后的最大效果值。如果无解输出“Error!”,不包含引号。

 

 

 

【样例输入1】

7 3

1 2 3 4 5 6 7

【样例输出1】

15

【样例输入2】

7 4

1 2 3 4 5 6 7

【样例输出2】

Error!

 

 

【数据范围与规定】

对于全部数据:m<=n;-1000<=Ai<=1000 N的大小对于不同数据有所不同:_

 

数据编号

N的大小 _

数据编号 _

N的大小 _

1

40

11

2013

2

45

12

5000

3

50

13

10000

4

55

14

49999

5

200

15

111111

6

200

16

148888

7

1000

17

188888

8

2010

18

199999

9

2011

19

199999

10

2012

20

200000

 

solution:一个类似于网络流反向弧的思想,一个数取过之后,就把它和左右两个数缩成一个点,权值为两边之和减去该数权值,如果再取相当于不取它取两边。set起堆的作用,贪心取最大,set方便删除

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define N (200010)
 5 using namespace std;
 6 char S1[N],S2[N];
 7 int n,m,T[N];
 8 bool Check(int time){
 9     int i,p=1;
10     for (i=1;i<=m;i++){
11         while ((S1[p]!=S2[i]||T[p]<=time)&&p<=n) 
12             p++;
13         if (p>n) return 0;
14         p++;
15     }
16     return 1;
17 }
18 int main(){
19     cin>>(S1+1)>>(S2+1);
20     n=strlen(S1+1); m=strlen(S2+1);
21     int i;
22     for (i=1;i<=n;i++){
23         int x; scanf("%d",&x);
24         T[x]=i;
25     } 
26     int l=1,r=n,ans=0;
27     while (l<=r){
28         int mid=(l+r)>>1;
29         if (Check(mid)) ans=mid,l=mid+1;
30         else r=mid-1;
31     }
32     cout<<ans;
33 }

 

以上是关于Week 11 T4的主要内容,如果未能解决你的问题,请参考以下文章

T4模板之菜菜鸟篇

ZROI week6

[Week 19]每日一题(C++,数学,并查集,动态规划)

Week11《java程序设计》作业总结

来自服务器资源管理器的 T4 模板使用连接

如何在 T4 模板中使用 DbContext?