栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

洛谷刷题C语言:询问、光图、苏联人、Another Cow Number Game G、STROJOPIS

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

洛谷刷题C语言:询问、光图、苏联人、Another Cow Number Game G、STROJOPIS

记录洛谷刷题QAQ


一、询问 题目背景

zbw 被邀请至幼儿园给小朋友们出题。

题目描述

现在 zbw 有 n n n 个物品,编号从 1 ∼ n 1 sim n 1∼n,他会告诉你 m m m 个条件,每个条件包含两个数 x , y x,y x,y,表示第 x x x 个物品和第 y y y 个物品是相同的。

因为 zbw 特别赶时间,所以他保证每次给出的条件都是有用的,也就是说,每次给出的条件无法由之前的条件推导得来。

你需要回答有多少种不同的物品。

输入格式

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

之后 m m m 行,每行两个数 x , y x,y x,y,表示第 x x x 个物品和第 y y y 个物品是相同的。

输出格式

一个整数,不同物品的数量。

样例 #1 样例输入 #1
11 8 
1 2
4 3
5 4
1 3
5 6
7 10
5 10
8 9
样例输出 #1
3
提示

对于 20 % 20% 20% 的数据, n , m ≤ 10 n,m le 10 n,m≤10。

对于 40 % 40% 40% 的数据, n , m ≤ 1 0 3 n,m le 10^3 n,m≤103。

对于 60 % 60% 60% 的数据, n , m ≤ 1 0 5 n,m le 10^5 n,m≤105。

对于 80 % 80% 80% 的数据, m ≤ 1 0 6 m le 10^6 m≤106。

对于 100 % 100% 100% 的数据, 1 ≤ n ≤ 1 0 18 1 le n le 10^{18} 1≤n≤1018, 1 ≤ m ≤ 1 0 7 1 le m le 10^7 1≤m≤107。

代码如下:
#include
#include
#include
#include 

int main()
{
	long long n, m;
	scanf("%lld%lld",&n,&m);
	
	printf("%lldn",n - m);
} 
二、[Cnoi2020]光图 题目背景

简洁中蕴含着伟大。

Cirno 不经意地把一个内部完全反射的圆分成了 12 12 12 等分,等分点分别记作 A 0 A_0 A0​, A 1 A_1 A1​, A 2 A_2 A2​, ⋯ cdots ⋯ , A 11 A_{11} A11​。

随后,她不经意地将一束光从一点发出,朝向另一点,重复,反射,迭代,便得到了一幅美妙的光图。

这一切都发生在不经意之间。

她不经意地发现了这一幕,并且不经意地记下了这个不经意的结论,又在某一刻不经意地回忆起。

幻想乡的每一天一切都是这么不以为意,多好的一天啊!

题目描述

Rumia 有一个单位圆,被分成 n n n 等分,等分点分别记作 A 0 A_0 A0​, A 1 A_1 A1​, A 2 A_2 A2​, ⋯ cdots ⋯ , A n − 1 A_{n-1} An−1​。

现在她从 A 0 A_0 A0​ 向 A p A_p Ap​ 发射一束光,经过 k k k 次反射,到达了 A t A_t At​。

Rumia 想知道 t t t 的值,由于 Cirno 并不想帮她,所以 Rumia 转而求助于你。

输入格式

一行,三个整数, n , p , k n,p,k n,p,k。

输出格式

一行,一个整数 t t t。

样例 #1 样例输入 #1
12 5 2
样例输出 #1
10
样例 #2 样例输入 #2
1000 342 3472844
样例输出 #2
648
提示 Sample1 解释

后置物理知识
  • 连续曲线反射规律 : 入射光线与出射光线关于入射点在曲线上切线夹角相等。
数据范围约定

「本题采用捆绑测试」

  • Subtask1( 80 % 80% 80% ) : n , k ≤ 1 0 6 n, k le 10^6 n,k≤106
  • Subtask2( 20 % 20% 20% ) : n , k ≤ 1 0 9 n, k le 10^9 n,k≤109

对于 100 % 100% 100% 的数据 : 0 < p < n ≤ 1 0 9 0 < p < n le 10^9 0 后记

  • Cirno 得到的光图就是传说中的十二芒星图。
代码如下:
#include
#include
#include
#include 

int main()
{
	long long n, p, k;
	scanf("%lld%lld%lld",&n,&p,&k);
	
	long long num = (p*k)%n;
	printf("%lldn",num);
} 
三、[EER1]苏联人 题目背景

题目名称是吸引你点进来的。

这是一道正常的题,和苏联没有任何关系。

题目描述

你在打 EE Round 1,发现第一题非常无聊。于是你不打了,去下国际象棋了。

