社区讨论
昨晚F求条,玄关!!!
学术版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miazigwd
- 此快照首次捕获于
- 2025/11/23 08:33 4 个月前
- 此快照最后确认于
- 2025/11/23 12:41 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define TEST
namespace Smikunx{
#define pii pair<int, int>
#define fi first
#define se second
#define mmj(i,A,B) for(int i = B; i >= A; i --)
#define subset(i,S) for(int i = S & (S - 1); i; i = (i - 1) & S)
#define Yuzusoft 0x0d000721
#define ll long long
#define max(a, b) ((a)>(b)?(a):(b))
#define min(a, b) ((a)<(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define pk push_back
using ull = unsigned long long;
using i128 = __int128;
using u128 = __uint128_t;
struct fastmod {
ull m, b;
fastmod(ull m) : m(m), b(((u128)1 << 64) / m) {}
ull reduce(ull a) {
ull q = ((u128)a * b) >> 64;
ull r = a - q * m;
return r < m ? r : r - m;
}
} z(2);
#ifndef TEST
constexpr auto maxn=1<<20;char Cin[maxn],Cout[maxn],*p1=Cin,*p2=Cin,*p3=Cout;
#define getchar()(p1==p2&&(p2=(p1=Cin)+fread(Cin,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define ros()(fwrite(Cout,1,p3-Cout,stdout))
#define putchar(x)(p3==Cout+maxn&&(ros(),p3=Cout),*p3++=(x))
#define isdigit(x) ((x)>='0'&&(x)<='9')
class ROS{public:~ROS(){ros();}}_;
#endif
#define isspace(x) ((x)<33)
#define isdigit(x) ((x) >= '0' && (x) <= '9')
template <typename T>
inline void Miku(T&x){x=0;char f=1,ch=getchar();while(!isdigit(ch)) ch=='-'?f=-1:0,ch=getchar();for(;isdigit(ch);) x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); x*=f;}
inline void Miku(char&x){x=' ';while(isspace(x))x=getchar();}
inline void Miku(char*x){char ch;while(!isspace(ch=getchar())) (*x++)=ch;}
inline void Miku(string&x){static char ch; Miku(ch);x.clear();do x+=ch; while(!isspace(ch=getchar())&&~ch);}
inline void Miku(double&x){scanf("%lf", &x);}
template <typename T>
inline void Iliya(T x){x<0?putchar('-'),x=-x:0; static short st[55], t(0); do st[++t]=x%10; while(x/=10); for(;t;t--) putchar(st[t]+'0');}
inline void Iliya(char x){putchar(x);}
template <typename T>
inline void Iliya(T*x){for(;(*x);) putchar(*(x++));}
inline void Iliya(string x){for(int i=0,len=x.size();i<len;i++) putchar(x[i]);}
inline void Iliya(double x){printf("%.10lf", x);}
template <typename T, typename ...ty>
inline void Miku(T&x, ty&...y){Miku(x),Miku(y...);}
template <typename T, typename ...ty>
inline void Iliya(T x, ty ...y){Iliya(x), putchar(' '),Iliya(y...);}
template <typename T, typename ...ty>
inline void Miyu(T x, ty ...y){Iliya(x, y...); putchar('\n');}
__int128 inv(__int128 a, __int128 p){ return 1 < a ? p - inv(p % a, a) * p / a : 1; }
#ifndef TEST
#undef getchar
#undef ros
#undef putchar
#endif
#ifdef TEST
#define file(x) 1;
#else
#define file(x) freopen(#x ".in", "r", stdin);\
freopen(#x ".out","w",stdout);
#endif
//=============================Freopen=============================//
};using namespace Smikunx;
//=============================Fast IO=============================//
const int MOD = 998244343;
const int N = 4e6 + 6;
#define mnk(i,A,B) for(int i = A; i <= B; i ++)
#define int ll
char a[N];
int n, r[15], sum[15];
ll fac[N], iv[N];
inline ll C(int n, int m) {
if(n < m || n < 0 || m < 0) return 0;
return fac[n] * iv[m] % MOD * iv[n - m] % MOD;
}
signed main(){
cin >> a + 1;
n = strlen(a + 1);
if(n == 1) {
puts("0");
return 0;
}
fac[0] = 1, iv[0] = 1;
mnk(i, 1, n) fac[i] = fac[i - 1] * i % MOD, iv[i] = inv(fac[i], MOD);
mnk(i, 1, n) a[i] -= '0';
mnk(i, 1, n) r[a[i]] ++;
ll ans = 0;
#define L sum[a[i]]
#define R r[a[i] + 1]
for(int i = 1; i <= n - 1; i ++) {
r[a[i]] --, L ++;
if(a[i] == 9) continue;
ans += C(L + R - 1, L);
}
ans %= MOD;
cout << ans << '\n';
return 0;
}
思路和题解一样,一直是A10个WA17个,求大佬帮助
回复
共 1 条回复,欢迎继续交流。
正在加载回复...