#include<bits/stdc++.h>
using namespace std;
int f(int x){if(x<=3)return 1; int a=1,b=1,c=1,res;for(int i=4;i<=x;i++){res=(a+b+c)%10000;a=b;b=c;c=res;}return res;}
int main(){cout<<f(20190324);}
#include <bits/stdc++.h>
using namespace std;constint MAXN =100, MAXM =100;constint f[4]={1,0,0,-1};constint g[4]={0,-1,1,0};const char* s ="DLRU";
char a[MAXN][MAXM];int r[MAXN][MAXM];
typedef pair<int,int> P;int N, M;
void print(int x,int y){if(x !=1|| y !=1){int t = r[x][y];print(x - f[t], y - g[t]);cout << s[t];}}
void solve(){queue<P> que; que.push(P(1,1)); a[1][1]='1';while (!que.empty()){int x = que.front().first, y = que.front().second; que.pop();for(int i =0; i <4;++i){int nx = x + f[i], ny = y + g[i];if(a[nx][ny]=='0'){a[nx][ny]='1';que.push(P(nx, ny));r[nx][ny]= i;}}}print(N, M);}intmain(){//cin >> N >> M;N =30, M =50;memset(a,'1',sizeof(a));for(int i =1; i <= N;++i)scanf("%s",&a[i][1])/*, a[i][N + 1] = '1'*/;solve();return0;}
【評測用例規(guī)模與約定】 對于20% 的評測用例,1 ≤ n ≤ 10 1 \leq n \leq 101≤n≤10。 對于50% 的評測用例,1 ≤ n ≤ 100 1 \leq n \leq 1001≤n≤100。 對于80% 的評測用例,1 ≤ n ≤ 1000 1 \leq n \leq 10001≤n≤1000。 對于所有評測用例,1 ≤ n ≤ 10000 1 \leq n \leq 100001≤n≤10000。
#include<bits/stdc++.h>
using namespace std;
int isok(int x){while(x){if(x%10==2||x%10==0||x%10==1||x%10==9)return 1;x/=10;}return 0;}
int main(){int n; cin>>n; int sum=0; for(int i=1;i<=n;i++){if(isok(i)){sum+=i;}}cout<<sum;return 0;}
七、完全二叉樹的權值
給定一棵包含N 個節(jié)點的完全二叉樹,樹上每個節(jié)點都有一個權值,按從上到下、從左到右的順序依次是A 1 , A 2 , . . . , A N A_{1}, A_{2}, …, A_{N}A 1 ? ,A 2 ? ,…,A N ? ,如下圖所示: 現(xiàn)在小明要把相同深度的節(jié)點的權值加在一起,他想知道哪個深度的節(jié)點權值之和最大?如果有多個深度的權值和同為最大,請你輸出其中最小的深度。 注:根的深度是1。
【輸入格式】 第一行包含一個整數(shù)N。 第二行包含N 個整數(shù)A 1 , A 2 【輸出格式】 輸出一個整數(shù)代表答案。
【樣例輸入】 7 1 6 5 4 3 2 1
【樣例輸出】 2 【評測用例規(guī)模與約定】 對于所有評測用例,1≤N≤100000,? 100000 ≤ A i ≤ 100000
3-100000-99999-99999
答案 13-100000-49999-49999
答案2#include<bits/stdc++.h>
using namespace std;
int tree[100001];
int sum[17]={0};
int main(){int n;cin>>n;int c=0;int deep=0;while(c<n){deep++;c+=pow(2.0,(deep-1));}for(int i=1;i<=n;i++){cin>>tree[i];}int maxdeep=1;int max=-100000;//一定要將max初始為<= -100000 因為題目要求最小是這個 且題目會有負數(shù)for(int i=1;i<=deep;i++){//層號 for(int j=pow(2.0,i-1);j<pow(2.0,i)&&j<=n;j++){//j是每個節(jié)點的下標 每層節(jié)點的范圍是2^(i-1)--2^i-1從每層第一個數(shù)開始 ,如第二層第一個編號2 2^1 三層第一個編號4 2^2 (層號-1)^2sum[i]+=tree[j];}if(sum[i]>max) //必須大于 不是大于等于 因為這樣即使權值同 層數(shù)也是小的層數(shù)不會更新 {max=sum[i];maxdeep=i;}}cout<<maxdeep;return 0;}
八: 等差數(shù)列
時間限制: 1.0s 內存限制: 256.0MB 本題總分:20 分 【問題描述】 數(shù)學老師給小明出了一道等差數(shù)列求和的題目。但是粗心的小明忘記了一 部分的數(shù)列,只記得其中 N 個整數(shù)。 現(xiàn)在給出這 N 個整數(shù),小明想知道包含這 N 個整數(shù)的最短的等差數(shù)列有 幾項? 【輸入格式】 輸入的第一行包含一個整數(shù) N。 第二行包含 N 個整數(shù) A 1 ,A 2 ,··· ,A N 。(注意 A 1 ~ A N 并不一定是按等差數(shù) 列中的順序給出) 【輸出格式】 輸出一個整數(shù)表示答案。 【樣例輸入】 5 2 6 4 10 20 【樣例輸出】 10 【樣例說明】 包含 2、6、4、10、20 的最短的等差數(shù)列是 2、4、6、8、10、12、14、16、18、20。 思路:將給定的數(shù)字進行排序,公差應該是排序之后求出所有相鄰數(shù)字之間差值的最大公約數(shù)。 同樣注意公差為 0 時的處理
時間限制: 1.0s 內存限制: 256.0MB 本題總分:25 分 【問題描述】 給定 N 個加號、M 個減號以及 N + M + 1 個整數(shù) A 1 ,A 2 ,··· ,A N+M+1 ,小 明想知道在所有由這 N 個加號、M 個減號以及 N + M +1 個整數(shù)湊出的合法的 后綴表達式中,結果最大的是哪一個? 請你輸出這個最大的結果。 例如使用1 2 3 + -,則 “2 3 + 1 -” 這個后綴表達式結果是 4,是最大的。 【輸入格式】 第一行包含兩個整數(shù) N 和 M。 第二行包含 N + M + 1 個整數(shù) A 1 ,A 2 ,··· ,A N+M+1 。 【輸出格式】 輸出一個整數(shù),代表答案。 【樣例輸入】 1 1 1 2 3 【樣例輸出】 4 【評測用例規(guī)模與約定】 對于所有評測用例,0 ≤ N, M ≤ 100000,?10 9 ≤ A i ≤ 10 9 。
如果只有 + 、- 運算符,那么所有的數(shù)字都可以看成是相加的,-運算符可以看成負號。那么題目就可以看成有 N + M + 1 個數(shù)字進行相加,但是必須要有 M 個數(shù)字變成其本身的相反數(shù),我們很容易想到可以把負數(shù)變成它的相反數(shù),就成了正數(shù),順序應該是先將絕對值最大的負數(shù)變成正數(shù),再是其他的數(shù)字。我們還需要討論負數(shù)的個數(shù)和 M 的關系:1、給定的數(shù)字本身中負數(shù)的個數(shù)小于 M,這種情況下剩下絕對值最小的幾個負數(shù)。2、給定的數(shù)字本身中負數(shù)的個數(shù)大于 M, 這種情況和 1 相似。3、給定的數(shù)字本身中負數(shù)的個數(shù)等于 M,這種情況全是正數(shù),皆大歡喜。最后做加法就行了。下面是代碼: