CSU-ACM2014年校队选拔赛指导赛解题报告

•Problem A  CSU 1065                               贪心

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 const int maxn = 1000010;
 6 struct Node{
 7     int a,b;
 8     bool operator < (const Node& rhs) const{
 9         return b < rhs.b;
10     }
11 }node[maxn];
12
13 int main(){
14     int n,r = -1,ans = 0;
15     scanf("%d",&n);
16     for(int i = 0;i < n;i++){
17         scanf("%d%d",&node[i].a,&node[i].b);
18     }
19     sort(node,node+n);
20     for(int i = 0;i < n;i++){
21         if(node[i].a > r){
22             ans++;
23             r = node[i].b;
24         }
25     }
26     printf("%d\n",ans);
27     return 0;
28 }

•Problem B  CSU 1060                                DP

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 const int maxn = 110;
 6 char s1[maxn],s2[maxn],s3[maxn];
 7 int dp[maxn][maxn][maxn];
 8
 9 int main(){
10     while(scanf("%s",s1+1) != EOF){
11         scanf("%s",s2+1);
12         scanf("%s",s3+1);
13         int len1 = strlen(s1+1);
14         int len2 = strlen(s2+1);
15         int len3 = strlen(s3+1);
16         memset(dp,0,sizeof(dp));
17
18         for(int i = 1;i <= len1;i++){
19             for(int j = 1;j <= len2;j++){
20                 for(int k = 1;k <= len3;k++){
21                     if(s1[i] == s2[j] && s2[j] == s3[k]){
22                         dp[i][j][k] = dp[i-1][j-1][k-1]+1;
23                     }else{
24                         int tmp1 = dp[i-1][j][k];
25                         int tmp2 = dp[i][j-1][k];
26                         int tmp3 = dp[i][j][k-1];
27                         tmp1 = max(tmp1,tmp2);
28                         tmp1 = max(tmp1,tmp3);
29                         dp[i][j][k] = tmp1;
30                     }
31                 }
32             }
33         }
34
35         printf("%d\n",dp[len1][len2][len3]);
36     }
37     return 0;
38 }

•Problem C  CSU 1307                               最短路

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 using namespace std;
 6 typedef pair<int,int> pii;
 7 const int maxn = 2010;
 8 const int maxm = 100010;
 9 int v[maxm],next[maxm],w[maxm];
10 int d[maxm],first[maxn],e;
11 void init(){
12     e = 0;
13     memset(first,-1,sizeof(first));
14 }
15
16 void add_edge(int a,int b,int c){
17     v[e] = b;next[e] = first[a];w[e] = c;first[a] = e++;
18 }
19
20 int dijkstra(int src,int dist,int mid){
21     priority_queue <pii,vector<pii>,greater<pii> > q;
22     memset(d,-1,sizeof(d));
23     d[src] = 0;
24     q.push(make_pair(0,src));
25     while(!q.empty()){
26         while(!q.empty() && q.top().first > d[q.top().second])  q.pop();
27         if(q.empty())   break;
28         int u = q.top().second;
29         q.pop();
30         for(int i = first[u];i != -1;i = next[i])if(w[i] <= mid){
31             if(d[v[i]] > d[u] + w[i] || d[v[i]] == -1){
32                 d[v[i]] = d[u]+w[i];
33                 q.push(make_pair(d[v[i]],v[i]));
34             }
35         }
36     }
37     return d[dist];
38 }
39
40 int main(){
41     int n,m,src,dist;
42     while(scanf("%d%d%d%d",&n,&m,&src,&dist) != EOF){
43         init();
44         int l = 1<<30,r = -1,ans = 1<<30;
45         for(int i = 0;i < m;i++){
46             int a,b,c;
47             scanf("%d%d%d",&a,&b,&c);
48             add_edge(a,b,c);
49             add_edge(b,a,c);
50             l = min(l,c);
51             r = max(r,c);
52         }
53         while(l <= r){
54             int mid = (l+r)>>1;
55             int tmp = dijkstra(src,dist,mid);
56             if(tmp == -1)    l = mid+1;
57             else    r = mid-1,ans = tmp;
58         }
59
60         printf("%d\n",ans);
61     }
62     return 0;
63 }

•Problem D  CSU 1290                               DP

 1 #include <cstdio>
 2 double dp[1005];
 3 int main()
 4 {
 5     int n,t;
 6     double k;
 7     scanf("%d", &t);
 8     while (t--) {
 9         scanf("%lf %d", &k, &n);
10         dp[1] = 1.0;
11         for (int i = 2; i <= n; ++i)
12             dp[i] = dp[i-1] + (k - dp[i-1])/k;
13         printf("%.5f\n", dp[n]);
14     }
15     return 0;
16 }

