2017.5.26暴力賽解題報告

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/27/6914012.html
-Advertisement-
Play Games

預計分數:T1:40AC+60TLE T2:40AC+60TLE T3:10AC+90TLE 總分=90 實際分數:T1:100AC+0TLE T2:80AC+20TLE T3:20AC+80TLE 總分=200 感想:數據水的一逼!! 題目實際難度: T1:提高/提高+ T2:提高+ T3:提高+ ...


預計分數:T1:40AC+60TLE

     T2:40AC+60TLE

       T3:10AC+90TLE

     總分=90

實際分數:T1:100AC+0TLE

     T2:80AC+20TLE

       T3:20AC+80TLE

     總分=200

感想:數據水的一逼!!

題目實際難度:

  T1:提高/提高+

  T2:提高+

  T3:提高+/省選-

我眼中的難度
  T1:普及

  T2:普及-

 

  T3:入門難度

 

 

2039. 樹的統計

★★   輸入文件:counttree.in   輸出文件:counttree.out   簡單對比
時間限制:1 s   記憶體限制:128 MB

【題目描述】

關於樹的統計問題有多種多樣的版本,這裡你需要解決一個比較簡單的問題:對於一棵包含N個節點的有根樹,將所有點從1到N編號後,對於每一個節點v,統計出以v為根的子樹中有多少個點的編號比v小。

 

【輸入格式】

輸入第一行包含一個整數N,以下N行每行包含一個整數,其中第i行的整數表示編號為i的節點的父親節點的編號,根的父親節點編號為0。

【輸出格式】

輸出包含N行,其中第i行給出編號為i的節點的統計結果。

【樣例輸入】

3
2
3
0

【樣例輸出】

0 1 2

【提示】

在此鍵入。

【來源】

20%的數據1<=n<=1000

100%的數據1<=n<=100000

 

上來看了一眼題目難度是兩顆黑星,感覺十分不可做(因為我一般在cogs刷兩星的題目很少一遍不看題解AC)

一開始以為是樹上倍增.樹上DP.RMQ之類的,但是都不會啊。。

無奈只能暴力。

暴力思路:

一:讀入每一個點,記錄他的father,

二:枚舉每一個點,如果他的father不為0且它的father的值比他大,那麼它的father的值就++

正解:

DFS序+樹狀數組

但是看了一下評測記錄我的暴力0.125s秒殺所有正解+暴力=.=

 

 1     #include<iostream>
 2     #include<cstdio>
 3     #include<cstring>
 4     #include<cmath>
 5     using namespace std;
 6     const int MAXN=100001;
 7     int read(int & n)
 8     {
 9         char c='/';int x=0,flag=0;
10         while(c<'0'||c>'9')
11         {c=getchar();
12         if(c=='-')flag=1;}
13         while(c>='0'&&c<='9')
14         {x=x*10+c-48;c=getchar();}
15         if(flag)n=-x;
16         else n=x;
17         return n;
18     }
19     int n,p;
20     int fa[MAXN];
21     int ch[MAXN];
22     int num[MAXN];
23     int main()
24     {
25         freopen("counttree.in","r",stdin);
26         freopen("counttree.out","w",stdout);
27         read(n);
28         for(int i=1;i<=n;i++)
29         {
30             read(p);
31             fa[i]=p;    
32         }
33         for(int i=1;i<=n;i++)
34         {
35             int p=i;
36             while(fa[p]!=0)
37             {
38                 if(fa[p]>i)
39                     num[fa[p]]++;
40                 p=fa[p];
41             }
42         }
43         for(int i=1;i<=n;i++)
44         {
45             printf("%d ",num[i]);
46         }
47         return 0;
48     }

 

1682. [HAOI2014]貼海報

★★☆   輸入文件:ha14d.in   輸出文件:ha14d.out   簡單對比
時間限制:1 s   記憶體限制:256 MB

【題目描述】

Bytetown城市要進行市長競選,所有的選民可以暢所欲言地對競選市長的候選人發表言論。為了統一管理,城市委員會為選民準備了一個張貼海報的electoral牆。

張貼規則如下:

1.electoral牆是一個長度為N個單位的長方形,每個單位記為一個格子;

2.所有張貼的海報的高度必須與electoral牆的高度一致的;

3.每張海報以“A B”表示,即從第A個格子到第B個格子張貼海報;

4.後貼的海報可以覆蓋前面已貼的海報或部分海報。

現在請你判斷,張貼完所有海報後,在electoral牆上還可以看見多少張海報。

