2017-2018 ACM-ICPC, Asia Daejeon Regional Contest

C

有n個節點和m邊條,求一條最長的路徑,該路徑(c1,c2,c3...cn)滿足 不出現重復的節點,ci?和ci+1是鄰居節點,且 ci?的鄰居節點數量小于ci+1的鄰居節點數量。

記憶DFS遍歷,每次遞歸計算的值都保存在數組里,這樣復雜度相當于O(m)

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define ll long long
 4 using namespace std;
 5 const int N = 1e5+10;
 6 vector<int> vs[N];
 7 int MAX, ans[N];
 8 int dfs(int v) {
 9     if(ans[v]!=0) return ans[v];
10     int cnt = 0;
11     for(auto u : vs[v]) {
12         if(vs[u].size() > vs[v].size()) {
13             cnt = max(cnt, dfs(u));
14         }
15     }
16     ans[v] = cnt+1;
17     return cnt+1;
18 }
19 int main() {
20     int n, m, v, u;
21     cin >> n >> m;
22     for(int i = 1; i <= m; i ++) {
23         cin >> v >> u;
24         vs[v].push_back(u);
25         vs[u].push_back(v);
26     }
27     for(int i = 0; i < n; i ++) {
28         dfs(i);
29         MAX = max(MAX, ans[i]);
30     }
31     cout << MAX << endl;
32     return 0;
33 }
View Code

?

D

給定一個數字x,問一直使用x = f(x)這個函數是否可以將x變成1.

f(x) 的定義是對每一位數進行平方求和。簽到題

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define ll long long
 4 using namespace std;
 5 map<int,int> mp;
 6 int f(int x) {
 7     int ans = 0;
 8     while(x) {
 9         int y = x%10;
10         ans += y*y;
11         x /= 10;
12     }
13     return ans;
14 }
15 int main() {
16     int n;
17     cin >> n;
18     while(true) {
19         n = f(n);
20         if(n == 1) return 0*printf("HAPPY\n");
21         if(mp.count(n)) break;
22         mp[n] = 1;
23     }
24     printf("UNHAPPY\n");
25     return 0;
26 }
View Code

?

F

已知邊長和走的步數,求當前的位置。

分而治之。對于當前邊長為n的圖,可以分為四份。

如果在左下角,順時針旋轉了90°,相當于x和y值交換下。

如果在右下角,逆時針旋轉了90°,相當于x和y值交換下,對稱看。

如果在左上角,y值加n/2。

如果在右上角,x值和y值都加n/2。

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define ll long long
 4 using namespace std;
 5 const int N = 1e5+10;
 6 struct Point{
 7     int x, y;
 8 };
 9 Point dfs(int n, int m) {
10     Point a;
11     if(n == 2) {
12         if(m == 0) a.x = 1, a.y = 1;
13         else if(m == 1) a.x = 1, a.y = 2;
14         else if(m == 2) a.x = 2, a.y = 2;
15         else if(m == 3) a.x = 2, a.y = 1;
16         return a;
17     }
18     int ans = n*n/4;
19     int cnt = m%ans;
20     a = dfs(n/2, cnt);
21     if(m < ans) {
22         swap(a.x, a.y);
23     } else if(m < 2*ans) {
24         a.y += n/2;    
25     } else if(m < 3*ans) {
26         a.x += n/2;
27         a.y += n/2;
28     } else {
29         int x = n+1-a.y;
30         int y = n/2+1 - a.x;
31         return (Point){x, y};
32     }
33     return a;
34 }
35 
36 int main() {
37     int n, m;
38     cin >> n >> m;
39     Point p = dfs(n, m-1);
40     printf("%d %d\n",p.x,p.y);
41     return 0;
42 }
View Code

?

H

有兩個字符串,只有三個字符,R(石頭)、S(剪刀)和P(布),求第二個在第一個在哪里開始比賽贏的數數最多,求數量。

12 4

RSPPSSSRRPPR

RRRR

第二個字符串從第4或第5位置開始可以贏3把,所以答案是3。

題目可以轉成成從哪里開始,位置一一對應是相同的數量。將第二個字符串反轉,使用fft套模板就出答案了。

主要是想到為什么對第二個字符進行反轉,假設有兩個字符串

1 2 3 456

RRRSSS

SSPR

?

1 2 3 4

RPSS

從第一個位置開始,一一對應是1+4,2+3,3+2,4+1,都是5?

從第二個位置開始,一一對于是2+4,3+3,4+2,5+1,都是6

這樣就知道為什么反轉了。只要對兩個數組求卷積就行。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <math.h>
 4 #define INF 0x3f3f3f3f
 5 #define ll long long
 6 using namespace std;
 7 const int N = 1e5+10;
 8 char s1[N], s2[N];
 9 const double PI = acos(-1.0);
