貌似今天ac出来了四道题:自己还得加把油:
1 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/A
传言中的按位dp,自己要好好想想;
2 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/B
对于栈的使用,貌似得添加一个队列,也可以直接使用出栈来解决;
3 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/C
要假想自己 会使用瞬间移动,每次贪心找出最优解,求得捕鱼的数量;
4 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/D
线性递推,矩阵乘法
5 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/E
已经ac了,要注意的是1 存在正数和负数这两种情况。2 负数要考虑到 他的幂必须是奇数时才有效。
6:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/F
貌似是 二分图的匹配算法 模版题:
7 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/G
已经ac了 poj1007 生理周期问题 可以用两种方法 1 暴力 2 中国剩余定理来解决 暴力是要注意值的选取(选大些)
8 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/H
maya 日期的转化问题 貌似没有什么好说的
9 http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/I
博弈问题 要注意的是 胜态是 (月+日)%2 和 11月30 和 9月30号 都是毕生态。
10:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/J
dfs + dp 还有一种情况是 采用 排序后 记录横纵坐标值
11:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/K
求 概率 类似高中概率题 存储直接可以用数组来存储
12:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/L
密码解密问题: 是一种密码加密的方法,要注意的是 数组列的变换;
13:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/M
利用pow()函数来进行求解 注意大数用double求 这道题一定要采用 c++的输出 这样才能得到正确的结果;
14:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/N
已经 ac 求最长上升子序列 自己利用的 log(n2)的算法 ,每个值开一个数组,记录他们的变化的值 递推公式: 对于第 m 项来讲。 min(m)=min(1,min(n))+1
15: http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/O
枚举所有的状态,找出满足情况的值,要进行的是每两个数的枚举;
16:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/P
usc week1 上的矩阵乘法题 自己当时就没a出来 再a一遍~~
下面贴上自己a出来的几道题的代码:
E:
#include<stdio.h> #include<math.h> int main() { long long int n,num,edge,flag=1,i,ji,result; while(scanf("%lld",&num)&&num!=0) { flag=1; if(num<0){flag=0;num=-num;} n=num; edge=(int)sqrt((float)(num))+1; result=0; if(flag==1){ for(i=2;i<=edge;i++) { ji=0; n=num; while(n%i==0) { n=n/i; ji++; } if(n==1) {if(result<ji)result=ji;} else {if(result<1)result=1; } } } else { for(i=2;i<=edge;i++) { ji=0; n=num; while(n%i==0) { n=n/i; ji++; } if(n==1&&ji%2==1){if(result<ji)result=ji;} else {if(result<1)result=1;} } } printf("%lld\n",result); } }
G;
#include<stdio.h>
int main()
{
int a,b,c,s,i,ji=0;
while(scanf("%d %d %d %d",&a,&b,&c,&s)&&a!=-1)
{
ji++;
for(i=50000;i>=1;i--)
{
if( ((i-a)%23==0) && ((i-b)%28==0) && ((i-c)%33==0) )break;
}
while(i-s>21252){
i-=21252;
}
if(i==s){ printf("Case %d: the next triple peak occurs in %d days.\n",ji,i);}
else printf("Case %d: the next triple peak occurs in %d days.\n",ji,i-s);
}
}
L:
#include<stdio.h> #include<string.h> char a[12],b[120],c[120]={"THEEND"},d[12][12],min,e[12][12],flag; int len,length,i,j,ji,max,num,k; int main() { while(gets(a)) { ji=0; if(strcmp(a,c)==0)break; else {gets(b); memset(d,'\0',sizeof(d));memset(e,'\0',sizeof(e));} len=strlen(a); length=strlen(b); if(length%len==0)max=length/len; else max=length/len+1; for(j=1;j<=len;j++) { for(i=1;i<=max;i++) { d[i][j]=b[ji]; ji++; if(b[ji]=='\0')break; } } flag=1; for(i=0;i<len;i++) { min='Z'; for(j=len-1;j>=0;j--) { if(a[j]!='*'&&min>=a[j]){num=j;min=a[j];} } a[num]='*'; for(k=1;k<=max;k++) { e[k][num+1]=d[k][flag]; } flag++; } for(i=1;i<=max;i++) for(j=1;j<=len;j++) if(e[i][j]!='\0')printf("%c",e[i][j]); printf("\n"); } }
M:
#include<iostream> #include<math.h> using namespace std; int main() { double a,b,result; while(cin>>a>>b) { result=pow(b,1/a); cout<<result<<endl; } }
N:
#include<stdio.h> int main() { int a[1010],b[1010],max,result,n,i,j,flag=0; while(scanf("%d",&n)!=EOF) { if(n==0){printf("0\n");continue;} b[1]=1; for(i=1;i<=n;i++) scanf("%d",&a[i]); max=1; for(i=2;i<=n;i++) { result=0;flag=0; for(j=1;j<i;j++) { if(a[i]>a[j]){ flag=1;if(result<b[j]){result=b[j];}} } if(flag==1) b[i]=result+1; else b[i]=1; if(max<b[i])max=b[i]; } printf("%d\n",max); } }