2023/3/26日题目总结

今天再次开始刷题了。这里总结每天学到的新技巧。

连续读入字符,直到某个字符结束

P1042 [NOIP2003 普及组] 乒乓球 - 洛谷

	for (; scanf("%c", &s) && s != 'E'; i ++)
	{
		if (s == 'W') q[i] = 1;
		else if (s == 'L') q[i] = 2;
		else i--;
	}

这里的意思是,连续读入多行字符(本题只有W、L),直到读到E后停止,循环体内第三行是用来处理回车或者空格等,以免使数组中的数据不连续

两组关联的数据按不同大小来排序和输出  

P1068 [NOIP2009 普及组] 分数线划定 - 洛谷

//  读入
scanf("%d%d", &id, &sc);
q[i++] = {sc,N - id};
//  输出
printf("%d %d\n",N - q[i].second,  q[i].first);

本题的数据是一pair类型的,first记录的分数,second记录的报名号,我们需要按分数从高到低排序,当分数相同的时候,又按报名号从小到大,如果我们直接对pair类型用快排的话,就只能满足其中一个情况,所以我们用一个较大的数去减去每组数据的报名号,对两组数据按照从大到小排序输出的时候再用这个较大的数去减去seconde即可实现。

(很基础的一个)向上向下取整

int(a/b) + 1; // 向上取整
int(a/b) - 1; // 向下取整
int(a + 0.5); // 四舍五入

矩阵类的状态存储方式;用模运算来处理数组头尾循环

题解 P1328 【生活大爆炸版石头剪刀布】 - yzzxliuchao 的博客

 题目给了一个二维的判断矩阵,可以单独建一个二维矩阵来表示这个判断矩阵

A,B的出拳是循环的,我们是用数组来存储二人的出拳顺序,这里用模运算处理头尾

int vs[5][5] = {{0,0,1,1,0},  //存储得分表 vs[a][b]=0表示a输b赢
                {1,0,0,1,0},
                {0,1,0,0,1},
                {0,0,1,0,1},
                {1,1,0,0,0}}; 
for(int i = 0; i < n; i++)
    {
        cnta += vs[a[i % na]][b[i % nb]]; 
        cntb += vs[b[i % nb]][a[i % na]];
    }
// A,B二人的出拳周期分别是na和nb
// 用 i%na 来处理周期

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RefrainC.C.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值