Codeforces:从头开始contest 1

Posted qyj060604

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces:从头开始contest 1相关的知识,希望对你有一定的参考价值。

【Codeforces:从头开始】contest 1     

1A     

用 a × a 的石板覆盖 n × m 的长方形广场,允许石板覆盖的区域超出广场,不允许打破石板,石板的两侧应平行于广场两侧,要求覆盖完广场所需的石板数量最少是多少      

样例图示:     

技术图片

 

(显然,答案为每边必须铺的+铺出去(1个或0个))    

注意开 long long    

代码:    

#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
int main()
	ld n,m,a;
	cin >> n >> m >> a;
	ll x=ceil(n/a),y=ceil(m/a);
	cout << x*y << endl;
	return 0;
 

 1B     

人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统:     

第一列被标为A,第二列为B,以此类推,第26列为Z。接下来为由两个字母构成的列号: 第27列为AA,第28列为AB...在标为ZZ的列之后则由三个字母构成列号,如此类推。     

行号为从1开始的整数。    

单元格的坐标由列号和行号连接而成。比如,BC23表示位于第55列23行的单元格。    

有时也会采用被称为RXCY的坐标系统,其中X与Y为整数,坐标(X,Y)直接描述了对应单元格的位置。比如,R23C55即为前面所述的单元格。     

您的任务是编写一个程序,将所给的单元格坐标转换为另一种坐标系统下面的形式。    

大模拟     

我竟无话可说     

好吧,一种相对简单的方法是把ABC坐标看作26进制数字      

这样既可     

但是我绝不是这种能用最简单方法解决问题的人     

所以:暴力出奇迹!     

把排名为1~1e6的所有字符串全部预处理出来     

那么RC表变Excel表就解决了    

Excel变RC只要小学数学即可     

代码:    

#include<bits/stdc++.h>
using namespace std;
int T;
bool flag;//flag=0:RC/flag=1:Excel
char s[1000005];
int n;
int x,y;
int p[15];
string C[1000005];
string qyj;
void init()
	for(int i=1;i<=26;i++)int cr=i+‘A‘-1;C[i]+=(char)cr;
	for(int i=27;i<=1000000;i++)
		qyj=C[i-1];
		bool IOI=0;
		for(int j=qyj.size()-1;j>=0;j--)
			if(qyj[j]!=‘Z‘)IOI=1;qyj[j]++;break;
			qyj[j]=‘A‘;
		
		if(!IOI) C[i]+=‘A‘;
		C[i]+=qyj;
	

int main()
	init();
	p[0]=1;
	for(int i=1;i<=6;i++) p[i]=p[i-1]*26;
	cin>>T;
	while(T--)
		scanf("%s",s+1);
		n=strlen(s+1);
		int cnt=0;
		for(int i=1;i<n;i++)
			if(s[i]>=‘A‘&&s[i]<=‘Z‘&&(s[i+1]<‘A‘||s[i+1]>‘Z‘)) cnt++;
		
		if(cnt==1) flag=1;
		else flag=0;
		if(flag==0)
			x=0,y=0;
			int u=0;
			for(int i=1;i<=n;i++)
				if(s[i]>=‘A‘&&s[i]<=‘Z‘) u++;
				if(s[i]>=‘0‘&&s[i]<=‘9‘)
					if(u==1) x=(x*10)+(s[i]-‘0‘);
					else y=(y*10)+(s[i]-‘0‘);
				
			
			cout<<C[y];
			printf("%d\\n",x);
		 
		else
			bool u=0;
			int x=0,y=0;
			for(int i=1;i<=n;i++)
				if(s[i]>=‘0‘&&s[i]<=‘9‘) u=1;
				if(u==0) y=(y*26)+(s[i]-‘A‘+1);
				else x=(x*10)+(s[i]-‘0‘); 
			
			printf("R%dC%d\\n",x,y);
		
	
	return 0;
 

 

以上是关于Codeforces:从头开始contest 1的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #604 (Div. 2)

Codeforces Round #616 (Div. 1)

[Codeforces 757E] Bash Plays with Functions (数论)

codeforces 1C. Ancient Berland Circus

CodeForces B. Creating the Contest

http://codeforces.com/contest/834