Topcoder 639 Div2
来源:互联网 发布:软件领cf点 编辑:程序博客网 时间:2024/06/05 02:43
A
题意:喂养宠物,给你两个宠物的喂养的初始的时间,喂养的次数和喂养的时间间隔。判断喂养两个宠物是不是有冲突,即两个宠物的喂养的时间是一样的,如果有返回”Difficult“,否则返回“Easy”。
思路:暴力计算即可。
#include <bits/stdc++.h>using namespace std;class ElectronicPetEasy{ public: string isDifficult(int st1, int p1, int t1, int st2, int p2, int t2) { for(int i = 0; i < t1; i++) { for(int j = 0;j < t2; j++) { if((st1 + i * p1) == (st2 + j * p2)) { return "Difficult"; } } } return "Easy"; }};
B
题意:规定一种比赛的规则,在第i场比赛获胜的人将获得i分。现在给你两个人的得分,判断第一个人最少参加多少场比赛才能得到这些分数,如果输入不合法(即在n场比赛中不可能组成他们的这样的分数)输出-1。
思路:首先判断输如的两个分数是不是合法,即是不是存在一个n使的
#include <bits/stdc++.h>using namespace std;class AliceGameEasy{ public : long long GetMin(long long x,long long y) { long long sum = 2*(x+y); if(sum == 0) return 0; long long s = (long long) (sqrt(sum))-1; if(s*s+s == sum) return s; s++; if(s*s+s == sum) return s; return -1; } long long findMinimumValue(long long x, long long y) { long long s = GetMin(x,y); if(s == -1 ||s == 0) return s; long long ans = 0; for(long long i = s;i>=1;i--) { if(x >= i) { x -=i; ans++; } } return ans; }};
C
题意:给你一个01矩阵,现在要折叠这个矩阵,折叠满足:
- 平行于某条边折叠。
- 要沿相邻两列数字之间折叠
- 折叠后下方的数字与上方的数字相同。
问有多少的折叠的方法。
思路:显然我们可以将行和列进行分开计算。如果求出行的折叠的方案数ansR和列的方案数ansL,那么答案就是ans = ansL*ansR.
行和列的求法是一样的。由于矩阵最大为50*50,所有我们可以将每一行转化为一个数字。
首先进行预处理,设visR[i] = true表示从右开始折叠,能折叠到i,即
然后枚举左边界,visR[i] = true时,左界为i,然后处理的方式和visR一样,统计方案数。
#include <bits/stdc++.h>using namespace std;typedef long long LL;class BoardFoldingDiv2{ public : int n , m; LL R[55],C[55]; bool visL[55],visR[55]; int howMany(vector <string> paper) { n = paper.size(); m = paper[0].size(); memset(R,0,sizeof(R)); memset(C,0,sizeof(C)); for(int i = 0;i<n;i++) { for(int j = 0;j<m;j++) { R[i] = R[i] * 2 + paper[i][j] - '0'; C[j] = C[j] * 2 + paper[i][j] - '0'; } } memset(visR,false,sizeof(visR)); visR[n-1] = true; int ansR = 0; for(int i = n-2;i>=0;i--) { for(int j = 1; i + j < n && i - j + 1 >= 0; j++) { if(R[i+j] == R[i-j+1]) { if(visR[i+j]) { visR[i] = true; break; } } else break; } } for(int k = n-1;k>=0;k--) { if(!visR[k]) continue; memset(visL,false,sizeof(visL)); visL[0] = true; ansR ++; for(int i = 1;i<=k;i++) { for(int j = 1;i+j-1<=k&&i-j>=0;j++) { if(R[i+j-1] == R[i-j]) { if(visL[i-j]) { visL[i] = true; break; } } else break; } if(visL[i]) ansR ++; } } int ansL = 0; memset(visR,false,sizeof(visR)); visR[m-1] = true; for(int i = m-2;i>=0;i--) { for(int j = 1; i + j < m && i - j + 1 >= 0; j++) { if(C[i+j] == C[i-j+1]) { if(visR[i+j]) { visR[i] = true; break; } } else break; } } for(int k = m-1;k>=0;k--) { if(!visR[k]) continue; memset(visL,false,sizeof(visL)); visL[0] = true; ansL++; for(int i = 1;i<=k;i++) { for(int j = 1;i+j-1<=k&&i-j>=0;j++) { if(C[i+j-1] == C[i-j]) { if(visL[i-j]) { visL[i] = true; break; } } else break; } if(visL[i]) ansL ++; } } return ansR*ansL; }};
0 0
- Topcoder 639 Div2
- topcoder SRM 513 DIV2
- TopCoder SRM 543 DIV2
- topcoder 544 div2
- Topcoder SRM548 div2
- topcoder-srm-233-div2
- Topcoder SRM Div2 Level2
- topcoder-595-div2
- topcoder srm606 div2
- topcoder srm607 div2
- TopCoder SRM 144 div2
- TOPCODER SRM 612 DIV2
- TOPCODER SRM 613 DIV2
- TopCoder SAM 631 DIV2
- [Topcoder]SRM632 div2 题解
- TopCoder SAM 632 DIV2
- Topcoder SRM144 div2 1100
- Topcoder SRM646 DIV2 1000
- 在ObjectARX的类定义中使用__declspec(dllimport)的危险
- <meta http-equiv=“X-UA-Compatible” content=“IE=edge”>不添加元素,有什么不同
- 设置下拉列表框的javascript方式进行实现
- java面试题总结之JavaSE基础
- (转)软件测试 (二) 六年软件测试感悟
- Topcoder 639 Div2
- 最简单的window程序——API版本
- 关于android:windowAnimationStyle
- JPEG压缩原理与DCT离散余弦变换
- Drupal常用链接
- CSS-----CSS 样式代码插入的形式
- 本地如何搭建IPv6环境测试你的APP
- Java 注解Annotation使用解析
- PHP提示Notice: Undefined variable的解决办法