第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛(部分)

网友投稿 237 2022-11-24

第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛(部分)

A 跳台阶 有一个n级台阶的楼梯,小明一次可以向上跳1步,两步,甚至是n步,请问小明跳到n级台阶有多少种跳法? 分析:第一眼想到1 2 和2 1 算两种还是一种,算2种,然后就暴搜了一下,找出规律 2^(n-1) 另一种分析思路: 因为每一步只能往前跳,而且可以任意跳,所以,可以由第 0,1,..n-1 级跳到第 n 级台阶很容易就可以推出第 n 级台阶的方案数,就是前 0~n-1 级台阶方案数的总和。第 0 级是 1,第 1 级也是 1,第 2 级是 2,第 3 级是 4,。。。因此第 n(n>0)级台阶就是 2 的(n-1)次方。 /** D:psd面试 题意:给一个字符串,求去掉最长回文子序列得到的串的长度。 思路: 题目所说的 是最长回文子序列,也就是改回文串是可以不连续的。 将所给的字符串反转,变成求两个字符串的LCS(最长公共子序列)问题。 dp[i][j] = dp[i-1][j-1]+1,两字符相等时 dp[i][j] = max(dp[i-1][j],dp[i][j-1]),不等时 (1<=i,j<=sz) **/ #include using namespace std; const int N=1234+5; int dp[N][N]; int main() { string str; while(cin>>str) { int sz=str.size(); for(int i=0; i='A'&&str[i]<='Z') str[i]+=32; } string t=str; dp[0][0]=0; reverse(t.begin(),t.end()); for(int i=1; i<=sz; i++) { for(int j=1; j<=sz; j++) { if(str[i-1]==t[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } cout< using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define memc(a,b) memcpy(a,b,sizeof(b)) #define rep(i,a,n) for(int i=a;i=0; j--) { for(int i=0; i=0; i--) { for(int j=m-1; j>=0; j--) putchar(str[i][j]); puts(""); } } if(cnt==3) { printf("%d %d\n",m,n); for(int j=0; j=0; i--) { putchar(change(str[i][j])); } puts(""); } } puts(""); } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); rep(i,0,n) { scanf("%s",str[i]); } scanf("%s",op); cnt=0; int len=strlen(op); rep(i,0,len) { if(op[i]=='L') cnt++; else cnt--; if(cnt<0) cnt+=4; cnt%=4; } //printf("cnt=%d\n",cnt); solve(); } return 0; } J 强迫症的序列 小A是一个中度强迫症患者,每次做数组有关的题目都异常难受,他十分希望数组的每一个元素都一样大,这样子看起来才是最棒的,所以他决定通过一些操作把这个变成一个看起来不难受的数组,但他又想不要和之前的那个数组偏差那么大,所以他每次操作只给这个数组的其中n-1个元素加1,但是小A并不能很好的算出最优的解决方案,如果你能帮他解决这个问题,小A就能送你一个气球 分析:枚举了几种情况猜到了解法,没敲, 没转换思路 题目是给数列中的n-1个数+1,也相当于让最小值不动,其他值都-1一直减到与最小值相等。这是最优方案。 const int N=1e5+5; int a[N]; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); rep(i,0,n) scanf("%d",&a[i]); sort(a,a+n); int ans=0; for(int i=1;i #include using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define memc(a,b) memcpy(a,b,sizeof(b)) #define rep(i,a,n) for(int i=a;ivec[N]; string str; int main() { int T,n; cin>>T; while(T--) { cin>>n>>str; rep(i,0,n) vec[i].clear(); int sz=str.size(); if(n==1||n==sz) { cout< using namespace std; string str; int main() { int T,n; cin>>T; while(T--) { cin>>n>>str; int sz=str.size(); if(n==1||sz==n) { cout< #include using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) #define memc(a,b) memcpy(a,b,sizeof(b)) #define rep(i,a,n) for(int i=a;i>=1; a=a*a%mod; } return ans; } int main() { int T; cin>>T; while(T--) { ll x,y,a,b; cin>>x>>a>>y>>b; bool flag=0; for(int i=0;i<100;i++) { ll mod=rand()+1; ll tmp1=pow_mod(x,a,mod); ll tmp2=pow_mod(y,b,mod); if(tmp1!=tmp2) { flag=1; break; } } if(flag) cout<<"No"<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:电口模块介绍
下一篇:深入理解Java8新特性之Lambda表达式的基本语法和自定义函数式接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~