組隊賽130827 - from lanshui_Yang

A. Hailstone HOTPO

這是一道水題,直接寫就ok,直接上代碼:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
const int MAXN = 2005 ;
int n ;
int main()
{
    int T ;
    scanf("%d" , &T) ;
    while (T --)
    {
        int t , n ;
        scanf("%d%d" , &t , &n) ;
        int MAX = n ;
        int tmp = n ;
        while (tmp != 1)
        {
            if(tmp % 2 == 0)
            {
                tmp /= 2 ;
            }
            else
            {
                tmp = tmp * 3 + 1 ;
                if(tmp > MAX)
                MAX = tmp ;
            }
        }
        printf("%d %d\n" , t , MAX) ;
    }
    return 0 ;
}


C. Pen Counts
    題目大意:直接抽象一下,給你一個長度爲n的繩子,讓你圍成一個三角形,要求:
    1、三角形的邊長必須爲整數
    2、能夠由另一三角形A 旋轉得到 三角形B , 則三角形A、B算作一個三角形
    解題思路:直接枚舉,思考後易得出:考慮由同樣的三條邊長 a,b,c 能圍成幾個不同的三角形:
    1、當a,b,c組成的三角形是等腰三角形或者等邊三角形,那麼只能圍成 1 個不同的三角形。
    2、當a != b 且 b != c 且 a != c 時 ,即圍成的是一般三角形時,那麼能圍成 2 個不同的三角形。
代碼如下:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
void init()
{
    int t ;
    scanf("%d" , &t) ;
    int n ;
    scanf("%d" , &n) ;
    int ans = 0 ;
    int i ;
    int tmp1 , tmp2 , tmp3 ;
    for(i = 1 ; i <= n ; i ++)
    {
        tmp1 = (n - i) / 2 ;
        tmp2 = n - i - tmp1 ;
        while (tmp1 >= i)
        {
            if(i + tmp1 > tmp2)
            {
                if(i != tmp1 && tmp1 != tmp2 && i != tmp2)
                ans += 2 ;
                else
                ans ++ ;
                tmp1 -- ;
                tmp2 ++ ;
            }
            else
            break ;
        }
    }
    printf("%d %d\n" , t , ans) ;
}
int main()
{
    int T ;
    scanf("%d" , &T) ;
    while (T --)
    {
        init() ;
    }
    return 0 ;
}





J. Mystery

        題目大意:此題是一道找規律題,給你一個字符串s,然後給你 n 個數a1 , a2 , …… , an ,讓你輸出一個字符串。
        解題思路:先求出字符串s的長度len , 定義一個變量tmp = 0 ,讀到數a1 時 , tmp = tmp + a1 ,此時若tmp > 0,則要輸出的第一個字符即爲s[ tmp % len ] ; 若 tmp < 0 ,則進行tmp = tmp + len 直到tmp >= 0 爲止 ,輸出s[ tmp ] ;接下來讀到數a2 , 則tmp = tmp + a2 ,輸出字符的方法同上。
        請看代碼:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std ;
const int MAXN = 2005 ;
char s[MAXN] ;
int main()
{
    int n ;
    scanf("%d" , &n) ;
    while (n --)
    {
        int t ;
        scanf("%d" , &t) ;
        getchar() ;
        gets(s) ;
        int len = strlen(s) ;
        int m ;
        scanf("%d" , &m) ;
        printf("%d ", t) ;
        int tmp = 0 ;
        int i ;
        for(i = 0 ; i < m ; i ++)
        {
            int tn ;
            scanf("%d" , &tn) ;
            tmp += tn ;
            if(tmp < 0)
            {
                int k = tmp ;
                while (k < 0)
                {
                    k += len ;
                }
                printf("%c" , s[k]) ;
            }
            else
            {
                printf("%c" , s[tmp % len]) ;
            }
        }
        puts("") ;
    }
    return 0 ;
}

  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章