21
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;
vector<int> ans[maxn];
int d[maxn];
int main()
{
for(int i=1;i<maxn;++i){
ans[i].push_back(1);
for(int j=2;j<=int(sqrt(i)+0.5);++j){
if(i%j==0) {
ans[i].push_back(j);
if(j!=i/j)ans[i].push_back(i/j);
}
}
}
for(int i=1;i<maxn;++i){
//cout<<i<<" : ";
sort(ans[i].begin(),ans[i].end());
int sum=0;
for(int j=0;j<ans[i].size();++j){
//cout<<ans[i][j]<<' ';
sum+=ans[i][j];
}
d[i]=sum;
//cout<<endl;
}
int sum=0;
for(int i=1;i<10000;++i){
int tp=d[i];
if(tp>=10000||tp<0) continue;
if(d[tp]==i&&tp!=i){
sum+=tp;
sum+=i;
cout<<i<<' '<<tp<<endl;
d[i]=-1;
}
}
cout<<sum<<endl;
return 0;
}
22
#include<bits/stdc++.h>
using namespace std;
string s;
vector<string> ans;
int main()
{
freopen("in.txt","r",stdin);
getline(cin,s);
string tp="";
int flag=0;
for(int i=0;i<s.size();++i)
{
if(s[i]=='"'){
if(flag==0){
tp.clear();
flag=1;
}
else if(flag==1){
ans.push_back(tp);
flag=0;
}
}
else if(s[i]!=','){
tp+=s[i];
}
}
// cout<<ans.size()<<endl;
// for(int i=0;i<10;++i){
// cout<<ans[i]<<endl;
// }
sort(ans.begin(),ans.end());
long long sum=0;
for(int i=0;i<ans.size();++i){
long long tmp=0;
for(int j=0;j<ans[i].size();++j){
tmp+=ans[i][j]-'A'+1;
}
sum+=tmp*(i+1);
}
cout<<sum<<endl;
return 0;
}
23
#include<bits/stdc++.h>
using namespace std;
const int maxn=30010;
vector<int> ans[maxn];
vector<int> bns;
bool vis[maxn];
int main()
{
for(int i=1;i<maxn;++i){
ans[i].push_back(1);
for(int j=2;j<=int(sqrt(i)+0.5);++j){
if(i%j==0) {
ans[i].push_back(j);
if(j!=i/j)ans[i].push_back(i/j);
}
}
}
for(int i=1;i<maxn;++i){
//cout<<i<<" : ";
int sum=0;
for(int j=0;j<ans[i].size();++j){
//cout<<ans[i][j]<<' ';
sum+=ans[i][j];
}
if(sum>i) bns.push_back(i);
//cout<<endl;
}
cout<<bns.size()<<endl;
// for(int i=0;i<bns.size();++i){
// cout<<bns[i]<<endl;
// }
for(int i=0;i<bns.size();++i){
for(int j=i;j<bns.size();++j){
if(bns[i]+bns[j]<maxn) vis[bns[i]+bns[j]]=true;
}
}
int sum=0;
int num=0;
for(int i=1;i<maxn;++i){
if(!vis[i]) sum+=i,++num;
}
cout<<num<<" "<<sum<<endl;
return 0;
}
24
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
typedef long long ll;
ll factorial[maxn];
int n;
ll x;
//O(n^2) x散列值(从0开始) a[] 散列值对应的排列
void int_To_Array(ll x,int a[maxn])
{
bool used[maxn];
int i,j;
ll temp;
for(i=1;i<=n;++i) used[i]=false;
for(i=1;i<=n;++i){
temp=x/factorial[n-i];
for(j=1;j<=n;++j) if(!used[j]){
if(temp==0) break;
--temp;
}
a[i]=j;
used[j]=true;
x%=factorial[n-i];
}
}
//O(n^2) a[] 给定的排列 x散列值(从0开始)
ll array_to_int(int a[maxn])
{
int i,j;
ll ans=0,temp;
for(i=1;i<=n;++i){
temp=a[i]-1;
for(j=1;j<i;++j) if(a[j]<a[i]) --temp;
ans+=factorial[n-i]*temp;
}
return ans;
}
void init()
{
factorial[0]=factorial[1]=1;
for(int i=2;i<=19;++i){
factorial[i]=factorial[i-1]*i;
}
}
int ans[maxn];
int main()
{
init();
cin>>n>>x;
//序号x从0开始
int_To_Array(x,ans);
for(int i=1;i<=n;++i) cout<<ans[i]<<' ';
// cout<<endl;
//
// cout<<array_to_int(ans)<<endl;
return 0;
}
25
#include<bits/stdc++.h>
using namespace std;
const int maxn=10000;
const int ten[4]={1,10,100,1000};
struct BigNumber{
int d[maxn];
BigNumber (string s)
{
int len=s.size();
d[0]=(len-1)/4+1;
int i,j,k;
for(int i=1;i<maxn;++i) d[i]=0;
for(int i=len-1;i>=0;--i){
j=(len-i-1)/4+1;
k=(len-i-1)%4;
d[j]+=ten[k]*(s[i]-'0');
}
while(d[0]>1 && d[d[0]]==0) --d[0];
}
BigNumber(){
*this=BigNumber(string("0"));
}
string to_string(){
string s("");
int i,j,temp;
for(i=3;i>=1;--i) if(d[d[0]]>=ten[i]) break;
temp=d[d[0]];
for(j=i;j>=0;--j){
s=s+(char)(temp/ten[j]+'0');
temp%=ten[j];
}
for(i=d[0]-1;i>0;--i){
temp=d[i];
for(j=3;j>=0;--j){
s=s+(char)(temp/ten[j]+'0');
temp%=ten[j];
}
}
return s;
}
};
BigNumber operator + (const BigNumber &a,const BigNumber &b){
BigNumber c;
c.d[0]=max(a.d[0],b.d[0]);
int i,x=0;
for(i=1;i<=c.d[0];++i){
x=a.d[i]+b.d[i]+x;
c.d[i]=x%10000;
x/=10000;
}
while(x!=0){
c.d[++c.d[0]]=x%10000;
x/=10000;
}
return c;
}
int main()
{
BigNumber f[2];
f[0]=BigNumber("1");
f[1]=BigNumber("1");
//cout<<f[0].to_string()<<' '<<f[1].to_string()<<endl;
int index=2;
BigNumber ff;
//ff=f[0]+f[1];
//cout<<ff.to_string()<<endl;
while(ff.to_string().size()<1000)
{
ff=f[0]+f[1];
//cout<<ff.to_string()<<endl;
index++;
f[0]=f[1];
f[1]=ff;
}
cout<<index<<endl;
return 0;
}
note that fn=ϕn−ψn5√ f n = ϕ n − ψ n 5 where ϕ=1+5√2 ϕ = 1 + 5 2 and ψ=1−5√2 ψ = 1 − 5 2
and |ψ|<1 | ψ | < 1 so when n→∞,ψ→0 n → ∞ , ψ → 0
so we have ϕn5√≥10999 ϕ n 5 ≥ 10 999
using natural logarithms
code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num_dig;
long double psi=(sqrt(5)+1)/2;
num_dig=1000;
long double ans=(log(sqrt(5))+log(10)*(num_dig-1))/log(psi);
cout<<setprecision(12)<<ans<<endl;
cout<<ceil(ans)<<endl;
return 0;
}