Advertisement
a53

Anagrame5

a53
Aug 8th, 2021
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. /*
  2. Soltuie oficiala:
  3. Autor: Iacob Tudor.
  4. Complexitate: O(n+sigma)
  5. Punctaj: 100p
  6. Aceasta problema a fost gandita
  7. ca a doua problema din concursul
  8. infoleague etapa 1 dar a fost
  9. inlocuita.
  10. */
  11. #include<bits/stdc++.h>
  12. using namespace std;
  13. ifstream fin("window.in");
  14. ofstream fout("window.out");
  15. const long long mod=666013;
  16. long long fs[50],ft[50],r,f[100005],inv[100005],invf[100005];
  17. char s[100005],t[100005];
  18.  
  19. //calculeaza Combinari de n luate cate k in O(1).
  20. long long c(long long n,long long k){
  21. return (((f[n]*invf[k])%mod)*invf[n-k])%mod;
  22. }
  23.  
  24. int main(){
  25.  
  26. //dam precompte: f[i] - factorialul lui i sub modul mod
  27. // inv[i] - inversul lui i sub modul mod.
  28. // invf[i] inversul factorialului lui i sub modul mod.
  29. f[0]=f[1]=inv[0]=inv[1]=invf[0]=invf[1]=1;
  30. for(long long i=2;i<=100001;i++){
  31. f[i]=(i*f[i-1])%mod;
  32. inv[i]=(inv[mod%i]*(mod-mod/i))%mod;
  33. invf[i]=(inv[i]*invf[i-1])%mod;
  34. }
  35.  
  36. cin>>s>>t;
  37.  
  38. //calculam frecventa fiecarui caracter.
  39. r=1;
  40. long long ns(strlen(s)),nt(strlen(t));
  41. for(long long i=0;i<ns;i++)fs[(long long)s[i]-96]++;
  42. for(long long i=0;i<nt;i++)ft[(long long)t[i]-96]++;
  43.  
  44. //iteram prin toate caracterele si calculam combinarile.
  45. for(long long i=1;i<=26;i++){
  46. if(ft[i]>fs[i]){
  47. cout<<0;
  48. return 0;
  49. }
  50. r*=c(fs[i],ft[i]);
  51. r%=mod;
  52. }
  53.  
  54. cout<<r;
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement