首页 > 其他分享 >Living-Dream 系列笔记 第28期

Living-Dream 系列笔记 第28期

时间:2024-03-03 18:48:51浏览次数:22  
标签:Living 26 num1 num2 ++ Excel 28 RXCY Dream

本期讲解了进制转换。

T1

考验代码能力的好题。


首先需要判断输入的坐标是 RXCY 型还是 Excel 型:

  • 直接扫一遍字符串,若存在一个字母前面是数字,则说明是 RXCY 型,否则是 Excel 型。

这一部分的代码:

bool check(string s){
	for(int i=0;s[i];i++)
		if(isupper(s[i])&&isdigit(s[i-1]))
			return 0;
	return 1;
}

其次,若当前字符串为 Excel 型,则需要设计转为 RXCY 型的函数:

  • 扫描一遍字符串,若为大写字母则转为十进制,若为数字则存下来,最后输出这两个值作为列和行即可。

这一部分的代码:

void solve1(string s){
	int i=0,num1=0,num2=0;
	while(isupper(s[i])&&i<s.size()) num1=num1*26+(s[i++]-'A'+1);
	while(isdigit(s[i])&&i<s.size()) num2=num2*10+(s[i++]-'0');
	cout<<'R'<<num2<<'C'<<num1<<'\n';
}

然后,若当前字符串为 RXCY 型,则需要设计转为 Excel 型的函数:

  • 扫描一遍字符串,存下行与列,将列转为 \(26\) 进制输出,再输出行即可。

这一部分的代码:

void solve2(string s){
	int i=0,j=0,num1=0,num2=0,t[131]={0};
	for(i++;isdigit(s[i]);i++) num1=num1*10+(s[i]-'0');
	for(i++;isdigit(s[i]);i++) num2=num2*10+(s[i]-'0');
	for(;num2;num2=num2/26-!(num2%26)){
		if(num2%26) t[++j]=num2%26;
		else t[++j]=26;
	}
	for(;j;j--) cout<<(char)(t[j]+'A'-1);
	cout<<num1<<'\n';
}

然后这题就做完了 \(qwq\)。

T2

见tj。

标签:Living,26,num1,num2,++,Excel,28,RXCY,Dream
From: https://www.cnblogs.com/XOF-0-0/p/18050446

相关文章

  • Living-Dream 系列笔记 第26期
    ProblemT1见题解。T2/*思路:枚举每一头牛说的话,尝试将Bessie置于pi处,再枚举其他牛说的话,检验不合法的数量,取max即为答案。*/#include<bits/stdc++.h>usingnamespacestd;intn,ans=1e9;structnode{charop;intp;}a[1031];intmain(){cin>>n;......
  • Living-Dream 系列笔记 第25期
    ProblemT1/*思路:对于操作1,直接+=拼接即可;对于操作2,直接令s=s.substr(a,b)即可;对于操作3,直接令s=s.insert(a,t)即可;对于操作4,直接s.find(str)即可,注意特判-1。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intq;strings;signedmain(){......
  • Living-Dream 系列笔记 第23期
    ProblemT1/*思路:我们可以忽略两人碰到后转向的过程,直接视为两人彼此穿过了对方,这样算距离是不变的,时间也是不变的,所以合法。通过上述分析,那么最小时间即为对于每一个士兵往左/右走的时间取min再取max,最大时间反之亦然。*/#include<bits/stdc++.h>usingnamespacestd;......
  • Living-Dream 系列笔记 第24期
    ProblemT1/*思路:暴力枚举所有的和,用桶标记每个和出现的次数,找最大值且编号最小即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;ints1,s2,s3;intsum=-1e9,ans;intmp[131];signedmain(){ ios::sync_with_stdio(0); cin>>s1>>s2>>s3;......
  • Living-Dream 系列笔记 第21期
    ProblemT1/*思路:枚举二元组(i,j),依次检验k次训练课,若i的位置总是>j或<j,则将答案累加。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intk,n,ans;inta[31][31];signedmain(){ ios::sync_with_stdio(0); cin>>k>>n; for(inti=1;i<=......
  • Living-Dream 系列笔记 第22期
    ProblemT1/*思路:因为题目要求最大水量,所以K次操作需要都用上,并且由于每次都是将x倒入x+1中,所以K次操作之后的最大水量应当是x~x+k+1之和;于是问题就转变成了求一段长度为k+1的连续子段的和的最大值,因此维护一个前缀和即可。*/#include<bits/stdc++.h>usingnamespacestd......
  • Living-Dream 系列笔记 第19期
    ProblemT1/*思路:对于每一对L,R,标记[L,R)(注意左闭右开!),并且求出最小的L(minl)和最大的R-1(maxr);循环maxl~maxr,若被标记则最长连续挤奶时间+1,最长无人挤奶时间=0;否则最长连续挤奶时间=0,最长无人挤奶时间+1,同时更新最大值。*/#include<bits/stdc++.h>usingnamespacestd;intn......
  • Living-Dream 系列笔记 第18期
    ProblemT1/*思路:令N个整数以字符串形式读入,判断其末尾是否为0、2、4、6、8,若是则为偶数,不是则为奇数。*/#include<bits/stdc++.h>usingnamespacestd;intn;stringx;//以字符串形式读入intmain(){ cin>>n; while(n--){ cin>>x; if(x[x.size()-1]=='0'||x[x.......
  • Living-Dream 系列笔记 第20期
    ProblemT1/*思路:统计每个人成绩的出现人次,然后贪心地按分数值域从大到小扫描一遍,每次令答案累加上当前分数出现的人次,若答案>=k就停止扫描并输出即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,k,a[2031];intcnt,ans;intmp[131......
  • Living-Dream 系列笔记 第34期
    T1有一个比较秒的trick:虚拟点。对于本题,我们设一虚拟点\(n+1\)表示水源,于是打井的操作即为与点\(n+1\)连边,将点权转为边权。然后跑kruskal即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,tot;intfa[331];intw[331];intp[331]......