Skip to main content
  1. Posts/

cf 556C Case of Matryoshkas

·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

http://codeforces.com/contest/556/problem/C

果然一晚上不睡觉会导致读错题么…

需要注意的是 如果有一个是 1 2 4 6 那么 1,2是不必拆开的….

然后我们发现,只有以1为开始且连续的套娃不必拆开….

可以先假设所有都需要拆开,那么一共需要 2*n-k-1次

然后如果有以1为开始连续的,拆的时候少拆一次,装的时候少装一次,所以ans=ans-2

但是需要注意的是….如果只有一个1,比如1 3 5 也算成了长度为1的以1开始连续的,但是这并没有什么卵用….所以最后答案记得ans+2

 1
 2/*************************************************************************
 3    > File Name: code/cf/556C.cpp
 4    > Author: 111qqz
 5    > Email: rkz2013@126.com
 6    > Created Time: 2015年07月12日 星期日 10时24分54秒
 7 ************************************************************************/
 8
 9#include<iostream>
10#include<iomanip>
11#include<cstdio>
12#include<algorithm>
13#include<cmath>
14#include<cstring>
15#include<string>
16#include<map>
17#include<set>
18#include<queue>
19#include<vector>
20#include<stack>
21using namespace std;
22typedef long long LL;
23typedef unsigned long long ULL;
24const int N=1E5+7;
25int a[N],m[N];
26LL n,k,ans;
27int main()
28{
29    cin>>n>>k;
30    ans = 2*n-k+1;
31    for (int i = 0 ; i < k ; i++ )
32    {
33      scanf("%d",&m[i]);
34      for (int j = 0 ; j < m[i];j++)
35      {
36        scanf("%d",&a[j]);
37        if (a[j]==j+1)
38            ans = ans -2;
39
40      }
41    }
42    cout<<ans<<endl;
43    return 0;
44}

Related

最大连续区间和的算法总结

·2 mins
最大连续区间和是一个经典的问题。给定一个长度为 n 的序列 a[1],a[2]…a[n-1],a[n],求一个连续的子序列 a[i],a[i+1]…a[j-1],a[j],使得 a[i]+a[i+1]…a[j-1]+a[j]最大。

cf 535B Tavas and SaDDas

·1 min
B. Tavas and SaDDas time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Once again Tavas started eating coffee mix without water! Keione told him that it smells awful, but he didn’t stop doing that. That’s why Keione told his smart friend, SaDDas to punish him! SaDDas took Tavas’ headphones and told him: “If you solve the following problem, I’ll return it to you.”

poj 3278 catch that cow

·1 min
http://poj.org/problem?id=3278 bfs,用到了stl的queue 1 2 3 /* *********************************************** 4 Author :111qqz 5 Created Time :2016年02月19日 星期五 15时45分05秒 6 File Name :3278.cpp 7 ************************************************ */ 8 9 #include <algorithm> 10 #include <cstdio> 11 #include <iostream> 12 #include <cstring> 13 #include <string> 14 #include <cmath> 15 #include <map> 16 #include <stack> 17 #include <queue> 18 19 using namespace std; 20 typedef long long LL; 21 const int inf = 8E8; 22 const int N=2E5+7; 23 int d[N]; 24 int n,k; 25 void bfs() 26 { 27 queue<int> q; 28 memset(d,-1,sizeof(d)); 29 q.push(n); 30 d[n]=0; 31 while (!q.empty()) 32 { 33 int x = q.front(); 34 q.pop(); 35 if ( x==k ) 36 { 37 break; 38 } 39 int next[10]; 40 next[1]=x-1; 41 next[2]=x+1; 42 next[3]=2*x; 43 for ( int i = 1; i <= 3 ; i++ ) 44 { 45 if (next[i]>=0&&next[i]<=100000&&d[next[i]]==-1) 46 { 47 d[next[i]]=d[x]+1; 48 q.push(next[i]); 49 } 50 } 51 } 52 53 54 } 55 int main() 56 { 57 while (scanf("%d %d",&n,&k)!=EOF) 58 { 59 bfs(); 60 cout<<d[k]<<endl; 61 } 62 return 0; 63 }

POJ 1028 Web Navigation

·1 min
http://poj.org/problem?id=1028 1 2 3 4 /* *********************************************** 5 Author :111qqz 6 Created Time :2016年02月19日 星期五 15时45分01秒 7 File Name :1028.cpp 8 ************************************************ */ 9 10 #include <algorithm> 11 #include <cstdio> 12 #include <iostream> 13 #include <cstring> 14 #include <string> 15 #include <cmath> 16 #include <map> 17 #include <stack> 18 #include <queue> 19 20 using namespace std; 21 typedef long long LL; 22 const int inf = 8E8; 23 stack<string> backstack; 24 stack<string> forwardstack; 25 string cur; 26 string cmd; 27 int main() 28 { 29 cur ="http://www.acm.org/"; 30 31 while (cin>>cmd) 32 { 33 if (cmd=="QUIT") 34 { 35 break; 36 } 37 if (cmd=="BACK") 38 { 39 if (backstack.empty()) 40 { 41 cout<<"Ignored"<<endl; 42 continue; 43 } 44 forwardstack.push(cur); 45 cur=backstack.top(); 46 backstack.pop(); 47 cout<<cur<<endl; 48 } 49 if (cmd=="FORWARD") 50 { 51 if (forwardstack.empty()) 52 { 53 cout<<"Ignored"<<endl; 54 continue; 55 } 56 backstack.push(cur); 57 cur=forwardstack.top(); 58 forwardstack.pop(); 59 cout<<cur<<endl; 60 } 61 if (cmd=="VISIT") 62 { 63 backstack.push(cur); 64 65 cin>>cur; 66 while (!forwardstack.empty()) forwardstack.pop(); 67 cout<<cur<<endl; 68 69 } 70 } 71 72 73 return 0; 74 }