码迷,mamicode.com
首页 > 其他好文 > 详细

Once in a casino CodeForces - 1120B (暴力)

时间:2019-07-17 00:47:33      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:scan   char s   方案   long   put   pre   char   范围   lld   

大意: 给定两个字符串$a,b$, 每个字符为$0-9$, 每次操作将$a$中相邻两位加$1$或减$1$, 操作后每个数仍要为$0-9$, 求最少操作使$a$变成$b$.

 

先不考虑范围, 判断是否成立. 然后暴力输出方案即可

#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll;

const int N = 1e6+10;
int n;
char s[N], t[N];
ll ans, a[N];

void dfs(int x, int w) {
	if (s[x+1]+w<‘0‘||s[x+1]+w>‘9‘) dfs(x+1,-w);
	printf("%d %d\n",x,w);
	s[x] += w;
	s[x+1] += w;
	if (!--ans) exit(0);
}

int main() {
	scanf("%d%s%s", &n, s+1, t+1);
	REP(i,1,n) { 
		a[i] = -a[i-1]+t[i]-s[i];
		ans += abs(a[i]);
	}
	if (a[n]) return puts("-1"),0;
	printf("%lld\n", ans);
	if (!ans) return 0;
	ans = min(ans, (ll)1e5);
	REP(i,1,n-1) {
		while (s[i]!=t[i]) dfs(i,t[i]>s[i]?1:-1);
	}
}

 

Once in a casino CodeForces - 1120B (暴力)

标签:scan   char s   方案   long   put   pre   char   范围   lld   

原文地址:https://www.cnblogs.com/uid001/p/11198231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!