结果你发现,由于神秘力量的影响,你的棋子只剩下若干黑色的战车,若干黑色的主教和一只白色的国王了。

由于你很无聊,所以你把一些黑色棋子放在了 8 × 8 8times 8 8×8 的棋盘上。

由于你很无聊,所以你想知道,国王放在哪些格子是安全的。换句话说,有哪些格子不会被战车和主教攻击到。当然,国王不能放在已经有棋子的地方。

为了防止你无聊透顶而不知道国际象棋的规则,这里给出以下提示(如果你知道规则那么可以跳过):

国际象棋中,战车可以横向、竖向移动,且格数不受限制。但不能越过其他棋子。

如图,黄色的格子为战车能走到(攻击到)的格子。

国际象棋中,主教可以斜向移动,且格数不受限制。但不能越过其他棋子。

如图,黄色的格子为主教能走到(攻击到)的格子。

简单来说,如果当前位置到目标位置的直线上存在其他棋子,则可以称为“越过了其他棋子”。

如果目标位置是对方的棋子,那么移动到目标位置后,对方的棋子会被吃掉。

更进一步地,你要找的所有位置,必须满足没有黑色棋子能一步走到。


如果你还是没有读懂,可以结合样例进行理解。

输入格式

共 8 8 8 行,每行 8 8 8 个字符,表示棋盘的状态。

其中 . 表示空位,R 表示战车,B 表示主教。

输出格式

共 8 8 8 行,每行 8 8 8 个字符。若一个格子是可以放国王的,则输出 1,否则输出 0。

样例 #1 样例输入 #1
........
........
........
..B..R..
........
........
........
........
样例输出 #1
11111011
01110011
10101011
11000000
10101011
01110011
11111011
11111001
提示

对于 100 % 100% 100% 的数据,保证只会出现 .,R,B 三种字符。

本题共有 4 4 4 个子任务,每个子任务的限制如下:

子任务 1 1 1( 10 10 10 分):保证只会出现 .。

子任务 2 2 2( 20 20 20 分):保证只会出现一个 R 或一个 B(不同时出现)。

子任务 3 3 3( 30 30 30 分):保证只有一个 .。

子任务 4 4 4( 40 40 40 分):没有特殊限制。

代码如下:
#include
#include
#include
#include 



char ch[8][8];
int ans[8][8];
int main()
{
    for(int i=0;i<8;i++) scanf("%s",ch[i]);//现将整个棋盘输入进去
    for(int i=0;i<8;i++)//遍历8行
    {
        for(int j=0;j<8;j++)//遍历8列
        {
            if(ch[i][j]=='R')//如果是战车
            {
                ans[i][j]=1;//先将自己站的位置标1
                for(int k=i-1;k>=0 && ch[k][j]=='.';k--) ans[k][j]=1;//这个战车的上方不能放国王,所以全都设为1
                for(int k=i+1;k<8 && ch[k][j]=='.';k++) ans[k][j]=1;//这个战车的下方也不能放国王,所以也全都设成1
                for(int k=j-1;k>=0 && ch[i][k]=='.';k--) ans[i][k]=1;//同理这个战车的z左边也不能放国王
                for(int k=j+1;k<8 && ch[i][k]=='.';k++) ans[i][k]=1;//同理这个战车的右边也不能放国王
            }
            else if(ch[i][j]=='B')//如果是主教
            {
                ans[i][j]=1;//先将自己的位置标1
                for(int k=i-1,l=j-1;k>=0 && l>=0 && ch[k][l]=='.';k--,l--) ans[k][l]=1;//左上方不能放国王
                for(int k=i+1,l=j+1;k<8 && l<8 && ch[k][l]=='.';k++,l++) ans[k][l]=1;//右下方也不能放国王
                for(int k=i-1,l=j+1;k>=0 && l<8 && ch[k][l]=='.';k--,l++) ans[k][l]=1;//右上方也不能放国王
                for(int k=i+1,l=j-1;k<8 && l>=0 && ch[k][l]=='.';k++,l--) ans[k][l]=1;//左下方也不能放国王
            }
        }
    }
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++) printf("%d",!ans[i][j]);//因为上面不行的地方全取的是1,所以输出时取反即可
        puts("");
    }
    return 0;
} 
四、[USACO06OCT] Another Cow Number Game G 题目描述

奶牛们在玩一种数字游戏,Bessie 想让你帮她预测一下结果。游戏开始时,Bessie 将得到一个正整数 N N N。此时她的分数为 0 0 0。

奶牛们按照以下规则对 N N N 进行变换:

  • 如果 N N N 是奇数,那么将它乘以 3 3 3 后再加 1 1 1。
  • 如果 N N N 是偶数,那么将它除以 2 2 2。