【輸入格式】

第一行:     N   M            分別表示electoral牆的長度和海報個數

接下來M行:   Ai   Bi          表示每張海報張貼的位置


【輸出格式】

輸出貼完所有海報後,在electoral牆上還可以看見的海報數。

【樣例輸入】


100 5

1 4

2 6

8 10

3 4

7 10


【樣例輸出】

4

【提示】


【約束條件】

1 0<= N <= 10000000     1<=M<=1000   1<= Ai <= Bi <=10000000

所有的數據都是整數。數據之間有一個空格

上來看了一眼立馬用10min打出了暴力,打完T3的暴力之後回來看了一下這個題感覺是線段樹的裸體

然後用15min寫出了線段樹

但是!!!

線段樹!!

居然!!

比!!

暴力!!

慢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

而且!!

還!!

爆記憶體!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

這就比較尷尬了,望著對拍程式上每次都是暴力先跑完然後線段樹等一秒再出結果的場景,我還能說什麼、、

難道是因為我寫的線段樹太醜了???

=.=

暴力思路:模擬張貼每一個海報

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=10000001;
 7 int n,m,x,y;
 8 int read(int & n)
 9 {
10     char c='/';int x=0,flag=0;
11     while(c<'0'||c>'9')
12     {c=getchar();
13     if(c=='-')flag=1;}
14     while(c>='0'&&c<='9')
15     {x=x*10+c-48;c=getchar();}
16     if(flag)n=-x;
17     else n=x;
18     return n;
19 }
20 int a[MAXN];
21 int vis[MAXN];
22 int now=1;
23 int ans=0;
24 int main()
25 {
26     freopen("a.in","r",stdin);
27     freopen("b.out","w",stdout);
28     read(n);read(m);
29     for(int i=1;i<=m;i++)
30     {
31         read(x);read(y);
32         if(x>y)swap(x,y);
33         for(int j=x;j<=y;j++)
34         a[j]=i;
35     }
36     for(int i=1;i<=n;i++)
37     {
38         if(vis[a[i]]==0&&a[i]!=0)
39         {
40             ans++;
41             vis[a[i]]=1;
42         }
43     }
44     printf("%d",ans);
45     return 0;
46 }
暴力80

正解:老師講了個掃描線但是沒聽懂啊,,,,,so參考了題解的浮水法

首先我們讀入每一個海報的l和r,

然後逆序掃描,預設ans為一,因為最後的一張一定能看見

對於每一個i一直向上枚舉,就像浮水一樣,如果經過不斷的裁剪之後能夠>n的話

ans++

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int MAXN=1001;
 8 int n,m,ans=1;
 9 int vis[MAXN];
10 struct node
11 {
12     int l;
13     int r;
14     int id;
15 }a[MAXN];
16 int read(int & n)
17 {
18     char c='/';int flag=0,x=0;
19     while(c<'0'||c>'9')
20     {if(c=='-')flag=1;
21     c=getchar();}
22     while(c>='0'&&c<='9')
23     {x=x*10+(c-48);
24     c=getchar();}
25     if(flag)n=-x;
26     else n=x;
27 }
28 void water(int ll,int rr,int now,int pos)
29 {
30     if(vis[pos])
31         return ;
32     while(now<=m&&(rr<=a[now].l||ll>=a[now].r))
33     now++;
34     if(now>m)
35     {
36         vis[pos]=1;
37         ans++;
38         return ;
39     }
40     if(ll<a[now].l&&rr>a[now].l)
41         water(ll,a[now].l,now+1,pos);
42     if(rr>a[now].r&&ll<a[now].r)
43         water(a[now].r,rr,now+1,pos);
44     
45 }
46 int main()
47 {
48     freopen("ha14d.in","r",stdin);
49     freopen("ha14d.out","w",stdout);
50     read(n);read(m);
51     for(int i=1;i<=m;i++)
52     {
53         read(a[i].l);
54         read(a[i].r);
55         a[i].r=a[i].r+1;
56         a[i].id=i;
57     }
58     for(int i=m-1;i>=1;i--)
59     {
60         water(a[i].l,a[i].r,i+1,i);
61     }
62     printf("%d",ans);
63     return 0;
64 }
浮水法秒AC

1619. [HEOI2012]採花

★★☆   輸入文件:1flower.in   輸出文件:1flower.out   簡單對比
時間限制:5 s   記憶體限制:128 MB

【題目描述】

