// Przykładowe niepoprawne rozwiązanie do zadania Dzielniki. #include "dzilib.h" #include <bits/stdc++.h> using namespace std; vector<int>primes; int sito[1000110]; long long f(long long x){ if(x==1)return 1; vector<int>pom; while(x!=1 && (pom.size()==0 || sito[x]==pom.back())){ pom.push_back(sito[x]); x/=sito[x]; } return f(x)*(pom.size()+1); } struct node{ int war; map<int,int>graf; }; vector<node>trie; long long policz[1000110]; int main() { for(long long i=2;i<=1000100;i++) if(!sito[i]){ sito[i] = i; primes.push_back(i); for(long long j=i*i;j<=1000100;j+=i) if(sito[j]==0) sito[j] = i; } int t = GetT(); int q = GetQ(); long long c = GetC(); long long n = GetN(); if(n<=1000000){ trie.push_back({}); int i, j; for(i=1;i<=n+10;i++) policz[i] = f(i); for(i=1;i<=n;i++){ int it = 0; for(j=0;j<10;j++){ // if(i==1000)printf("%d\n", it); int pom = policz[i+j]; if(trie[it].graf[pom]!=0){ it = trie[it].graf[pom]; } else{ trie[it].graf[pom] = trie.size(); it = trie.size(); trie.push_back({}); } } trie[it].war = i; } while(t--){ int it = 0; int i = 0; while(trie[it].graf.size()){ // printf("%d %d\n", it, i); int pom = Ask(i); it = trie[it].graf[pom]; i++; } Answer(trie[it].war); } return 0; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | // Przykładowe niepoprawne rozwiązanie do zadania Dzielniki. #include "dzilib.h" #include <bits/stdc++.h> using namespace std; vector<int>primes; int sito[1000110]; long long f(long long x){ if(x==1)return 1; vector<int>pom; while(x!=1 && (pom.size()==0 || sito[x]==pom.back())){ pom.push_back(sito[x]); x/=sito[x]; } return f(x)*(pom.size()+1); } struct node{ int war; map<int,int>graf; }; vector<node>trie; long long policz[1000110]; int main() { for(long long i=2;i<=1000100;i++) if(!sito[i]){ sito[i] = i; primes.push_back(i); for(long long j=i*i;j<=1000100;j+=i) if(sito[j]==0) sito[j] = i; } int t = GetT(); int q = GetQ(); long long c = GetC(); long long n = GetN(); if(n<=1000000){ trie.push_back({}); int i, j; for(i=1;i<=n+10;i++) policz[i] = f(i); for(i=1;i<=n;i++){ int it = 0; for(j=0;j<10;j++){ // if(i==1000)printf("%d\n", it); int pom = policz[i+j]; if(trie[it].graf[pom]!=0){ it = trie[it].graf[pom]; } else{ trie[it].graf[pom] = trie.size(); it = trie.size(); trie.push_back({}); } } trie[it].war = i; } while(t--){ int it = 0; int i = 0; while(trie[it].graf.size()){ // printf("%d %d\n", it, i); int pom = Ask(i); it = trie[it].graf[pom]; i++; } Answer(trie[it].war); } return 0; } } |