CSU-ACM2014年校队选拔赛指导赛解题报告

时间: 2024-08-10 00:07:20

CSU-ACM2014年校队选拔赛指导赛解题报告的相关文章

20161027模拟赛解题报告

20161027模拟赛解题报告 By shenben T1 数学题 模拟即可. 注意开long long T2 技巧题 图片为本题第一张图.(无奈,图传不上来) 首先第一问图中的“Y 字形”的数量,这么简单,在此不细讲. 详见代码 O(n)累加一下就好了 主要说说第二问怎么搞 预处理 每个点分别与其他那些点相连 权值为第1,2,3大(若没有2,3大,就忽略).记录一下权值与对应的点的标号.目的是方便下面的判断. 枚举入度>=3的点,即点B(有多个) 再枚举点B相连的D点(不是点A,C). Ste

20161026模拟赛解题报告

20161026模拟赛解题报告 By shenben T1 按照题目说的模拟即可 但这题有一个神坑:当25个字母都已经一一对应完毕后,剩下的两个字母默认对应. T2 所有的逆序对之间都会连边,求最大独立点集. 表面上是个图论题,其实是个LIS O(nlogn)求最长上升子序列的长度即可AC T3 第一次手贱,用链表存边,这是一个稠密图啊!!应该用邻接矩阵啊. 明明可以用floyed跑,非要dfs乱搞.结果10分.玩砸了吧. 最后只改到了40分. 网上的题解(没看懂): 首先这是一个神奇的图,叫做

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

CH Round #56 - 国庆节欢乐赛解题报告

最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树,其中一些树上结有能够产生能量的魔力水果.已知每个水果的位置(Xi,Yi)以及它能提供的能量Ci.然而,魔幻森林在某些时候会发生变化:(1) 有两行树交换了位置.(2) 有两列树交换了位置.当然,树上结有的水果也跟随着树一起移动.不过,只有当两行(列)包含的魔力水果数都大于0,或者两行(列)都没有魔

20161109模拟赛解题报告

2016-11-09试题解题报告 By shenben 本解题报告解析均为100分解题思路. T1 模拟即可. 我怕极限数据5000(n,m)*100000(k). 如果用二维数组.空间勉强撑住,时间上够呛. 因此用2个一位数组分别代表行和列. 这样每次修改是O(1)的. 查询是O(nm)(只查询一次) 总时间复杂度:O(nmk) T2 搜索 一开始想偏了. 倒着由“a”往前推.结果小样例过了,大样例差太多. 于是另辟蹊径. 观察到数据范围很小. 直接枚举答案序列不就好了. 对于每个序列再判断一

2014牡丹江网络赛解题报告

The 2014 ACM-ICPC Asia Mudanjiang Regional First Round 题目链接 A题解题报告 B题解题报告 C题解题报告 D题解题报告 E题解题报告 F题解题报告 G题(未完成) H题解题报告 I题解题报告 J题解题报告

欢乐赛解题报告

~~一场不欢乐的欢乐赛 时间分配::T1做的时候还可以,大约三十分钟写了个深搜(鬼知道我为啥不用广搜,大概是因为快半个月没写了)写完后去研究第二题,刚开始以为是贪心,很快写了出来,但是自己推了一会举出了反例.于是自己想了很多方法,但是都是基于贪心,写了一个多小时,写炸了,没办法又改成了贪心.第三题并不会,然后搜索大法过了一个点,(输出-1也是一个点) 整体感觉::还是太弱,T1是会的,但是还是没做对,大概是独立做题少的缘故吧,平常做题都没有思考太多时间.T2贪心T3暴力,貌似自己啥都不会.到现在

2014哈商大ICPC/ACM校赛解题报告

被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数据:点此下载 ============================================================== a:逆序数组+删除特定元素 题目: 小伙伴们好像非常多没接触过ICPC,那先来一道水题尝尝鲜,给出 一个数组,和一个特征值.将这个数组中特征值值删除后逆序输出.

2017.5.26暴力赛解题报告

预计分数:T1:40AC+60TLE T2:40AC+60TLE   T3:10AC+90TLE 总分=90 实际分数:T1:100AC+0TLE T2:80AC+20TLE   T3:20AC+80TLE 总分=200 感想:数据水的一逼!! 题目实际难度: T1:提高/提高+ T2:提高+ T3:提高+/省选- 我眼中的难度 T1:普及 T2:普及- T3:入门难度 2039. 树的统计 ★★   输入文件:counttree.in   输出文件:counttree.out   简单对比 时