蕭薰兒是國的公主,平時的一大愛好是採花。 今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。花園足夠大,容納n朵花,花有c種顏色(用整數1-c表示),且花是排成一排的,以便於公主採花。公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,她不允許最後自己採到的花中,某一顏色的花只有一朵。為此,公主每採一朵花,要麼此前已採到此顏色的花,要麼有相當正確的直覺告訴她,她必能再次採到此顏色的花。由於時間關係,公主只能走過花園連續的一段進行採花,便讓女僕福涵潔安排行程。福涵潔綜合各種因素擬定了m個行程,然後一一向你詢問公主能採到多少朵花(她知道你是編程高手,定能快速給出答案!),最後會選擇令公主最高興的行程(為了拿到更多獎金!)。

【輸入格式】


 第一行四個空格隔開的整數nc以及m接下來一行n個空格隔開的整數,每個數在[1, c]間,第i個數表示第i朵花的顏色。接下來m行每行兩個空格隔開的整數lrl r),表示女僕安排的行程為公主經過第l到第r朵花進行採花。

【輸出格式】

  m行,每行一個整數,第i個數表示公主在女僕的第i個行程中能採到的花的顏色數。

【樣例輸入】

5  3 5
  1  2 2 3 1
  1  5
  1  2
  2  2
  2  3
  3  5
  

【樣例輸出】

2 
  0 0 1 0 
  【樣例說明】
  詢問[1, 5]:公主採顏色為1和2的花,由於顏色3的花只有一朵,公主不採;詢問[1, 2]:顏色1和顏色2的花均只有一朵,公主不採;
  詢問[2, 2]:顏色2的花只有一朵,公主不採;
  詢問[2, 3]:由於顏色2的花有兩朵,公主採顏色2的花;
  詢問[3, 5]:顏色1、2、3的花各一朵,公主不採。
  

【提示】


【數據範圍】

對於100%的數據,1 ≤ n ≤    10^6,c ≤ n,m ≤10^6。


【來源】

 

【題目來源】

耒陽大世界(衡陽八中) OJ 2743

一開始以為這題是線段樹,,後來發現線段樹好像沒有這個功能

然後就想莫隊,看了看時間發現還有一個半小時,以為這道題做不出來了,就打了個暴力去做T2

臨收捲還有二十分鐘左右的時候老師說T3莫隊20分,(後來我用莫隊AC了,,,實力打臉)

暴力思路:暴力

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=100001;
 7 int read(int & n)
 8 {
 9     char c='/';int x=0,flag=0;
10     while(c<'0'||c>'9')
11     {c=getchar();
12     if(c=='-')flag=1;}
13     while(c>='0'&&c<='9')
14     {x=x*10+c-48;c=getchar();}
15     if(flag)n=-x;
16     else n=x;
17     return n;
18 }
19 int num[MAXN];// 查詢 
20 int a[MAXN];// 顏色 
21 int n,fl,m,x,y,p;
22 int query(int x,int y)
23 {
24     int ans=0;
25     memset(num,0,sizeof(num));
26     for(int i=x;i<=y;i++)
27     {
28         num[a[i]]++;
29         if(num[a[i]]==2)
30             ans++;
31     }
32     return ans;
33 }
34 int main()
35 {
36     freopen("1flower.in","r",stdin);
37     freopen("1flower.out","w",stdout);
38     read(n);read(fl);read(m);
39     for(int i=1;i<=n;i++)
40     {
41         read(p);
42         a[i]=p;
43     }
44     for(int i=1;i<=m;i++)
45     {
46         read(x);read(y);
47         printf("%d\n",query(x,y));
48     }
49     return 0;
50 }
暴力

 

 

 

正解:

1.裸莫隊

 1     #include<iostream>
 2     #include<cstdio>
 3     #include<cstring>
 4     #include<cmath>
 5     #include<algorithm>
 6     using namespace std;
 7     const int MAXN=1000001;
 8     int colornum[MAXN],n,color,m,a[MAXN];
 9     int base,pos[MAXN],out[MAXN];
