2018年,牛客網小白月賽5

第一次啊,補題,希望大佬批評。

題目按我補題順序來的。

https://www.nowcoder.com/acm/contest/135#question

H? 題

最大公倍數

題意:給出兩個數,求最大公倍數

歐幾里德算法算出最大公約數k;

然后算出。最大公倍數即可

代碼如下:

#include<iostream>
#define ll long long
using namespace std;
ll gcd(ll a, ll b)
{
?return b == 0 ? a: gcd(b, a%b);
}
int main()
{
?ll n, m;
?cin >> n >> m;
?ll kk = gcd(n, m);
?cout << (n / kk)*(m / kk)*kk << endl;
?return 0;
}

?

J 題? time?

題意:

給出一個時間,比如23:32,得出不是它本生的上一個和下一個回文時間,(回文時間指的是:ab:ba這種格式)

思路一:

模擬:直接一分一分的減去,得到下一個回文時間,一分一分的加得到上一個時間。不過,要仔細些不然會在這里出錯。 ? ? ? ? ? ? ? ? ? ? ? ?? 然后,寫一個回文的判斷就可以了。

代碼如下:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
?int a, b,h,m;
?scanf("%d:%d", &a, &b);
?//上一個時刻
?h = a;?m = b-1;
?while (1)
?{
??if (h == ((m % 10) * 10 + m / 10))
??{
???cout << h << ":" << m<<endl;
???break;
??}
??m--;
??if (m < 0)
??{
???m += 60;?h--;?if (h < 0)h += 24;
??}
?}
?h = a;?m = b+1;
?while (1)
?{
??if (h == ((m % 10) * 10 + m / 10))
??{
???cout << h << ":" << m<<endl;
???break;
??}
??m++;
??if (m >= 60)
??{
???m -= 60;?h++;?if (h >= 24)h -= 24;
??}
?}
}

思路二:

打表

因為:回文時鐘的種數只有16種(注意:06:60不符合)所以可以建一個結構體存下小時h和分m和總的分h*60+m;注意一下0:0是24*60所以注意一下就可以了,直接把所給的時間在這個數組中找一下第一個比它大的就行(注意:0:0)

代碼略

?

I? 題

題意:

給你一個數組存入數字,然后又n次操作,每次對 l 到 r 區域進行每個數字加或減去d。然后,輸出x到y區域的所有數字之和。

思路:

例子:

建一個數組記錄操作數sum[ ]只操作一次:從4到6加7,則sum[4] + =7;sum[6+1] - =7;? 然后就for (int i = 1; i <= n; i++) ?? sum[i] += sum[i - 1];? 是不是在4到6之間,sum都是7了

如果是4到6減去7, 則sum[4] - = -7;sum[6+1] + =7;然后就for (int i = 1; i <= n; i++) ?? sum[i] += sum[i - 1];? 是不是在4到6之間,sum都是? -7 了.

那么多組操作呢?

先把這段代碼放上來;

while (m--)
?{
??scanf("%d%d%d%d", &a, &b, &c, &d);
??if (a == 0) sum[b] += d, sum[c + 1] -= d;
??else sum[b] -= d, sum[c + 1] += d;
?}
?for (int i = 1; i <= n; i++)
??sum[i] += sum[i - 1];

是不是擔心,這樣會出錯。其實不用的。剛剛一次操作是 ?sum[4] + =7;sum[6+1] - =7或則 ?sum[4] - = -7;sum[6+1] + =7? 多組操作會影響每一組操作的獨立性嗎? 答案是不會。你可以把它看做是這樣的代碼;

for (int i = 0; i < t; i++)
{
?scanf("%d%d%d%d", &a, &b, &c, &d);
?if (a == 0) sum[i][b] += d, sum[i][c + 1] -= d;
?else sum[i][b] -= d, sum[i][c + 1] += d;
?for (int j = 1; j <= n; j++)
??sum[i][j] += sum[i][j - 1];
}
for (int i = 1; j <= n;j++)
for (int j = 0; j < t; j++)
{
?num[j] += sum[j][i];
}

但是,每一次的操作是獨立的(相當于數學中數據等價一樣),所以,就把多組操作一起處理了。

代碼如下:

?

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll num[1000004], sum[1000004];

