其他分享
首页 > 其他分享> > B. Long Number--读题的重要性--Codeforces Round #555 (Div. 3)

B. Long Number--读题的重要性--Codeforces Round #555 (Div. 3)

作者:互联网

Long Numbe

time limit per test 2 seconds
memory limit per test 256 megabytes

题目链接http://codeforces.com/contest/1157/problem/B
在这里插入图片描述
在这里插入图片描述


emmm,题目不难,但读错题目的话就疯狂WA6。。。我开始一直以为是每个变化只能用一次,连续的单个变化是ok的。。。然后就成了这样:

for (int i=0; i<n; i++)
	 if (v[s[i]-'0']>s[i]-'0'){
	    a[i]=v[s[i]-'0'];
	 	while (s[i+1]==s[i]) {
	 		i++;
	 		a[i]=v[s[i]-'0'];
		 }
		 v[s[i]-'0']=-1;
	 } 
	 else a[i]=s[i]-'0';
	for (int i=0; i<n; i++)
	 printf ("%d",a[i]);

。。。。实际上的题意是这样的,让你找一个区间,把这个区间里的所有数都按照该变化变一次,求最大的那个。。。

我们从头开始找,只要v[num[i]]>num[i],我们就替换直到不成立

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;
const int mac=2e5+10;
char s[mac];
int v[20],a[mac];
int main()
{
	int n;
	scanf ("%d",&n);
	scanf ("%s",s);
	for (int i=1; i<=9; i++)
	 scanf ("%d",&v[i]);
	for (int i=0; i<n; i++) a[i]=s[i]-'0';
	for (int i=0; i<n; i++)
	 if (v[a[i]]>a[i]){
	    a[i]=v[a[i]];i++;
	 	while (v[a[i]]>=a[i] && i<n) a[i]=v[a[i]],i++;
	 	break;
	 } 
	for (int i=0; i<n; i++)
	 printf ("%d",a[i]);
	printf ("\n");
	return 0;
}

标签:题目,--,读题,Number,Long,int,mac,num,per
来源: https://blog.51cto.com/u_15249461/2870392