Cod sursa(job #917698)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 18 martie 2013 11:38:56
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <cstdio>
#include <cstring>
using namespace std;
char d[20][20];
int fnd = 0;
bool gr[20][20];
int parte[20];
int grupe=0;
int gas = 0;
int n;
void check()
{
memset(gr,0,sizeof(gr));
int i,j;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(d[i-1][j-1] == '1')
gr[parte[i]][parte[j]]=1;
for(i=1;i<=grupe;++i)
for(j=1;j<=grupe;++j)
if(i!=j && !gr[i][j])
return ;
++gas;
}
void back(int copil)
{
if(copil == n+1)
{
if(grupe >= 2)
check();
return ;
}
int i;
for(i=1;i<=grupe;++i)
{
parte[copil] = i;
back(copil+1);
}
++grupe;
parte[copil] = grupe;
back(copil+1);
--grupe;
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
int i,j;
scanf("%d\n",&n);
for(i=0;i<n;++i)
gets(d[i]);
back(1);
printf("%d\n",gas);
return 0;
}
#include <algorithm>
#include <stdio.h>
#define restRez 30103
#define MAX 210
using namespace std;
int k, a, b, n, sol;
char strBuff[MAX];
int pos[MAX][MAX][10], ds[MAX][MAX], pt[MAX][MAX];
int main()
{
freopen("diviz.in", "r", stdin);
freopen("diviz.out", "w", stdout);
scanf("%d %d %d\n", &k, &a, &b);
fgets(strBuff + 1, MAX, stdin);
for (; strBuff[n + 1] != '\n'; n++);
for (int i = 1; i <= n; i++)
{
int c = strBuff[i] - '0';
for (int l = b; l > 1; l--)
for (int r = 0; r < k; r++)
ds[l][r] = pos[l][r][c];
for (int l = b; l > 1; l--)
for (int r = 0; r < k; r++)
pos[l][(10 * r + c) % k][c] = (pos[l][(10 * r + c) % k][c] + pt[l - 1][r]) % restRez;
for (int l = b; l > 1; l--)
for (int r = 0; r < k; r++)
{
pos[l][r][c] = (pos[l][r][c] + restRez - ds[l][r]) % restRez;
pt[l][r] = (pt[l][r] + pos[l][r][c] + restRez - ds[l][r]) % restRez;
}
if (c)
{
if (!pos[1][c % k][c])
pt[1][c % k]++;
pos[1][c % k][c] = 1;
}
}
for (int i = a; i <= b; i++)
sol = (sol + pt[i][0]) % restRez;
printf("%d\n", sol);
fclose(stdin);
fclose(stdout);
return 0;
}