程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Codeforces Round #295 (Div. 2) A+B+C

Codeforces Round #295 (Div. 2) A+B+C

編輯:C++入門知識

Codeforces Round #295 (Div. 2) A+B+C


A題:找出字符串中是否出現了26個英文字母,不區分大小寫

#include 
#include 
#include 
using namespace std ;
char str[200] ;
int a[30] , b[30] ;
int main()
{
    int n , i ;
    scanf("%d", &n) ;
    scanf("%s", str) ;
    memset(a,0,sizeof(a)) ;
    memset(b,0,sizeof(b)) ;
    for(i = 0 ; i < n ; i++)
    {
        if( str[i] >= 'a' && str[i] <= 'z' )
            a[ str[i]-'a' ] = 1 ;
        if( str[i] >= 'A' && str[i] <= 'Z' )
            b[ str[i]-'A' ] = 1 ;
    }
    for(i = 0 ; i < 26 ; i++)
        if( a[i] == 0 && b[i] == 0 )
            break ;
    if( i < 26 )
        printf("NO\n") ;
    else
        printf("YES\n") ;
    return 0 ;
}


B題:給出兩種操作方式,一種是乘2,一種是減一,給出初始數n,問可以可以達到m,可以輸出步數,否則輸出任意一個數。

進行廣搜,看是否可以找到那個數。

#include 
#include 
#include 
#include 
using namespace std ;
struct node{
    int a , t ;
}p , q ;
queue  que ;
int a[30000] ;
int main()
{
    int n , m , num , flag ;
    while( scanf("%d %d", &n, &m) != EOF )
    {
        memset(a,0,sizeof(a)) ;
        flag = 0 ;
        num = 0 ;
        p.a = n ;
        p.t = 0 ;
        while( !que.empty() )
            que.pop() ;
        que.push(p) ;
        while( !que.empty() )
        {
            p = que.front() ;
            que.pop() ;
            if( p.a == m )
            {
                flag = 1 ;
                break ;
            }
            q = p ;
            q.a-- ;
            q.t++ ;
            if( q.a >= 0 && a[ q.a ] == 0 )
            {
                a[ q.a ] = 1 ;
                que.push(q) ;
            }
            q = p ;
            q.a *= 2 ;
            q.t++ ;
            if( q.a >= 0 && q.a <= 20000 && a[ q.a ] == 0 )
            {
                a[ q.a ] = 1 ;
                que.push(q) ;
            }
        }
        if( flag == 1 )
            printf("%d\n", p.t) ;
        else
            printf("0") ;
    }
    return 0 ;
}


C題:數學題,按照公式的話,兩個串從任意一個位置開始匹配都會統計到,那麼找出給定字符串的出現次數最多的字符有幾個,結果也就是它的n次方。

#include 
#include 
#include 
using namespace std ;
#define MOD (int)(1e9+7)
#define LL __int64
char str[200000] ;
int num[10] ;
LL pow(LL a,LL b)
{
    if( b == 1 )
        return a ;
    LL c = pow(a,b/2) ;
    c = c*c % MOD ;
    if( b % 2 )
        c = c * a % MOD ;
    return c;
}
int main()
{
    int i , n ;
    memset(num,0,sizeof(num)) ;
    scanf("%d", &n) ;
    scanf("%s", str) ;
    for(i = 0 ; i < n ; i++)
    {
        if( str[i] == 'A' )
            num[0]++ ;
        if( str[i] == 'C' )
            num[1]++ ;
        if( str[i] == 'G' )
            num[2]++ ;
        if( str[i] == 'T' )
            num[3]++ ;
    }
    int max1 = 0 , k = 0 ;
    for(i = 0 ; i < 4 ; i++)
        max1 = max( max1,num[i] ) ;
    for(i = 0 ; i < 4 ; i++)
        if( num[i] == max1 )
            k++ ;
    printf("%I64d\n", pow(k,n) ) ;
    return 0 ;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved