Skip to main content
  1. Posts/

codeforces 660 C. Hard Process (ruler)

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

cf660C

solution:ruler.1A

  1/* ***********************************************
  2Author :111qqz
  3Created Time :2016年06月08日 星期三 23时43分18秒
  4File Name :code/cf/problem/660C.cpp
  5************************************************ */
  6
  7#include <cstdio>
  8#include <cstring>
  9#include <iostream>
 10#include <algorithm>
 11#include <vector>
 12#include <queue>
 13#include <set>
 14#include <map>
 15#include <string>
 16#include <cmath>
 17#include <cstdlib>
 18#include <ctime>
 19#define fst first
 20#define sec second
 21#define lson l,m,rt<<1
 22#define rson m+1,r,rt<<1|1
 23#define ms(a,x) memset(a,x,sizeof(a))
 24typedef long long LL;
 25#define pi pair < int ,int >
 26#define MP make_pair
 27
 28using namespace std;
 29const double eps = 1E-8;
 30const int dx4[4]={1,0,0,-1};
 31const int dy4[4]={0,-1,1,0};
 32const int inf = 0x3f3f3f3f;
 33const int N=3E5+7;
 34int n,k;
 35int sum[N],a[N];
 36
 37void ruler()
 38{
 39    int head = 1;
 40    int tail = 1;
 41    int l,r;
 42    int  res = -1;
 43    int cnt = 0 ;
 44
 45    while (tail<=n)
 46    {
 47	while (a[tail]==1) tail++;
 48//	cout<<"head:"<<head<<" tail:"<<tail<<endl;
 49	if (a[tail]==0&&tail<=n) cnt++;
 50
 51	while (sum[tail]-sum[head-1]<=k&&tail<=n) tail++;
 52//	cout<<"head:"<<head<<"tail:"<<tail<<endl;
 53	    if (tail-head>res)
 54	    {
 55		res = tail-head;
 56	//	cout<<"res:"<<res<<endl;
 57		l = head;
 58		r = tail-1;
 59	    }
 60
 61	while (head<=tail&&sum[tail]-sum[head-1]>k) head++;
 62//	cout<<"head::"<<head<<" tail:"<<tail<<endl;
 63	if (tail<=n&&tail-head+1>res)
 64	{
 65	    res = tail-head+1;
 66	    l = head;
 67	    r = tail;
 68	}
 69
 70
 71    }
 72
 73
 74    for ( int i = l ; i <= r ; i++) a[i] = 1;
 75
 76    cout<<res<<endl;
 77    for ( int i = 1 ; i <= n ; i++) cout<<a[i]<<" ";
 78}
 79int main()
 80{
 81	#ifndef  ONLINE_JUDGE
 82	freopen("code/in.txt","r",stdin);
 83  #endif
 84
 85	cin>>n>>k;
 86
 87	sum[0] = 0;
 88	for ( int i = 1; i <= n ; i++)
 89	{
 90	    scanf("%d",&a[i]);
 91	    sum[i] = sum[i-1] +(1-a[i]);
 92	}
 93
 94	ruler();
 95
 96
 97  #ifndef ONLINE_JUDGE
 98  fclose(stdin);
 99  #endif
100    return 0;
101}

Related

codeforces 279 B books

·1 min
http://codeforces.com/problemset/problem/279/B 题意:给定一个序列,问一段连续的序列的和小于等于t的最长的序列的长度。 思路:尺取法。三个月前学习的了。

poj 2739 Sum of Consecutive Prime Numbers (尺取法)

·1 min
一开始迷之wa… 先找出素数下标的上界就可以A… 然后纠结了20分钟... 然后发现是预处理的素数少了一个素数.. 我预处理是处理到<10005的素数... 最大数10000,而超过10000的第一个素数是10007 这样判断终止条件就会死循环… sad

poj 2100 Graveyard Design (two pointers ,尺取法)

·1 min
不多说,直接代码。 1/************************************************************************* 2 > File Name: code/poj/2100.cpp 3 > Author: 111qqz 4 > Email: rkz2013@126.com 5 > Created Time: 2015年09月25日 星期五 00时42分49秒 6 ************************************************************************/ 7 8#include<iostream> 9#include<iomanip> 10#include<cstdio> 11#include<algorithm> 12#include<cmath> 13#include<cstring> 14#include<string> 15#include<map> 16#include<set> 17#include<queue> 18#include<vector> 19#include<stack> 20#include<cctype> 21#define y1 hust111qqz 22#define yn hez111qqz 23#define j1 cute111qqz 24#define ms(a,x) memset(a,x,sizeof(a)) 25#define lr dying111qqz 26using namespace std; 27#define For(i, n) for (int i=0;i<int(n);++i) 28typedef long long LL; 29typedef double DB; 30const int inf = 0x3f3f3f3f; 31LL n; 32LL maxn; 33vector<LL>ans; 34 35 36void solve() 37{ 38 LL head = 1,tail = 1; 39 LL sum = 0 ; 40 41 while (tail<=maxn) 42 { 43 sum = sum + tail*tail; 44 45 if (sum>=n) 46 { 47 while (sum>n)//主要是while,因为可能要减掉多个才能小于n 48 { 49 sum -= head*head; 50 head++; 51 } 52 if (sum==n) 53 {//因为要先输出答案个数...所以必须存起来延迟输出... 54 ans.push_back(head); 55 ans.push_back(tail); 56 } 57 } 58 tail++; 59 } 60 LL sz = ans.size(); 61 printf("%lld\n",sz/2); 62 for (LL i = 0 ; i<ans.size() ; i = i +2) 63 { 64 printf("%lld",ans[i+1]-ans[i]+1); 65 for ( LL j = ans[i] ; j <=ans[i+1] ; j++) printf(" %lld",j); 66 printf("\n"); 67 } 68 69} 70int main() 71{ 72 #ifndef ONLINE_JUDGE 73 freopen("in.txt","r",stdin); 74 #endif 75 scanf("%lld",&n); 76 maxn = ceil(sqrt(n)); 77 solve(); 78 79 #ifndef ONLINE_JUDGE 80 fclose(stdin); 81 #endif 82 return 0; 83}