ll ans = 0;
int main()
{
?int n, m, a,b,c,d, x,y;
?scanf("%d%d", &n, &m);
?for (int i = 1; i <= n; i++)
??scanf("%lld", &num[i]);
?while (m--)
?{
??scanf("%d%d%d%d", &a, &b, &c, &d);
??if (a == 0) sum[b] += d, sum[c + 1] -= d;
??else sum[b] -= d, sum[c + 1] += d;
?}
?for (int i = 1; i <= n; i++)
??sum[i] += sum[i - 1];
?scanf("%d%d", &x, &y);
?for (int i = x; i <= y; i++)
??ans += sum[i]+num[i];
?cout << ans << endl;
}

?

?

F? 題

這個題讓我想起了各種切割(數學)

總結一下:

n條直線最多分平面問題

n(n+1)/2+1;

折線分平面

2*n^2-n+1;

封閉曲線分平面

n^2-n+2;

平面分割空間

(n^3+5n)/6+1;

N個三角形分割平面

3*n^2-3*n+2

在一個圓上有n個點,將n個點兩兩相連分割圓

1 + n*(n - 1) / 2 + n*(n - 1)*(n - 2)*(n - 3) / 24

具體證明就不說了,(線段和射線決定對應一個區域(特別的復雜的都是遞推了))

題意:就不用說了

思路:直接套數學公式

代碼如下:

#include<iostream>
#define ll long long
using namespace std;
int main()
{
?ll n;
?while (cin >> n)
?{
??cout << 1 + n*(n - 1) / 2 + n*(n - 1)*(n - 2)*(n - 3) / 24 << endl;
?}
?return 0;
}

?

A? 題 ? ?? 無關

題意:給你一個集合,集合中元素都是素數(其實只要兩兩互質就行),問你在一個從? l 到 r 范圍中,有幾個數不被集合中的任何一個元素整除,(不是,他們的倍數).

思路:

找到他們倍數的個數n就可以了,(正難則反(高中))則答案為 (r-l+1)-n;

那么,直接變成在 1到 l和1 到 r的個數,再相減,就是最后答案了。

額,如何找1? 到 L 的個數呢?

L/a就等于a在1到L的倍數的個數了

那么怎么找既是a又是b的倍數呢?直接 L/(a*b);注意:L/(a*b)=>L/a / b;也就是說,可以在不同時刻來除,不影響結果的。

這樣就可以找集合中各個元素的倍數個數n1, 兩個元素乘積的倍數n2, 三個......n3,? 四個,,,,,n4

然后用概率論中的概率公式? s=f(a)+f(b)+f(c)+......(-1)^(n-1)(f(n));(隨機時間概率公式,我打了大概的樣子)

中間:因為肯定要用到集合所形成的子集的枚舉:怎么枚舉呢?

比如:假如有3個元素{a,b,c}那么有八個子集(子集個數公式2^n, 非空子集和真子集公式2^n-1,非空真子集2^n-2):

{},{a}, {b}, {c},{a,b},{a,c}, {b,c}, {a,b,c};? 元素個數為3

000  {}

001  {  ,  ,a}

010  {  ,b,  }

100  {c,  ,   }

011  {  ,b  ,a}

101  ......

110  ......

111  {c,  b,  a}

這樣不就可以表示成 0——7,?

好了,

代碼是怎樣,不多說

f? 用來表示(-1)^(n-1)

1<<n(n是元素個數)表示子集個數,怎樣把每個子集表示一遍。

for (ll i = 1; i < (1 << n); i++)
?{
??temp = m;?f = -1;
??for (int j = 0; j < n; j++)
??{
???if ((i >> j) & 1==1)
???{
????temp /= a[j];
????f *= -1;
???}
??}
??res += temp*f;
?}

?

總的代碼如下:

#include<iostream>
#include<stdio.h>
#define ll long long
using namespace std;
ll a[105];
ll l, r, n;
ll ans(ll m)
{
?ll res = 0;
?ll f, temp;
?for (ll i = 1; i < (1 << n); i++)
?{
??temp = m;?f = -1;
??for (int j = 0; j < n; j++)
??{
???if ((i >> j) & 1==1)
???{
????temp /= a[j];
????f *= -1;
???}
??}
??res += temp*f;
?}
?return m-res;
}
int main()
{
?scanf("%lld%lld%lld", &l, &r, &n);
?for (int i = 0; i < n; i++)
?scanf("%lld", &a[i]);
?ll res = ans(r) - ans(l-1);
?printf("%lld\n", res);
}

專門講集合子集的博客

https://blog.csdn.net/yzl20092856/article/details/39995085

?

D 題

這不是我重點的題目:

注意一下優化就可以了,本質是用到? 一個階乘中有幾個5,有多少個5就有多少個0

