本文主要是介绍Wannafly挑战赛9(A、C),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
地址:点击打开链接
A、找一找
思路:
从尾到头找一遍即可。数据有点大,注意用 long long
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#define ll long long
#define inf 0x7f7f7f7f
#define mod 1000000009
#define maxn 1000000
using namespace std;
ll a[maxn +1000];int main(){ll n,x;while (scanf("%lld",&n)!=EOF){memset(a,0,sizeof(a));ll maxx=-1;for(ll i=1;i<=n;i++){scanf("%lld",&x);a[x]++;if (x>maxx)maxx=x;}ll ans=0;for (ll i=1;i<=maxx;i++){if (a[i]){for (ll j=i*2; j<=maxx; j+=i){if (a[j]){ans+=a[i];break;}}}}printf("%lld\n",ans);}return 0;
}
C、列一列
思路:因为数据非常的大,所以关键的一步就是对其取模,然后再进行判断,我这里取得是1e8来进行取模。然后在进行判断。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#define ll long long
#define inf 0x7f7f7f7f
#define maxn 100000+100
#define mod 100000000
using namespace std;
ll f[maxn];ll solve(ll a,ll b){ //快速幂if (b==0) return 1;ll ans=1;ll k=a;while(b){if(b&1) ans=ans*k;k=k*k;b=b/2;}return ans;
}
string s;
int main(){ll i,j,m,z;f[1]=1;f[2]=2;for (i=3;i<maxn;i++){f[i]=(f[i-1]+f[i-2])%mod;}while (cin>>s){ll l=s.length();ll ans=0;for (i=l-1,j=0;i>=0&&j<8;i--,j++){ //关键理解ans=ans+(s[i]-'0')*solve(10,j);}for (i=1;i<maxn;i++){if (ans==f[i]){cout<<i<<endl;}}}return 0;
}
这篇关于Wannafly挑战赛9(A、C)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!