Pagini recente » Cod sursa (job #3215168) | Cod sursa (job #345403) | Cod sursa (job #2998942) | Cod sursa (job #2293404) | Cod sursa (job #2868934)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("coduri.in");
ofstream fout ("coduri.out");
const long long MAX_N = 30;
struct fractie{
long long a;
// -
long long b;
} f[MAX_N], check;
vector <long long> made[MAX_N], curr;
string aux, num, zec, per;
long long n, p, cod[MAX_N];
long long to_num(string temp){
long long answer = 0;
while(!temp.empty()){
answer = answer * 10 + (temp[0] - '0');
temp.erase(temp.begin());
}
return answer;
}
long long lgput(long long a, long long b){
long long ans = 1;
while(b){
if(b&1)
ans *= a;
a *= a;
b >>= 1;
}
return ans;
}
long long func9(long long x){
long long ans = 0;
while(x--)
ans = ans * 10 + 9;
return (ans == 0 ? 1 : ans);
}
signed main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin>>n;
for(long long i=1; i<=n; i++){
fin>>aux;
string num = zec = per = "";
for(p=0; p < (int)aux.size() && aux[p] != ','; p++) num += aux[p];
for(++p; p < (int)aux.size() && aux[p] != '('; p++) zec += aux[p];
for(++p; p < (int)aux.size() && aux[p] != ')'; p++) per += aux[p];
f[i].a = to_num(num+zec+per) - ((int)per.size() > 0) * to_num(num+zec);
f[i].b = func9((int)per.size()) * lgput(10, (int)zec.size());
}
for(long long mask=1; mask < (1 << n); mask++){
if(__builtin_popcount(mask) == 1)
continue;
curr.clear();
check = {1, 1};
for(long long i=1; i<=n; i++)
if(mask & (1 << (i-1))){
check.a *= f[i].a;
check.b *= f[i].b;
curr.push_back(i);
}
for(long long i=1; i<=n; i++)
if(f[i].a == check.a && f[i].b == check.b)
made[i] = curr;
}
for(long long i=1; i<=n; i++){
sort(made[i].begin(), made[i].end());
made[i].resize(distance(made[i].begin(), unique(made[i].begin(), made[i].end())));
}
p = 1;
for(long long i=1; i<=n; i++)
if((long long)made[i].size() == 0){
cod[i] = p;
p *= 2;
}
for(long long i=1; i<=n; i++)
if(!cod[i])
for(auto m : made[i])
cod[i] += cod[m];
for(long long i=1; i<=n; i++){
fout<<"18 ";
for(long long j=0; j < 18; j++)
if(cod[i]&(1<<j))
fout<<"1 ";
else
fout<<"0 ";
fout<<"\n";
}
return 0;
}