代碼如下:

#include<iostream>
using namespace std;

long long f(long long n){
?long long sum = 0;
?while (n){
??sum += n / 5;
??n /= 5;
?}
?return sum;
}
int main(){
?long long n;
?long long sum = 0;
?cin >> n;
?for (int i = 5; i <= n; i++){
??if (i + 5 <= n){
???sum += 5 * f(i);
???i += 4;
??}
??else{
???sum += f(i)*(n - i + 1);
???i = n;
??}
?}
?cout << sum;
?return 0;
}

?

emmmmm,這道題,有點神,讀題。大佬讀題都是說小魚吃大魚,維護了平衡。我讀的是坐一天月子不吃東西。。。反正,都是看代碼猜題意:

也就是,每過2天,有一天不能吃東西

就是n-n/3;

代碼如下:

#include<stdio.h>
#define ll long long
int main()
{
?ll n;
?while (scanf("%lld", &n)!=EOF)
?{
??printf("%lld\n", n - n / 3);
?}
}

?

轉載于:https://www.cnblogs.com/ALINGMAOMAO/p/9362677.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

292. Nim 游戲

292. Nim 游戲 你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a; 桌子上有一堆石頭。你們輪流進行自己的回合&#xff0c;你作為先手。每一回合&#xff0c;輪到的人拿掉 1 - 3 塊石頭。拿掉最后一塊石頭的人就是獲勝者。 假設你們每一步都是最優解。請編寫一個函…

0710 mux協議的作用(ppp撥號時如何和gprs進行at指令交互)

ppp撥號使gprs上網的同時如何和gprs模塊進行at指令的交互&#xff0c;這是一個問題。 在linux中&#xff0c;ppp撥號上網是內核中支持的&#xff0c;只需要在內核配置中選上。 ppp撥號的方式使gprs進行上網與at指令使gprs上網&#xff0c;兩者之間有不同。ppp是一個將用at指令使…

爬蟲筆記(十二)——瀏覽器偽裝技術

為什么要進行瀏覽器偽裝技術&#xff1f; 有一些網站為了避免爬蟲的惡意訪問&#xff0c;會設置一些反爬蟲機制&#xff0c;對方服務器會對爬蟲進行屏蔽。常見的飯爬蟲機制主要有下面幾個&#xff1a; 1. 通過分析用戶請求的Headers信息進行反爬蟲 2. 通過檢測用戶行為進行反…

650. 只有兩個鍵的鍵盤

650. 只有兩個鍵的鍵盤 最初記事本上只有一個字符 ‘A’ 。你每次可以對這個記事本進行兩種操作&#xff1a; Copy All&#xff08;復制全部&#xff09;&#xff1a;復制這個記事本中的所有字符&#xff08;不允許僅復制部分字符&#xff09;。Paste&#xff08;粘貼&#x…

Codeforces 626F Group Projects (DP)

題目鏈接 8VC Venture Cup 2016 - Elimination Round 題意 把$n$個物品分成若干組&#xff0c;每個組的代價為組內價值的極差&#xff0c;求所有組的代價之和不超過$k$的方案數。 考慮DP&#xff0c;$f[i][j][k]$表示考慮到第$i$個物品的時候&#xff0c;還有$j$組尚未分配完…

《活出生命的意義》:人生有何意義?

在你一生的閱讀體驗中&#xff0c;如果能夠有一本書&#xff0c;它的某個章節、某種思想、或者某句話能夠觸動你的內心&#xff0c;解決你的困惑&#xff0c;甚至能改變你的命運&#xff0c;那這樣的一本書你一定要視如珍寶&#xff0c;經常翻閱&#xff0c;維克多弗蘭克爾的《…

右鍵添加git-bash

主要&#xff1a; 右鍵如果沒有git-bash&#xff0c;如何給右鍵手動添加 前面對右鍵存在git-bash但使用出現問題的解決&#xff0c;也想到如果右鍵都沒有&#xff0c;該如何給右鍵添加了&#xff0c;于是接著記錄下如何添加的過程&#xff1a; 情形&#xff1a; 手動給右鍵添加…

Weblogic的緩存

2019獨角獸企業重金招聘Python工程師標準>>> 最近遇到一個關于weblogic緩存的問題。再把war包放入到weblogic指定目錄啟動以后&#xff0c;訪問頁面信息沒有更新。最后發現是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件沒有清除&…

725. 分隔鏈表