10     struct node
11     {
12         int l,r,id;
13     }q[MAXN];
14     int ans=0;
15     int read(int & n)
16     {
17         char c='/';int flag=0,x=0;
18         while(c<'0'||c>'9')
19         {c=getchar();}
20         while(c>='0'&&c<='9')
21         {x=(x<<3)+(x<<1)+(c-48);
22         c=getchar();}
23         n=x;
24     }
25     inline void dele(int where)
26     {
27         if(colornum[a[where]]==2)
28             ans--;
29         colornum[a[where]]--;
30     }
31     inline void add(int where)
32     {
33         if(colornum[a[where]]==1)
34             ans++;
35         colornum[a[where]]++;
36     }
37     inline int comp(const node & a,const node & b)
38     {
39         if(pos[a.l]==pos[b.l])
40             return a.r<b.r;
41         else return pos[a.l]<pos[b.l];
42     }
43     inline void modui()
44     {
45         int l=1,r=0;
46         for(int i=1;i<=m;++i)
47         {
48             for(;l<q[i].l;++l)
49                 dele(l);
50             for(;l>q[i].l;--l)
51                 add(l-1);
52             for(;r<q[i].r;++r)
53                 add(r+1);
54             for(;r>q[i].r;--r)
55                 dele(r);
56             out[q[i].id]=ans;
57         }
58     }
59     int main()
60     {
61         freopen("1flower.in","r",stdin);
62         freopen("1flower.out","w",stdout);
63         read(n);read(color);read(m);
64         base=sqrt(n);
65         for(int i=1;i<=n;++i)
66             read(a[i]);
67         for(int i=1;i<=n;++i)
68             pos[i]=(i-1)/base+1;
69         for(int i=1;i<=m;++i)
70         {
71             read(q[i].l);
72             read(q[i].r);
73             q[i].id=i;
74         }
75         sort(q+1,q+m+1,comp);
76         modui();
77         for(int i=1;i<=m;++i)
78         {
79             printf("%d\n",out[i]);
80         }
81         return 0;
82     }
莫隊AC

2.因為一個顏色只有出現兩次的時候才會被採

那麼我們可以記錄這個顏色出現的位置,但這個顏色出現的次數達到兩次的時候,我們把這個區間+1

維護區間可以用樹狀數組實現

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int MAXN=1000001;
 8 int a[MAXN];
 9 int lb(int x)
10 {return x&-x;}
11 int read(int & n)
12 {
13     char c='/';int flag=0,x=0;
14     while(c<'0'||c>'9')
15     {if(c=='-')flag=1;
16     c=
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是適配器模式? 適配器模式是一種過渡模式,用於溝通兩個不相容的事物,實現信息交換。 2.適配器模式的目的 使一個對象能夠以一種相對簡單的方式處理多個不同類型的對象,即一個對象相容多個不同類型的對象。例如,電腦接收外部硬體的插口唯一確定,不同尺寸的記憶體卡先插到讀卡器上,再由讀卡器插到唯一確定的 ...
  • 題目描述 在一個園形操場的四周擺放N堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。 試設計出1個演算法,計算出將N堆石子合併成1堆的最小得分和最大得分. 輸入輸出格式 輸入格式: 數據的第1行試正整數N,1≤N≤100,表示有N ...
  • 轉載請出自出處:http://www.cnblogs.com/hd3013779515/ 1.Redis安裝 使用的最新版本為 3.2.9,下載並安裝: 執行make後報錯 從錯誤看原因是缺少gcc,執行yum install gcc。之後再次執行make,還是報錯。 執行make distclea ...
  • 1682. [HAOI2014]貼海報 ★★☆ 輸入文件:ha14d.in 輸出文件:ha14d.out 簡單對比 時間限制:1 s 記憶體限制:256 MB 【題目描述】 Bytetown城市要進行市長競選,所有的選民可以暢所欲言地對競選市長的候選人發表言論。為了統一管理,城市委員會為選民準備了一個 ...
  • ★★ 輸入文件:counttree.in 輸出文件:counttree.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 【題目描述】 【輸入格式】 輸入第一行包含一個整數N,以下N行每行包含一個整數,其中第i行的整數表示編號為i的節點的父親節點的編號,根的父親節點編號為0。 【輸出格式】 ...
  • 誤解一:JavaScript是Java的簡易版 JavaScript是一種在網頁中使用的腳本語言,它的原名叫做LiveScript。JavaScript的語法與Java類似。除此之外,他們再無任何關係。JavaScript的一個子集已經標準化為ECMA-262,它更加緊密地與瀏覽器集成在一起。 誤解 ...
  • 一、MFC的概念和作用 1、什麼是MFC? 全稱:Microsoft Foundation Class Library(微軟基礎類庫) 1-MFC從硬碟存在形式來說就是一個庫(靜態MFC庫、動態MFC庫) 2-MFC從原理來說還是一個程式框架 2、為什麼使用MFC? 基於框架編程,提高工作效率,減少 ...
  • 本文詳細講解Python的命名空間,作用域,以及在使用中的一些常見困惑。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...