数字每变换一次,Bessie 就得到 1 1 1 分。当 N = 1 N=1 N=1 时,游戏结束。此时的分数就是她的最终得分。

输入格式

一行,一个整数 N N N。

输出格式

一行,一个整数,为 Bessie 的最终得分。

样例 #1 样例输入 #1
5
样例输出 #1
5
提示

【数据范围】

对于 100 % 100% 100% 的数据, 1 ≤ N ≤ 1 0 6 1le Nle 10^6 1≤N≤106。


【样例说明】

当 N N N 的初始值为 5 5 5 时,游戏的过程如下:

N N N变换后的数字变换过程总分
5 5 5 16 16 16 3 × 5 + 1 3times 5+1 3×5+1 1 1 1
16 16 16 8 8 8 16 ÷ 2 16div 2 16÷2 2 2 2
8 8 8 4 4 4 8 ÷ 2 8div 2 8÷2 3 3 3
4 4 4 2 2 2 4 ÷ 2 4div 2 4÷2 4 4 4
2 2 2 1 1 1 2 ÷ 2 2div 2 2÷2 5 5 5

Bessie 的最终得分为 5 5 5。

代码如下:
#include
#include
#include
#include 

int main()
{
	long long n;
	scanf("%lld",&n);
	
	long long sum = 0;
	while(n != 1)
	{
		if(n %2 == 0)
		{
			n = n/2;
			sum++;
		}
		else if(n%2 != 0)
		{
			n = 3*n +1;
			sum++;
		}
		
	}
	
	printf("%lldn",sum);
}
五、[COCI2014-2015#3] STROJOPIS 题目描述

正确的打字正成为文化的重要组成部分。如果你仍然没有使用所有的十根手指来打字,你必须重新学习打字——然后你会打字更快,感觉更舒适和愉快。

有很多网站教你正确打字。下图描述了基本原理:用同一个指针按所需的键是同一颜色的。黄色键需要用小指按下,蓝色键需要用无名指,绿色键需要用中指,红色键需要用食指。自然,左手按键盘的左侧(从 5、T、G、B 开始向左的键),右手按右侧(从 6、Y、H、N 开始向右的键),拇指负责空格。

您的任务是输出每根手指(拇指除外)正确输入给定字符串的分别按下的次数。

输入格式

仅一行一个字符串 s s s。字符串不包含空格,只包含上面图像中包含的字符。

输出格式

输出必须由八行组成,每行一个整数,表示从左到右观察到的每个手指的按键次数(拇指除外)。

样例 #1 样例输入 #1
AON=BOO;
样例输出 #1
1
0
0
1
1
0
3
2
样例 #2 样例输入 #2
PRINT'NY'[NASLA]
样例输出 #2
2
1
0
2
4
1
1
5
样例 #3 样例输入 #3
VIDI,KO,JE,DOSA
样例输出 #3
1
1
3
1
1
6
2 
0
提示 数据规模与约定

令 ∣ s ∣ |s| ∣s∣ 表示输入字符串的长度,则对于 100 % 100% 100% 的数据,有 1 ≤ ∣ s ∣ ≤ 50 1le |s|le 50 1≤∣s∣≤50。

代码如下:
#include
#include
#include
#include 
int a[10];//8个手指,这里我用一个数组表示 
int main()
{
	char str[51];
	scanf("%s",&str);
	int len = strlen(str);
	
	for(int i = 0;i < len;i++)
	{
		if(str[i]=='1' || str[i]=='Q' || str[i]=='A' || str[i]=='Z')
			a[1]++;
		if(str[i]=='2' || str[i]=='W' || str[i]=='S' || str[i]=='X')
			a[2]++;
		if(str[i]=='3' || str[i]=='E' || str[i]=='D' || str[i]=='C')
			a[3]++;
		if(str[i]=='4' || str[i]=='R' || str[i]=='F' || str[i]=='V' || str[i]=='5' || str[i]=='T' || str[i]=='G' || str[i]=='B')
			a[4]++;
		if(str[i]=='6' || str[i]=='Y' || str[i]=='H' || str[i]=='N' || str[i]=='7' || str[i]=='U' || str[i]=='J' || str[i]=='M')
			a[5]++;
		if(str[i]=='8' || str[i]=='I' || str[i]=='K' || str[i]==',')
			a[6]++;
		if(str[i]=='9' || str[i]=='O' || str[i]=='L' || str[i]=='.')
			a[7]++;
		if(str[i]=='0' || str[i]=='P' || str[i]==';' || str[i]=='/' || str[i]=='-' || str[i]=='[' || str[i]==']' || str[i]=='=' || str[i]==''')
			a[8]++;
	}
	for(int i = 1;i <= 8;i++)//从左到右输出八个指头的答案就行 
		printf("%dn",a[i]);
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号