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
B. Long Number--读题的重要性--Codeforces Round #555 (Div. 3)
B. Long Number--读题的重要性--Codeforces Round #555 (Div. 3)


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;
}
上一篇:B站黑马c++学习笔记 —— 通讯录案例


下一篇:假期java自学-----类3