首页 > 其他分享 >gym/10446/C. 0689

gym/10446/C. 0689

时间:2023-08-10 16:22:42浏览次数:47  
标签:0689 int gym tot mt flag 10446 include ll

C. 0689

我们考虑i作为左端点的贡献。
我们强制翻转之后i这个点与原来不同,因为假如翻转之后i和原来相同,我们显然可以将这个翻转区间的左右端点往中间缩小1,也就是它会在更大的i被计算。

另一个问题,对于同一个i,不同的右端点是否会使得翻转之后相同,这也是不会的,

a b
a b b,因为如果他们相等,就会得出rev(a)=b的结论,跟我们前面的约束矛盾。

然后我们计算完了所有与原来的串不同的,它还有可能跟原来的相同,我们只需判断有没有0/8,或者两个69贴着即可。

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#include<cmath>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
using namespace std;
typedef long long ll;
const int N=1e6+5;
const ll mo=1e9+7;

char s[N];
ll tot,a[10];
int n,mt[10],c;
int main() {
   
    // #ifdef  LOCAL
//	       freopen("data.in","r",stdin);
    //     freopen("out.txt","w",stdout);
    // #endif
	int T;
	scanf("%d",&T);
	mt[0]=0;
	mt[6]=9;
	mt[9]=6;
	mt[8]=8;
	
	while (T--){
		scanf("%s",s+1);
		n=strlen(s+1);
		
		tot=0; 
		a[0]=a[6]=a[9]=a[8]=0;
		fd(i,n,1) {
			c=s[i]-'0';
			tot+=(ll)n-(ll)i-a[mt[c]];

			a[c]++;

			if (c!=0 && c!=8) tot++;
		}
		
		bool flag=0;
		fo(i,1,n) {
			if (s[i]=='8' || s[i]=='0') {
			flag=1;
			}
		}
		
		fo(i,1,n-1) {
			if (s[i]=='6' && s[i+1]=='9') flag=1;
			if (s[i]=='9' && s[i+1]=='6') flag=1;
		}
		if (flag) tot++;
		printf("%lld\n",tot);
	}
   
	

    return 0;
}

标签:0689,int,gym,tot,mt,flag,10446,include,ll
From: https://www.cnblogs.com/ganking/p/17620691.html

相关文章

  • 【OpenAI】Python: 基于 Gym-CarRacing 的自动驾驶项目(2)| 车道检测功能的实现 | 边缘
        猛戳,跟哥们一起玩蛇啊! ......
  • Gym104128L Proposition Composition
    很好口胡却不好写。把边分成链边和额外边首先想到分类讨论,显然不能只删额外边,所以有两类情况,删一链边和两链边。如果删一链边,这一链边要么完全没被额外边覆盖,然后其他任选一条;要么被覆盖一次,额外边选覆盖它的边。用线段树简单维护即可。现在难的是删两链边,且这两条链边都至少......
  • Gym103687K Dynamic Reachability
    一个很奇妙的题。回想起之前打的一场模拟赛,有一道题的部分问题是要维护动态图两两联通性的。可能不太一样,但是他有一个离线的思想,将没有修改过的边提前拎出来,把已知的联通性先求了,再用线段树分治一类的可撤销做法维护剩下边的修改。但是这样维护的复杂度跟修改次数相关非常大,如果......
  • 【网络流,dp】Gym102220A Apple Business
    ProblemLink有一棵\(n\)个点的完全二叉树(点\(i\)的父亲是\(\lfloori/2\rfloor\)),第\(i\)个点有\(a_i\)个苹果。现在有\(m\)个订单,每个订单只接受\(u_i\)到\(v_i\)路径上的苹果,保证\(u_i\)是\(v_i\)的父亲,并且最多只接受\(c_i\)个苹果,单价为\(w_i\)。你可......
  • [gym102770L]List of Products
    题意简述我们根据唯一分解定理得到,对于每一个数\(x\)可以表示成\(\sump_i^{e_i}\)的形式,其中\(p_i\)表示第\(i\)大的素数。我们重新定义两个数之间的比较,对于两个数\(x,y\):如果\(x=y\),两个数相等如果\(x,y\)不相等,我们就从小到大枚举素数,知道找到一个下标......
  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • CodeForces Gym 102900B Mine Sweeper II
    CF传送门感觉像脑筋急转弯。考虑所有数字之和就是相邻的\((\text{雷},\text{空地})\)对数,因此翻转后这个对数不会改变。然后由于抽屉原理,\(b\toa\)和\(b\to\operatorname{inv}(a)\)中至少有一个操作次数\(\le\left\lfloor\frac{nm}{2}\right\rfloor\),然后就做完了......
  • gym 102994M Travel Dream 题解
    给定带权无向图,求最大\(k\)元环。\(n,m\leq300,3\leqk\leq10\),无重边。把\(k=3\)判掉,可以\(O(m^2)\)轻松解决。把\(k\)元环拆成长度为\(\dfrac{k}{2}-1\)的链\(+\)长度\(k-\dfrac{k}{2}-1\)的链\(+\)连接两条链的两条边。(长度指边的个数)问题:两条链需要无......
  • gym101573I Favorite Points
    gym101573IFavoritePoints纪念一下。#include<bits/stdc++.h>#defineLLlonglong#definePLLpair<LL,LL>#defineMPmake_pair#defineEBemplace_back#defineall(x)x.begin(),x.end()usingnamespacestd;template<typenameT>voidchkmn(T......
  • CF Gym 102994 Travel Dream
    题意求一张带权无向图中最大的\(k\)元简单环,无解输出impossible。\(1\len,m\le300,k\le10\)。注意\(k\)的范围题解\(k\)很小,存在简单办法对小环小链进行预处理,考虑折半。首先考虑怎么求长度小于等于4的链。长度为\(1,2\)的链可以直接枚举,长度为\(3\)的链......