牛客寒假算法基礎集訓營2
https://ac.nowcoder.com/acm/contest/327#question
D.處女座與重修費
題目描述
期末考試結束了,處女座發現很多人掛了大物,只能等著第二年重修,還要交400元的重修費。處女座突然想起有個學長和他講過,如果學校哪一年缺錢了,那一年的大物試卷就會特別難。現在處女座有了所有人的成績,處女座想知道如果所有掛科的人都在第二年重修,學校能賺多少重修費?
掛科是指一門課的分數小於60分。輸入描述:
第一行一個整數n,表示考試的人數。
第二行n個整數,表示每個人的成績。
1<=n<=10000
學生的成績為0-100(包括0和100)之間的整數
輸出描述:
一行,學校能賺的重修費用
輸入
復制4 60 56 100 59
輸出
復制800
代碼:
#include <bits/stdc++.h> using namespace std; int N; int main() { scanf("%d", &N); int sum =0; for(int i = 0; i < N; i ++) { int x; scanf("%d", &x); if(x >= 0 && x < 60) sumView Code++; } printf("%d\n", sum * 400); return 0; }
G.處女座與復讀機
題目描述
一天,處女座在牛客算法群裏發了一句“我好強啊”,引起無數的復讀,可是處女座發現復讀之後變成了“處女座好強啊”。處女座經過調查發現群裏的復讀機都是失真的復讀機,會固定的產生兩個錯誤。一個錯誤可以是下面的形式之一:
1. 將任意一個小寫字母替換成另外一個小寫字母
2. 在任意位置添加一個小寫字母
3. 刪除任意一個字母
處女座現在在群裏發了一句話,他收到了一個回應,他想知道這是不是一個復讀機。
輸入描述:
兩行
第一行是處女座說的話s
第二行是收到的回應t
s和t只由小寫字母構成且長度小於100
輸出描述:
如果這可能是一個復讀機輸出”YES”,否則輸出”NO”示例1
輸入
復制abc abcde
輸出
復制YES
說明
abc->abcd->abcde示例2
輸入
復制abcde abcde
輸出
復制YES
說明
abcde->abcdd->abcde
備註:
只要能經過兩步變換就從s得到t就有可能是復讀機。
代碼:
#include <bits/stdc++.h> using namespace std; string s, t; int minDistance(string word1, string word2) { int row = word1.size(); int col = word2.size(); vector<vector<int> > dp(row + 1, vector<int>(col + 1, 0)); for (int i = 1; i <= row; i ++) dp[i][0] = i; for (int j = 1; j <= col; j ++) dp[0][j] = j; for (int i = 1; i <= row; i ++) { for (int j = 1; j <= col; j ++) { if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1]; else dp[i][j] = min(min(dp[i - 1][j - 1] + 1,dp[i - 1][j] + 1), dp[i][j - 1] + 1); } } return dp[row][col]; } int main() { cin >> s >> t; int ans = minDistance(s, t); if(ans <= 2) printf("YES\n"); else printf("NO\n"); return 0; }View Code
H.處女座的測驗(一)
鏈接:https://ac.nowcoder.com/acm/contest/327/H
來源:牛客網
題目描述
處女座進行了一場c語言的考試,要求很簡單,輸出2000個正整數,並且滿足以下條件:
1. 任意兩個數互質
2. 任意兩個數x,y,滿足,其中為n的因子的個數舉例:6的因子有1,2,3,6,所以τ(6)=4τ(6)=4
輸入描述:
本題沒有輸入
輸出描述:
2000行,每行一個正整數
輸出的每個整數都必須在1-4*108之間 如果有多組答案,輸出任意一組即可。
代碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 50000; bool visit[maxn]; int prime[maxn]; void init_prim() { memset(visit, true, sizeof(visit)); int num = 0; for (int i = 2; i <= maxn; ++i) { if (visit[i] == true) { num++; prime[num] = i; } for (int j = 1; ((j <= num) && (i * prime[j] <= maxn)); ++j) { visit[i * prime[j]] = false; if (i % prime[j] == 0) break; } } } int main() { init_prim(); for(int i = 1; i <= 2000; i ++) { cout << prime[4000 - i] * prime[i] << endl; } return 0; }View Code
J.處女座的期末復習
鏈接:https://ac.nowcoder.com/acm/contest/327/J
來源:牛客網
題目描述
快要期末考試了,處女座現在有n門課程需要考試,每一門課程需要花ai小時進行復習,考試的起始時間為bi,處女座為了考試可以不吃飯不睡覺,處女座想知道他能否復習完所有的科目(即在每一門考試之前復習完該科目)。每一門課的考試時間都為兩小時。
輸入描述:
第一行一個整數n
第二行n個整數a1,a2,…,an,表示每門課需要復習的時間
第三行n個整數b1,b2,…,bn,表示每門課考試的時間
1<=n<=105
0<=ai<=109 0<=bi<=109輸出描述:
如果處女座能復習完,輸出”YES”,否則輸出”NO”示例1
輸入
復制3 0 1 1 2 6 4
輸出
復制YES
說明
在0-1小時復習第2門課,
在1-2小時復習第3門課,
在2-4小時考第1門課,
在4-6小時考第3門課,
在6-8小時考第2門課
備註:
考試時不能復習,保證考試時間不會重疊。
復習可以拆開,只要復習時間夠了即可。
代碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int N; struct Node{ int a, b; }node[maxn]; bool cmp(const Node& aa, const Node& bb) { if(aa.b != bb.b) return aa.b < bb.b; else return aa.a < bb.a; } int main() { scanf("%d", &N); for(int i = 0; i < N; i ++) scanf("%d", &node[i].a); for(int i = 0; i < N; i ++) scanf("%d", &node[i].b); bool flag = true; sort(node, node + N, cmp); int sum = 0; for(int i = 0; i < N; i ++) { sum += node[i].a; if(sum <= node[i].b) continue; else { flag = false; break; } } if(flag) printf("YES\n"); else printf("NO\n"); return 0; }View Code
今天下午的比賽寫出來四道題!
Be 主要回來繼續擼題了!要加油!!!
FHFHFH
牛客寒假算法基礎集訓營2