Cerința
Se dau n
perechi de numere naturale, m
şi k
. Pentru fiecare pereche să se afle câte numere naturale de m
cifre, formate cu cifrele 1,2,...,k
există, astfel încât prin permutarea cifrelor să devină palindromuri.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
perechi de numere naturale m
și k
, separate prin spații.
Date de ieșire
Programul va afișa pe ecran, pentru fiecare pereche m
şi k
, numărul cerut modulo 1.000.000.007
.
Restricții și precizări
1 ≤ n ≤ 100.000
1 ≤ m ≤ 1.000.000.000
1 ≤ k ≤ 9
Exemplu
Intrare
4 2 2 3 1 4 3 5 5
Ieșire
2 1 21 1205
Explicație
Numerele de lungime 2
, formate cu cifrele 1,2
, care pot deveni palindroame prin permutarea cifrelor sunt 11
şi 22
.
Numerele de lungime 3
, formate cu cifra 1
, care pot deveni palindroame prin permutarea cifrelor sunt 111
.
Numerele de lungime 4
, formate cu cifrele 1,2,3
, care pot deveni palindroame prin permutarea cifrelor sunt
1111, 2222, 3333, 1122, 1212, 1221, 2112, 2121, 2211, 1133,1313, 1331, 3113, 3131, 3311,
2233, 2323, 2332, 3223, 3232, 3322
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema palid:
#include <iostream>
#define mi 1000000007
#define ll long long
using namespace std;
ll n,m,k,i,j,sol,t,inv,ins,c[10][10],p,invers[10];
ll putere(ll exp)
{
if(exp==0)return 1;
else if(exp%2==0){ ll s=putere(exp/2); return (s*s)%mi;}
else return (j*putere(exp-1))%mi;
}
void combinari()
{
c[1][0]=1;
c[1][1]=1;
for ( i=2 ; i<=9 ; i++ )
{
c[i][0]=1;
for(j=1;j<i;j++)
c[i][j]=c[i-1][j]+c[i-1][j-1];
c[i][i]=1;
}
}
void gcd(ll &x, ll &y, int a, int b)
{
if (!b)
x = 1, y = 0;
else
{
gcd(x, y, b, a % b);
ll aux = x;
x = y;
y = aux - y * (a / b);
}
}
int main()
{
cin >> n ;
combinari();
p=1;
invers[0]=1;
for(i=1;i<=8;i++)
{
p=p*2;
inv=0;
gcd(inv, ins, p, mi);
if (inv <= 0)
inv = mi + inv % mi;
invers[i]=inv;
}
for ( i=1 ; i<=n ; i++ )
{
cin >> m >> k ;
if ( m%2==1 ) m++ ;
sol = 0 ;
t = 0 ;
for ( j=k ; j>0 ; j=j-2 )
{
sol = ( sol + c[k][t]*putere(m) )% mi ;
t++ ;
}
sol = ( sol * invers[k-1] ) % mi ;
cout << sol << "\n" ;
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2545 palid
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2545 palid de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!