• 洛谷刷题C语言:Fergusonball Ratings、Don‘t Mozheng. /oh、gcd.、幻想乡扑克游戏、PMTD


    记录洛谷刷题C语言qaq


    [CCC2022 J2] Fergusonball Ratings

    题目描述

    现在有一个球队需要你评价。

    球队中的第 i i i 个人进了 a i a_i ai 个球,犯规了 b i b_i bi 次。

    所以第 i i i 个人的分数就是 5 × a i − 3 × b i 5\times a_i-3\times b_i 5×ai3×bi

    如果第 i i i 个人的分数大于 40 40 40 ,那么这个人就是一个黄金球员。

    相对应的,如果这个球队的所有人都是黄金球员,那么这个球队就是一个黄金球队。

    输入格式

    第一行一个整数 n n n ,表示球队的人数。

    接下来 2 n 2n 2n 行,第 2 i − 1 2 i - 1 2i1 行表示 a i a_i ai,第 2 i 2 i 2i 行表示 b i b_i bi

    输出格式

    共一行,表示黄金球员的数量。如果这是一个黄金球队,请再输出一个 +

    样例 #1

    样例输入 #1

    3
    12
    4
    10
    3
    9
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例输出 #1

    3+
    
    • 1

    样例 #2

    样例输入 #2

    2
    8
    0
    12
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    样例输出 #2

    1
    
    • 1

    提示

    对于全部数据: 1 ≤ n ≤ 20 , 1 ≤ a i , b i ≤ 2000 1\le n\le 20,1\le a_i,b_i\le2000 1n20,1ai,bi2000

    代码如下

    C语言

    #include
    #include
    #include
    #include 
    
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	
    	
    	int sum = 0;
    	for(int i = 0;i < n;i++)
    	{
    		int a,b;
    		scanf("%d",&a);
    		scanf("%d",&b);
    
    		int num = a*5 - b*3;
    		if(num > 40)
    		{
    			sum++;
    		}	
    	} 
    	printf("%d",sum);
    	if(sum == n)
    		printf("+\n");
    	return 0;	
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    C++

    #include 
    using namespace std;
    
    int main() {
    	int n;
    	cin >> n;
    	int sum = 0;
    	for (int i = 0; i < n; i++)
    	{
    		int a, b;
    		cin >>  a >> b;
    		int num = a * 5 - b * 3;
    		if (num > 40)
    			sum++;
    	}
    	cout << sum;
    	if (sum == n)
    		cout << "+";
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    「SvR-1」Don’t Mozheng. /oh

    题目背景

    Problem Number: 58 \textit{58} 58

    在 Guluo Academic 群中,大家正在魔怔。

    洛谷博客上的《魔怔导论》:https://www.luogu.com.cn/blog/supervise/how-to-get-a-mz

    需要《魔怔导论》(目前更新至 v1.1.1 版本)的 PDF 请于下方「题目附件」处下载。

    题目描述

    你得到了 n n n 条信息,这些信息共有三种类型(注意 < str > \texttt<\textit{str}\texttt> <str> 描述一个名为 s t r str str 的字符串,该字符串不含空格、字符 : \texttt: : / \texttt/ /,不含两边的尖角括号):

    1. 形如 < str >: \texttt<\textit{str}\texttt{>:} <str>:。意为接下来一行的一条信息是名为 s t r str str 的用户发的。
    2. 形如 /< s t r > \texttt{/<}str\texttt> /<str>。意为一条名称为 s t r str str表情信息
    3. 形如 < str > \texttt<\textit{str}\texttt> <str>。意为一条内容为 s t r str str 的文字信息。

    你经过长期观察,发现名称为 oh \texttt{oh} oh hsh \texttt{hsh} hsh表情信息具有魔怔的意味。

    并且在一段对话中:

    • 一个 oh \texttt{oh} oh 表情会增加 a a a 的魔怔值。
    • 一个 hsh \texttt{hsh} hsh 表情会增加 b b b 的魔怔值。
    • 其他的任何信息都不会影响魔怔值,魔怔值初始为 0 0 0

    现在你需要对于这些信息,计算出总的魔怔值。

    输入格式

    第一行三个整数 n , a , b n,a,b n,a,b,表示共有 n n n 条信息, a , b a,b a,b 意义如题述。

    接下来 2 × n 2\times n 2×n 行,描述每条信息:

    • 第一行是第 1 类信息。
    • 第二行是第 2 类第 3 类信息。

    输出格式

    仅一行一个整数,即总的魔怔值。

    样例 #1

    样例输入 #1

    7 1 2020
    wop:
    /yueliang
    eoq:
    wop_loushang
    wop:
    eoq_npy_when
    eoq:
    /oh
    dek:
    /oh
    rif:
    NOI2022_rp_++
    rif:
    /hsh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    样例输出 #1

    2022
    
    • 1

    提示

    样例 1 说明

    如图所示。

    数据规模与约定

    本题采用捆绑测试。

    l l l 表示输入中单行信息的最大长度。

    Subtask n ≤ 特殊性质 分值 1 ≤ 10 − 20 2 ≤ 100 − 20 3 无特殊限制 A 20 4 无特殊限制 − 40 \newcommand{\arraystretch}{1.5}

    Subtask\bmn特殊性质分值110202100203无特殊限制A204无特殊限制40" role="presentation">Subtask\bmn特殊性质分值110202100203无特殊限制A204无特殊限制40
    Subtask1234n10100无特殊限制无特殊限制特殊性质A分值20202040

    • 特殊性质 A \text{A} A:输入不含有第 3 类信息。

    对于 100 % 100\% 100% 的数据,有 1 ≤ n ≤ 1 0 4 1\le n\le 10^4 1n104 1 ≤ l ≤ 50 1\le l\le 50 1l50 1 ≤ a , b ≤ 1 0 3 1\le a,b\le 10^3 1a,b103

    代码如下

    C语言

    #include
    #include
    #include
    #include 
    
    int n,a,b,ans;//定义变量
    int main(){
        scanf("%d%d%d",&n,&a,&b) ;
       	char str1[1001],str2[1001];//定义字符串
        for(int i=1;i<=n;i++){
            scanf("%s%s",&str1,&str2);
            int qwq=strlen(str2);//判断长度
            if(str2[0]=='/'){//判断第一个字符
                if(qwq==3&&str2[1]=='o'&&str2[2]=='h') //判断是否为"/oh"
                ans=ans+a;//答案加a
                if(qwq==4&&str2[1]=='h'&&str2[2]=='s'&&str2[3]=='h') //判断是否为“/hsh"            
                ans=ans+b;//答案加b
                else continue;//否则继续循环
            }
        }
        printf("%d\n",ans);
        return 0;//结束程序
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    C++

    #include
    using namespace std;
    int n,a,b,ans;//定义变量
    int main(){
        cin>>n>>a>>b;//输入
        string str1,str2;//定义字符串
        for(int i=1;i<=n;i++){
            cin>>str1>>str2;//输入
            int qwq=str2.length();//判断长度
            if(str2[0]=='/'){//判断第一个字符
                if(qwq==3&&str2[1]=='o'&&str2[2]=='h') //判断是否为"/oh"
                ans=ans+a;//答案加a
                if(qwq==4&&str2[1]=='h'&&str2[2]=='s'&&str2[3]=='h') //判断是否为“/hsh"            
                ans=ans+b;//答案加b
                else continue;//否则继续循环
            }
        }
        cout<<ans<<endl;//输出
        return 0;//结束程序
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    gcd.

    题目背景

    与你借星火,容我题山河。

    题目描述

    T T T 组数据,每一组数据给定 l , r , x l,r,x l,r,x,试求: gcd ⁡ ( ⌊ l x ⌋ , ⌊ l + 1 x ⌋ , ⋯   , ⌊ r x ⌋ ) \gcd(\lfloor \frac{l}{x}\rfloor,\lfloor \frac{l+1}{x}\rfloor,\cdots,\lfloor \frac{r}{x}\rfloor) gcd(⌊xl,xl+1,,xr⌋) 的值。

    • 其中 gcd ⁡ \gcd gcd 表示求最大公约数,例如 gcd ⁡ ( 6 , 9 ) = 3 \gcd(6,9)=3 gcd(6,9)=3 gcd ⁡ ( 2 , 4 , 8 ) = 2 \gcd(2,4,8)=2 gcd(2,4,8)=2 gcd ⁡ ( 5 , 6 , 7 ) = 1 \gcd(5,6,7)=1 gcd(5,6,7)=1。特别地,我们定义一个正整数的最大公约数是它自身。
    • ⌊ x ⌋ \lfloor x \rfloor x 表示 x x x 向下取整,例如 ⌊ 3.14 ⌋ = 3 \lfloor 3.14 \rfloor=3 3.14=3

    输入格式

    第一行输入一个正整数 T T T,表示数据组数。

    对于每一组数据,输入一行三个正整数 l , r , x l,r,x l,r,x,以空格隔开。

    输出格式

    对于每一组数据,输出一行,一个正整数表示答案。

    样例 #1

    样例输入 #1

    4
    3 6 1
    8 11 4
    4 4 3
    7 16 2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    样例输出 #1

    1
    2
    1
    1
    
    • 1
    • 2
    • 3
    • 4

    提示

    【样例解释和说明】

    样例中的 T = 4 T=4 T=4,说明有 4 4 4 组数据。

    • 对于第一组数据, l = 3 , r = 6 , x = 1 l=3,r=6,x=1 l=3,r=6,x=1,即求 gcd ⁡ ( ⌊ 3 1 ⌋ , ⌊ 4 1 ⌋ , ⌊ 5 1 ⌋ , ⌊ 6 1 ⌋ ) = 1 \gcd(\lfloor \frac{3}{1}\rfloor,\lfloor \frac{4}{1} \rfloor, \lfloor \frac{5}{1}\rfloor,\lfloor \frac{6}{1}\rfloor)=1 gcd(⌊13,14,15,16⌋)=1
    • 对于第二组数据, l = 8 , r = 11 , x = 4 l=8,r=11,x=4 l=8,r=11,x=4,即求 gcd ⁡ ( ⌊ 8 4 ⌋ , ⌊ 9 4 ⌋ , ⌊ 10 4 ⌋ , ⌊ 11 4 ⌋ ) = gcd ⁡ ( 2 , 2 , 2 , 2 ) = 2 \gcd(\lfloor \frac{8}{4} \rfloor,\lfloor \frac{9}{4} \rfloor,\lfloor \frac{10}{4}\rfloor,\lfloor \frac{11}{4}\rfloor)=\gcd(2,2,2,2)=2 gcd(⌊48,49,410,411⌋)=gcd(2,2,2,2)=2
    • 对于第三组数据, l = 4 , r = 4 , x = 3 l=4,r=4,x=3 l=4,r=4,x=3,即求 gcd ⁡ ( ⌊ 4 3 ⌋ ) = 1 \gcd(\lfloor \frac{4}{3}\rfloor)=1 gcd(⌊34⌋)=1
    • 对于第四组数据,类似可得结果是 1 1 1

    【数据范围】

    • 对于 10 % 10\% 10% 的数据, x = 1 x=1 x=1
    • 另有 10 % 10\% 10% 的数据, l = r l=r l=r
    • 另有 20 % 20\% 20% 的数据, r − l ≤ 1 0 5 r-l \leq 10^5 rl105
    • 对于上述的前 40 % 40\% 40% 的数据, 1 ≤ x ≤ l ≤ r ≤ 1 0 9 1 \leq x \leq l \leq r \leq 10^9 1xlr109
    • 对于所有数据, 1 ≤ x ≤ l ≤ r ≤ 1 0 18 1 \leq x \leq l \leq r \leq 10^{18} 1xlr1018 1 ≤ T ≤ 10 1 \leq T \leq 10 1T10

    代码如下

    C语言

    #include
    #include
    #include
    #include 
    int main()
    {
    	int T;
    	scanf("%d", &T);
    	while (T--)
    	{
    		long long l, r, x; //本题唯一坑点,要记得开 long long。
    		scanf("%lld%lld%lld", &l, &r, &x);
    		if (l / x != r / x) puts("1");
    		else printf("%lld\n", l / x);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    C++

    #include 
    #include 
    using namespace std;
    
    int main()
    {
    	int T;
    	cin >> T;
    	while (T--)
    	{
    		long long l, r, x; //本题唯一坑点,要记得开 long long。
    		cin >> l >> r >> x;
    		if (l / x != r / x) puts("1");
    		else printf("%lld\n", l / x);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    [Aya Round 1 A] 幻想乡扑克游戏

    题目背景

    Problem Number: 22 \textit{22} 22

    在能力卡牌异变之后,幻想乡的少女们将多余的卡牌收集起来,仿照外界人的「斗地主」这一游戏,进行了愉快的玩耍。

    题目描述

    斗地主是一种使用 A \tt A A K \tt K K 加上大小王的共 54 54 54 张扑克牌来进行的游戏,其中大小王各一张,其它数码牌各四张。在斗地主中,牌的大小关系根据牌的数码表示如下:

    3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A < 2 < 小王 wxy < 大王 \tt 3<4<5<6<7<8<9<103<4<5<6<7<8<9<10<J<Q<K<A<2<小王wxy<大王

    且牌的大小关系和花色无关。

    游戏开始时,将会给 3 3 3 名玩家各自发放 17 17 17 张牌作为手牌,余下三张作为底牌。玩家会将牌从大到小排序理好,然后根据自己牌型的好坏程度来选择是否叫地主。

    你认为,如果自己的手牌中存在王炸(即大小王各一张)或者至少一个炸弹(即四张数码相同的牌),则你会选择叫地主。

    请实现一个程序来判断你是否应该叫地主。

    输入格式

    本题包含多组数据。

    • 第一行输入一个整数 T T T,表示数据组数。
    • 接下来 T T T 行,每行输入一个长度为 17 17 17 的字符串,表示你的手牌。保证牌已经预先理好。在输入中使用 T \tt T T 代表点数为 10 \tt 10 10 的牌,使用 X \tt X X 代表小王,使用 D \tt D D 代表大王。

    输出格式

    • 输出共 T T T 行。
    • 对于每组数据,输出一行一个字符串:
      • yes 代表你应该叫地主。
      • no 代表你不应该叫地主。
    • 你可以输出字符串的任意大小写形式。例如:字符串 yesYesYES 均会被视为表示应该叫地主。

    样例 #1

    样例输入 #1

    3
    X2AAKKKKQT9765433
    DX22AKKQJTT884443
    X2AAAKQQJT8554433
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #1

    Yes
    Yes
    No
    
    • 1
    • 2
    • 3

    提示

    样例解释

    对于数据 1 1 1,输入数据相当于下面的手牌(忽略花色):

    该手牌中存在炸弹:

    故你选择叫地主。

    对于数据 2 2 2,输入数据相当于下面的手牌(忽略花色):

    该手牌中存在王炸:

    故你选择叫地主。

    对于数据 3 3 3,输入数据相当于下面的手牌(忽略花色):

    该手牌中不存在王炸和炸弹。故你选择不叫地主。

    数据范围与约定

    对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 4 1 \le T \le 10^4 1T104保证牌已经预先理好

    代码如下

    C语言

    #include
    #include
    #include
    #include 
    
    int main()
    {
        int T, b[128];
        scanf("%d",&T);
        while (T--)
        {
            memset(b, 0, sizeof(b));//多测清空
            int flag = 0;
            char s[1001];
            scanf("%s",&s);
            for (int i = 0; i < strlen(s); i++)//将牌放入桶中
                b[s[i]]++;
            if (b['X'] > 0 && b['D'] > 0)//判断是否存在大小王
                flag = 1;
            for (int i = 1; i <= 127 && !flag; i++)//判断是否存在炸弹
            {
                if (b[i] >= 4)
                    flag = 1;
            }
            puts(flag ? "Yes" : "No");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    C++

    #include 
    #include 
    #include 
    using namespace std;
    int main()
    {
        int T, b[128];
        cin >> T;
        while (T--)
        {
            memset(b, 0, sizeof(b));//多测清空
            bool flag = false;
            string s;
            cin >> s;
            for (int i = 0; i < s.length(); i++)//将牌放入桶中
                b[s[i]]++;
            if (b['X'] > 0 && b['D'] > 0)//判断是否存在大小王
                flag = true;
            for (int i = 1; i <= 127 && !flag; i++)//判断是否存在炸弹
            {
                if (b[i] >= 4)
                    flag = true;
            }
            puts(flag ? "Yes" : "No");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    「HGOI-1」PMTD

    题目背景

    uuku \text{uuku} uuku 在学习四则运算

    题目描述

    为了验证 uuku \text{uuku} uuku 学习成果, bh1234666 \text{bh1234666} bh1234666 给出一个长为 n n n 整数序列 a i a_i ai。并让 uuku \text{uuku} uuku 给这个序列进行 m m m 次操作。

    每次操作可以任意选择序列中一个数 a i a_i ai,令 a i a_i ai 变成 a i + 2 a_i+2 ai+2 a i − 2 a_i-2 ai2 a i × 2 a_i\times 2 ai×2 ⌊ a i 2 ⌋ \lfloor\frac{a_i}{2}\rfloor 2ai 这四个结果中的一个。

    bh1234666 \text{bh1234666} bh1234666 希望 m m m 次操作后,整个序列的极差(最大值减最小值)最大。

    显然 uuku \text{uuku} uuku 没有认真学习,所以他希望你来帮他回答这个问题。

    输入格式

    第一行两个整数 n n n m m m

    第二行 n n n 个整数,表示序列 a i a_i ai

    输出格式

    共一行一个整数,表示最大的极差。

    样例 #1

    样例输入 #1

    3 2
    0 1 0
    
    • 1
    • 2

    样例输出 #1

    6
    
    • 1

    提示

    样例解释

    第一步操作:将 1 1 1 加上 2 2 2 得到 3 3 3

    第二步操作:将 3 3 3 乘以 2 2 2 得到 6 6 6

    极差为 6 − 0 = 6 6-0=6 60=6

    数据范围

    本题采用捆绑测试,共有 2 2 2 subtask \text{subtask} subtask,最终分数为所有 subtask \text{subtask} subtask 分数之和。

    KaTeX parse error: \hline valid only within array environment

    对于 100 % 100\% 100% 的数据, 2 ≤ n ≤ 1 0 6 2 \le n \le 10^6 2n106 1 ≤ m ≤ 10 1 \le m \le 10 1m10 0 ≤ a i ≤ 1 0 9 0 \le a_i \le 10^9 0ai109

    代码如下

    C语言

    #include
    #include
    #include
    #include 
    
    
    int n,val,mx,mn=1e9,m;
    int main()
    {
    	scanf("%d%d",&n,&m);
    	while(n--)
    	{
    		scanf("%d",&val);
    		if(val>mx)mx=val;
    		if(val<mn)mn=val;
    	}
    	if(mx<2)mx+=2,m--;
    	printf("%lld",((1ll*mx)<<m)-mn);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    C++

    #include
    #include
    using namespace std;
    int n, val, mx, mn = 1e9, m;
    int main()
    {
    	cin >> n >> m;
    	while (n--)
    	{
    		cin >> val;
    		if (val > mx)mx = val;
    		if (val < mn)mn = val;
    	}
    	if (mx < 2)mx += 2, m--;
    	printf("%lld", ((1ll * mx) << m) - mn);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    IVI车载信息娱乐系统的网络安全注意事项
    Docker部署Tomcat及Web应用
    for-in与不可枚举
    R语言使用nnet包的multinom函数构建无序多分类logistic回归模型、使用AIC函数比较两个模型的AIC值的差异(简单模型和复杂模型)
    关于产研项目管理的一些思考与记录
    310页(11万字)2021年数字医院信息化综合解决方案
    Java设计模式:fly weight 享元模式
    修完这个 Bug 后,MySQL 性能提升了 300%
    CI/CD工具中的CI和CD的含义
    《国资报告》专访高煜光 | 国企数字化转型如何拥抱超自动化?
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126773192