10 struct complex {
11     double r,i;
12     complex(double _r = 0,double _i = 0) {
13         r = _r; i = _i;
14     }
15     complex operator +(const complex &b) {
16         return complex(r+b.r,i+b.i);
17     }
18     complex operator -(const complex &b) {
19         return complex(r-b.r,i-b.i);
20     }
21     complex operator *(const complex &b) {
22         return complex(r*b.r-i*b.i,r*b.i+i*b.r);
23     }
24 };
25 void change(complex y[],int len) {
26     int i,j,k;
27     for(i = 1, j = len/2;i < len-1;i++) {
28         if(i < j)swap(y[i],y[j]);
29         k = len/2;
30         while( j >= k) {
31             j -= k;
32             k /= 2;
33         }
34         if(j < k)j += k;
35     }
36 }
37 void fft(complex y[],int len,int on) {
38     change(y,len);
39     for(int h = 2;h <= len;h <<= 1) {
40         complex wn(cos(-on*2*PI/h),sin(-on*2*PI/h));
41         for(int j = 0;j < len;j += h) {
42             complex w(1,0);
43             for(int k = j;k < j+h/2;k++) {
44                 complex u = y[k];
45                 complex t = w*y[k+h/2];
46                 y[k] = u+t;
47                 y[k+h/2] = u-t;
48                 w = w*wn;
49             }
50         }
51     }
52     if(on == -1)
53         for(int i = 0;i < len;i++)
54             y[i].r /= len;
55 }
56 
57 const int MAXN = 400040;
58 complex x1[MAXN], x2[MAXN];
59 int a[MAXN/4], n, m;
60 ll num[MAXN], ans[MAXN];
61 void slove(char ch) {
62     int len = 1;
63     while(len < 2*n || len < 2*m)len <<= 1;
64     for(int i = 0;i < n;i++)
65         x1[i] = complex(s1[i]==ch,0);
66     for(int i = n;i < len;i++)
67         x1[i] = complex(0,0);
68     for(int i = 0;i < m;i++)
69         x2[i] = complex(s2[i]==ch,0);
70     for(int i = m;i < len;i++)
71         x2[i] = complex(0,0);
72     fft(x1,len,1);
73     fft(x2,len,1);
74     for(int i = 0;i < len;i++)
75         x1[i] = x1[i]*x2[i];
76     fft(x1,len,-1);
77     for(int i = 0;i < len;i++)
78         num[i] = (long long)(x1[i].r+0.5);
79        for(int i = 0; i < len; i ++) 
80            ans[i] += num[i];
81 }
82 int main() {
83     cin >> n >> m;
84     cin >> s1 >> s2;
85     for(int i = 0; i < n; i ++) {
86         if(s1[i] == 'R') s1[i] = 'P';
87         else if(s1[i] == 'P') s1[i] = 'S';
88         else if(s1[i] == 'S') s1[i] = 'R';
89     }
90     for(int i = 0; i < m/2; i ++) swap(s2[i], s2[m-i-1]);
91     slove('R');
92     slove('S');
93     slove('P');
94     ll MAX = 0;
95     for(int i = m-1; i < n+m-1; i ++) MAX = max(MAX, ans[i]);
96     cout << MAX << endl;
97     return 0;
98 }
View Code

?

轉載于:https://www.cnblogs.com/xingkongyihao/p/9932439.html

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

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

相關文章

javascript --- 將DOM結構轉換成虛擬DOM 虛擬DOM轉換成真實的DOM結構