725. 分隔鏈表 給你一個頭結點為 head 的單鏈表和一個整數 k &#xff0c;請你設計一個算法將鏈表分隔為 k 個連續的部分。 每部分的長度應該盡可能的相等&#xff1a;任意兩部分的長度差距不能超過 1 。這可能會導致有些部分為 null 。 這 k 個部分應該按照在鏈表中出現的順…

LAMP介紹-MySQL安裝

2019獨角獸企業重金招聘Python工程師標準>>> LAMP: linux-apache-mysql-php &#xff08;安裝方式有&#xff1a;rpm&#xff0c;源碼&#xff0c;二進制免編譯&#xff09; linux-操作系統 apache-web服務軟件&#xff08;httpd&#xff09; mysql-存儲數據庫 php…

總結verilog產生隨機數的$random和seed

$random(seed)是verilog中最簡單的產生隨機數的系統函數。 在調用系統函數$random(seed)時&#xff0c;可以寫成三種樣式&#xff1a;1&#xff09;$random&#xff0c;2&#xff09;$random()&#xff0c;3&#xff09;$random(seed)。下面分別說明&#xff1a; 1&#xff09;…

326. 3的冪

326. 3的冪 給定一個整數&#xff0c;寫一個函數來判斷它是否是 3 的冪次方。如果是&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 整數 n 是 3 的冪次方需滿足&#xff1a;存在整數 x 使得 n 3x 示例 1&#xff1a;輸入&#xff1a;n 27 輸出&#x…

Lottie 站在巨人的肩膀上實現 Android 酷炫動畫效果

說到動畫效果&#xff0c;一般都會感到很高端&#xff0c;感覺很酷炫&#xff1b;而小菜技術有限&#xff0c;稍復雜的動畫效果也需要很多時間處理&#xff0c;但是遇到時間緊任務重的情況該怎么辦呢&#xff1f;那就嘗試一下 Lottie 吧&#xff0c;酷炫的動畫集成卻相當簡單&a…

正則表達式(讀書過程所記未整理)

\d 表示一位數字字符 \d{3} 表示3個數字字符 匹配電話比如400-400-1118 import re phone_number re.compile(r\d{3}-\d{3}-\d{4}) mo phone_number.search(rfor a number is 400-400-4000) print(mo.group()) ************************************************************…

java1

不知道為啥粘貼的圖片是一堆編碼。。。。 如何插入圖片 博客后后臺MarkDown編輯器上只有一個按鈕&#xff0c;就是用來上傳圖片并自動插入MarkDown標記的&#xff0c;超級好用 &#xff08;一&#xff09;學習總結 1.在java中通過Scanner類完成控制臺的輸入&#xff0c;查閱JDK…

430. 扁平化多級雙向鏈表

430. 扁平化多級雙向鏈表 多級雙向鏈表中&#xff0c;除了指向下一個節點和前一個節點指針之外&#xff0c;它還有一個子鏈表指針&#xff0c;可能指向單獨的雙向鏈表。這些子列表也可能會有一個或多個自己的子項&#xff0c;依此類推&#xff0c;生成多級數據結構&#xff0c…

PHPstudy搭建本地環境的網頁加載速度慢的解決方案

PHP5.3以上&#xff0c;如果數據庫鏈接地址是localhost&#xff0c;會自動檢測最終的地址是IPV4還是IPV6&#xff0c;所以會比較慢。解決辦法&#xff1a;修改數據庫的鏈接地址&#xff0c;將localhost改為127.0.0.1即可。 原文鏈接&#xff1a;https://chasjd.com/posts/fb433…

標記偏見_分析師的偏見

標記偏見“Beware of the HiPPO in the room” — The risks and dangers of top-down, intuition-based decision making are well known in the business world. Experimentation and data-based decision making become widely acknowledged as the right way to steer a bu…

scott登錄查詢常用語句

一、簡單查詢 1.簡單查詢select * from emp;--查詢表emp中的所有數據select empno as id,ename as name from emp;--查詢表emp中的empno顯示為id&#xff0c;ename顯示為name 2.去除重復select distinct job from emp;--將表emp中的job去重select distinct job,deptno from emp…

CSS結構的基礎認知

css的屬性值與html的屬性值用法不相上下&#xff0c;但是css主要分為內聯樣式表和外聯樣式表。 內聯樣式表用法&#xff1a;在html文件中的《head》頭文件中添加<style></style>標簽&#xff0c;在標簽內添加所需的屬性值&#xff0c;例如&#xff1a;<!DOCTYPE…