第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小时内删除侵权内容。
暂时没有评论,来抢沙发吧~