虛擬DOM的實現 使用虛擬DOM的原因: 減少回流與重繪 將DOM結構轉換成對象保存到內存中 <img /> > { tag: img} 文本節點 > { tag: undefined, value: 文本節點 } <img title"1" class"c" /> > { tag: img, data: { title "1&q…

swap(a,b)值交換的4種方法

方法一&#xff1a;int tmp 0; tmp b;b a; a tmp; 方法二&#xff1a;a ab; b a-b; a a-b;方法三&#xff1a;a ^ b ^ a^ b;方法四&#xff1a;a ab-(ba);轉載于:https://www.cnblogs.com/vocaloid01/p/9514126.html

裝系統工具

安裝如果失敗,注意是不是工具的版本太老導致 系統分區工具: DiskGeniusPortable 刻錄工具: UlraISO rufus https://rufus.ie/ win32diskimager 轉載于:https://www.cnblogs.com/jiangfeilong/p/9937164.html

小程序WXML基本使用

數據綁定 <!--wxml--> <view> {{message}} </view> // page.js Page({data: {message: Hello MINA!} }) 列表渲染 <!--wxml--> <view wx:for"{{array}}"> {{item}} </view> // page.js Page({data: {array: [1, 2, 3, 4, 5]} })…

javascript --- vue中簡單的模板渲染

一層的渲染 將下面的模板中的mustache語法使用給定數據渲染. 模板如下 <div id"root"><div><div><p>{{name}} - {{message}}</p></div></div><p>{{name}}</p><p>{{msg}}</p> </div>數據如…

tomcat 虛擬路徑 與 虛擬主機配置

虛擬路徑配置 方法一&#xff1a;此方法需要重啟服務 打開下面文件 在host里面添加context標簽 <Context docBase"D:\test" path"/testServlet/aaaaa" reloadable"true" /> 瀏覽器訪問&#xff1a;http://172.16.6.103:1080/testServlet/a…

20172328 2018-2019《Java軟件結構與數據結構》第八周學習總結

20172328 2018-2019《Java軟件結構與數據結構》第八周學習總結 概述 Generalization 本周學習了二叉樹的另一種有序擴展&#xff1f;是什么呢&#xff1f;你猜對了&#xff01;ヾ(???)&#xff89;&#xff9e;就是堆。本章將講解堆的鏈表實現and數組實現&#xff0c;以及往…

javascript --- 函數的柯里化 Vue 2.x中柯里化的使用

函數式編程部分重點 參考資料: 函數式編程 柯里化 只傳遞給函數一部分參數來調用它,讓它返回一個函數去處理剩下的參數 var add function (x) {return function(y) {return x y} }var increment add(1) var addTen add(10)increment(2) // 3addTen(10) // 12判斷元素:V…

MYSQL重置ROOT密碼

背景 mysql 服務器長時間未使用&#xff0c;管理員當時設置的root 密碼忘記&#xff0c;需要重置 root 密碼&#xff0c;并加以妥善保存。 步驟 關閉 mysql 服務以跳過密碼驗證的方式啟動 mysql 服務mysqld --skip-grant-tables本地登陸后設置新的root 密碼 update mysql.user …

javascript --- Vue初始化 模板渲染

不帶響應式的Vue縮減實現 模板 現有模板如下: <div id "app"><div class"c1"><div titlett1 id"id">{{ name }}</div><div titlett2 >{{age}}</div><div>hello3</div></div><ul>…

#RANK_1 極其簡單的遞歸——騎士與金幣

2000:金幣 總時間限制: 1000ms內存限制: 65536kB描述國王將金幣作為工資&#xff0c;發放給忠誠的騎士。第一天&#xff0c;騎士收到一枚金幣&#xff1b;之后兩天&#xff08;第二天和第三天&#xff09;里&#xff0c;每天收到兩枚金幣&#xff1b;之后三天&#xff08;第四、…

動手動腦4

import java.io.*; public class ThrowMultiExceptionsDemo { public static void main(String[] args) { try { throwsTest(); } catch(IOException e) { System.out.println("捕捉異常"); }}private static void throwsTest() throws ArithmeticException,IOExcep…

javascript --- 對象原型

對象原型 參考 - MDN Javascript中的原型 在Javascript中,每一個函數都有一個特殊的屬性,叫做原型 下面獲取函數的原型fn.prototype function f1(){} console.log(f1.prototype) /*{constructor: f f1()__proto__:{constructor: f Object()__defineGetter__: f __defineGe…

從零認識單片機(9)

keil軟件&#xff1a; IDE:IDE是集成開發環境&#xff0c;就是用來開發的完整的軟件系統。 keil和mdk: keil:只能用來開發單片機 mdk:基于keil 拓展ARM的開發&#xff0c;主要用來開發ARM-cortex-m系列單片機的程序。 使用keil打開已有的工程項目&#xff1a; 1、IDE開發軟件&a…

javascript --- vue2.x中原型的使用(攔截數組方法) 響應式原理(部分)

說明 在Vue2.x中,利用了對原型鏈的理解,巧妙的利用JavaScript中的原型鏈,實現了數組的pop、push、shift、unshift、reverse、sort、splice等的攔截. 你可能需要的知識 參考 - MDN 原型鏈 JavaScript常被描述為一種基于原型的語言(prototype-based language),每個對象擁有一…

dubbo-admin構建報錯

dubbo-admin構建報錯 意思是maven庫里沒有dubbo2.5.4-SNAPSHOT.jar這個版本的dubbo的jar包&#xff0c;把dubbo-admin項目的pom.xml的   <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${proje…

javascript --- 手寫Promise、快排、冒泡、單例模式+觀察者模式

手寫promise 一種異步的解決方案, 參考 Promise代碼基本結構 function Promise(executor){this.state pending;this.value undefined;this.reason undefined;function resolve(){}function reject(){} } module.exports Promisestate保存的是當前的狀態,在Promise狀態發…

PyCharm 通過Github和Git上管理代碼

1.Pycharm中設置如圖: 2.配置Git,通過網頁 https://www.git-scm.com/download/win 下載 3. 轉載于:https://www.cnblogs.com/0909/p/9956406.html

【BZOJ】2395: [Balkan 2011]Timeismoney

題解 最小乘積生成樹&#xff01; 我們把&#xff0c;x的總和和y的總和作為x坐標和y左邊&#xff0c;畫在坐標系上 我們選擇兩個初始點&#xff0c;一個是最靠近y軸的A&#xff0c;也就是x總和最小&#xff0c;一個是最靠近x軸的B&#xff0c;也就是y總和最小 連接兩條直線&…

http --- http與https相關概念小結

網絡協議 參考 HTTP的特性 HTTP協議構建于TCP/IP協議之上,是一個應用層協議,默認端口是80HTTP是無連接無狀態的 HTTP報文 請求報文 HTTP協議是以ASCII碼傳輸,建立在 TCP/IP 協議之上的應用層規范。規范把HTTP請求分為三個部分:狀態行、請求頭、消息主體。 <method>…