Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台

暑假集训之思维训练 总结 加自己a题

貌似今天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

 要假想自己 会使用瞬间移动,每次贪心找出最优解,求得捕鱼的数量;

http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/D

线性递推,矩阵乘法

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

貌似是 二分图的匹配算法 模版题:

http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/G

已经ac了  poj1007 生理周期问题 可以用两种方法 1 暴力 2 中国剩余定理来解决 暴力是要注意值的选取(选大些)

http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=242#problem/H

maya 日期的转化问题 貌似没有什么好说的

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);
  }     
}
posted @ 2012-07-10 22:59  大嘴鸟  阅读(211)  评论(0编辑  收藏  举报
Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台