zoukankan      html  css  js  c++  java
  • CSU-ACM2019暑假集训(1)

    原CF 1138A Sushi for Two

    基本思路

    每个状态之和之前的一个连续状态有关,并且取下限即可,若状态发生改变,计数器置零

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int n;cin>>n;int num1=0,num2=0,sum=0;
    	int pre=0;
    	for(int i=0;i<n;i++)
    	{
    		int num;cin>>num;
    		if(num==1)
    		{
    			if(pre==2)
    				num1=0;
    			num1++;
    		}
    		if(num==2)
    		{
    			if(pre==1)
    				num2=0;
    			num2++;
    		}
    		pre=num;
    		sum=max(sum,min(num1,num2));
    	}
    	cout<<sum*2<<endl;
    }
    

    原CF 1141C Polycarp Restores Permutation

    基本思路

    确定开头数字为最大,后面即可推导出来,然后原数列从1开始,因此减去最大和最小的差,最后用vector判断是否重复

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n;ll q[200020],arr[200020];
    vector<ll>brr;
    int main()
    {
    	cin>>n;
    	for(int i=0;i<n-1;i++)
    	{
    		cin>>q[i];
    	}
    	arr[0]=n;ll maxn=n,minn=9999999;
    	for(int i=1;i<n;i++)
    	{
    		arr[i]=arr[i-1]+q[i-1];
    		maxn=max(maxn,arr[i]);
    	}
    	for(int i=0;i<n;i++)
    	{
    		arr[i]-=maxn-n;
    		brr.push_back(arr[i]);
    	}
    	sort(brr.begin(),brr.end());
    	for(int i=0;i<n-1;i++)
    	{
    		if(brr[i+1]-brr[i]!=1)
    		{
    			//cout<<i<<endl;
    			cout<<-1<<endl;
    			return 0;
    		}
    	}
    	for(int i=0;i<n;i++)
    	{
    		cout<<arr[i]<<" ";
    	}
    	return 0;
    }
    

    F题 原CF 1141E Superhero Battle

    基本思路

    减去第一次最小值,判断有无超过h,然后循环减,使用除法,最后一次使用步进

    #include<bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    ll h,n,arr[200020];
    int main()
    {
    	cin>>h>>n;
    	long long sum=0,time=0,minn=0,cnt=0;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>arr[i];
    		sum+=arr[i];
    		if(sum<minn)
    		{
    			minn=min(minn,sum);
    			cnt=i;	
    		}
    		if(minn+h<=0)
    		{
    			cout<<i<<endl;
    			return 0;
    		}
    	}
    	//cout<<sum<<" "<<cnt<<endl;
    	if(sum>=0&&minn<h)
    	{
    		cout<<-1<<endl;
    		return 0;
    	}
    	h+=minn;
    	time+=cnt;
    	time+=(h/(-sum))*n;
    	h=h%(-sum);
    //	cout<<h<<endl;
    	ll i=cnt+1;
    	while(h>0)
    	{
    		if(i%(n+1)==0)i++;
    		h+=arr[(i++)%(n+1)];
    		//cout<<h<<endl; 
    		time++;
    	}
    	cout<<time;
    	return 0;
    }
    
  • 相关阅读:
    logging- 日志记录
    apscheduler -定时任务
    mysql
    Time-python
    pandas 常用语句
    re 正则
    sublime text3的快捷键
    git 常用操作
    tf.nn的conv2d卷积与max_pool池化
    WebApi 接口返回值类型详解 ( 转 )
  • 原文地址:https://www.cnblogs.com/tldr/p/11222419.html
Copyright © 2011-2022 走看看