首页 >> 大全

SDUT 2012春季ACM内部测试赛4's

2024-01-07 大全 40 作者:考证青年

A:

polla队长很快就做出来了。本以为是水题,可是今天看了看,也不是那么水。orz之。。自己刚开始把题意给理解错了,以为只有IXCM可以重复出现,其他只能出现一次,而且IXC只能出现三次。愚蠢啊。。。题意是给你罗马数字然后你求和后再输出罗马数字,rule里面的第二条我给理解错了。其实就是说明出现减式时只能是连续的两个其组合是

I (X,C) X(L,C) C(D,M)其实根据后一个不能大于前一个的10被就能推出这个组合。。。然后 IX = 4 IC = 9 XL = 40 XC = 90 CD = 400 CM =900

先推出每个数,然后求和,组后由大到小输出。。

View Code

C:

春季赛比赛_春季赛ts夺冠_

膜拜polla。。。。弄清思路,几分钟就1Y了。。。。佩服啊。。。orz

找规律:0-100就有二十个数满足分别是0,2,4,6,30,32,34,36,40,42,44,46,50,52,54,56,60,62,64,66

将n转化成20进制数处理,需要注意,含有E,在对20取余的时候直接把它们略过去了,但遇到6是说明7已经有了所以7与6之间的数都为,000,000。

View Code

#include 
#include
#include
using namespace std;
int num[20] = {0,2,4,6,30,32,34,36,40,42,44,46,50,52,54,56,60,62,64,66};
int a[15];
int main()
{
int i,j,n;
while (cin>>n)
{
if (!n) break;
i = 0;
while (n)
{
a[i++] = num[n%20];
n /= 20;
}
printf("%d",a[i - 1]);
for (j = i - 2; j >= 0; --j)
{
if (j == 6) printf(",000,000");
printf(",%.3d",a[j]);
}
printf("\n");
}
return 0;
}

春季赛ts夺冠_春季赛比赛_

G:

看了很长时间才看懂,就是给你一套密码,然后你将它翻译。

密码是这样来的:首先应为字母A-Z对应 01--26空格对应27

每三个字符(包括空格,最后字符不足用空个补齐注意这里是你多补进去的,最后输出的时候要处理掉就是因为这里pe了一次)组成一个六位密码,然后每组密码除以对应的关键字取余最后组成题目中给出的密码序列。。。感觉就是一个模拟过程。。

View Code

#include 
#include
#include
#define maxn 55
using namespace std;
char ar[maxn][10],str[maxn][10];
int ans[maxn];
int main()
{
int a,b,c,d;
int ma,mb,mc,md;
int t,i,j,n;
cin>>t;
while (t--)
{
cin>>n;
cin>>ma>>mb>>mc>>md;
for (i = 0; i < n; ++i)
{
cin>>ar[i];
//首先把余数对应的取出来
int len = strlen(ar[i]) - 1;
a = b = c =d = 0;
if (len - 1 >= 0) a = a*10 + ar[i][len -1] - '0';
if (len >= 0) a = a*10 + ar[i][len] - '0';
len -= 2;
if (len - 1 >= 0) b = b*10 + ar[i][len - 1] - '0';
if (len >= 0) b = b*10 + ar[i][len] - '0';
len -= 2;
if (len - 1 >= 0) c = c*10 + ar[i][len - 1] - '0';
if (len >= 0) c = c*10 + ar[i][len] - '0';
len -= 2;
if (len - 1 >= 0) d = d*10 + ar[i][len - 1] - '0';
if (len >= 0) d = d*10 + ar[i][len] - '0';
len -= 2;
for (j = 1; j <= 272727; ++j)//循环查找中间密码
{
if (j%ma == d && j%mb == c && j%mc == b && j%md == a)
{
ans[i] = j;
break;
}
}
}
int tmp[5];
for (i = 0; i < n - 1; ++i)//取出对应的数字转化的字符
{
int p = ans[i];
memset(tmp,0,sizeof(tmp));
if (p/10 != 0)
{
tmp[0] = tmp[0]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[0] = tmp[0]*10 + p%10;
p/= 10;
}
if (p/10 != 0)
{
tmp[1] = tmp[1]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[1] = tmp[1]*10 + p%10;
p /= 10;
}
if (p/10 != 0)
{
tmp[2] = tmp[2]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[2] = tmp[2]*10 + p%10;
p /= 10;
}
for (j = 2; j >= 0; --j)
{
if (tmp[j] == 27) printf(" ");
else printf("%c",tmp[j] + 'A' - 1);
}
}
//单独处理最后一组数据,应该可能多加了空格
int p = ans[n - 1];
memset(tmp,0,sizeof(tmp));
if (p/10 != 0)
{
tmp[0] = tmp[0]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[0] = tmp[0]*10 + p%10;
p/= 10;
}
if (p/10 != 0)
{
tmp[1] = tmp[1]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[1] = tmp[1]*10 + p%10;
p /= 10;
}
if (p/10 != 0)
{
tmp[2] = tmp[2]*10 + p%100;
p /= 100;
}
else if (p)
{
tmp[2] = tmp[2]*10 + p%10;
p /= 10;
}
//处理空格
int l = 0;
for (j = 0; j < 3; ++j)
{
if (tmp[j] != 27)
{
l = j; break;
}
}
for (i = 2; i >= j; --i)
{
if (tmp[i] == 27) printf(" ");
else printf("%c",tmp[i] + 'A' -1);
}
printf("\n");
}
return 0;
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了