zoukankan      html  css  js  c++  java
  • 202109 csp

    • 1.数组推导
    #include<iostream>
    #include<vector>
    #include<cstring>
    using namespace std;
    int n;
    int maxs = 0;
    int mins = 0;
    int main(){
    	cin>>n;
    	vector<int> B;
    	int arr[n];
    	memset(arr,0,sizeof(arr));
    	for(int i=0;i<n;i++){
    		int b;
    		cin>>b; 
    		B.push_back(b);
    	}
       maxs=B[0];
       mins=B[0]; 
       int flag =0;
       //标记前面是否已出现过
    	for(int i=1;i<B.size();i++){
    		flag=0;
    		for(int j=0;j<i;j++){
    			if(B[i]==B[j]){
    				flag =1;
    				break; 
    			}	 	 
    		}
    		if(flag ==1)
    		{
    		 maxs+=B[i];
    		 mins+=0;	
    		} else{
    			 maxs+=B[i];
    			 mins+=B[i];
    		}
    	}
    	cout<<maxs<<endl;
    	cout<<mins;
    } 
    
      1. 非零段划分

    样例1输入
    11
    3 1 2 0 0 2 0 4 5 0 2

    样例1输出
    5

    样例2输入
    14
    5 1 20 10 10 10 10 15 10 20 1 5 10 15

    样例2输出
    4

    样例3输入
    3
    1 0 0

    样例3输出
    1

    样例4输入
    3
    0 0 0

    样例4输出
    0

    70分

    #include<iostream>
    #include<vector>
    #include<set>
    #include<iterator>
    using namespace std;
    int n;
    int ans = 0;
    int main(){
    	cin>>n;
    	vector<int> v;
    	set<int> s;
    	int maxv = 0;
    	for(int i=0;i<n;i++){
    		int x;
    		cin>>x;
    		if(x>maxv) maxv=x; 
    		v.push_back(x);	
    		s.insert(x);
    	}
    	set<int>::iterator it = s.begin();
    	int p = *it;
    	int tmp[n];
    	while(it!=s.end()){
    	p=*it+1;
    	int num=0;
    	for(int i=0;i<n;i++){
    		if(v[i]<p) tmp[i]=0;
    		else tmp[i]=v[i];	
    	}
    	int i=0;
    	int last=0;
    	while(i<n){	
    		if(tmp[i]!=0){
    			if(last==0){
    			num++;
    			}				
    		}
    		last=tmp[i];
    		i++;
    	}	
    	if(ans<=num) ans=num; 
    	it++;
    	}
    	cout<<ans;
    	return 0;
    }
    

    优化
    [https://tigerisland.blog.csdn.net/article/details/120598581]

    • 3神经元
    using namespace std;
    int N;//神经元个数 
    int S;//突触个数 
    int P;//脉冲源个数 
    int T;//输出t时刻神经元的v值 
    double dt;//间隔时间 
    double ik[1009][100019];//存放Ik 
    map<int,int> maichong;//存放脉冲源的r值 
    static unsigned long next_r = 1;
    /* RAND_MAX assumed to be 32767 */
    int myrand(void) {
        next_r = next_r * 1103515245 + 12345;
        return((unsigned)(next_r/65536) % 32768);
    }
    class Point{
    	public:
    		double v,u,pre_v,pre_u;
    		double a;
    		double b;
    		double c;
    		double d;
    		int num;
    }; 
    class Edge{
    	public:
    	 int t;//出结点的编号 
    	 double w;//脉冲强度 
    	 int D;//传播延迟 
    };
    vector<Edge> nei[2009];//邻接表 
    int main(){
    	vector<Point> neuron;
    	cin>>N>>S>>P>>T;
    	cin>>dt;
    	int cnt=0;
    	int pre = 0;
    	while(cnt<N){
    		int n;
    		cin>>n;
    		double v;
    		double u;
    		double a;
    		double b;
    		double c;
    		double d;
    		cin>>v>>u>>a>>b>>c>>d;
    		Point p = {0,0,v,u,a,b,c,d,0};
    		for(int i=pre;i<pre+n;i++){
    		neuron.push_back(p);
    		}
    		pre+=n;
    		cnt+=n;
    	}
    	for(int i=N;i<N+P;i++){
    		int r;
    		cin>>r;
    		maichong[i]=r;
    	}
    	for(int i=0;i<S;i++){
    		int s,t,D;
    		double w;
    		cin>>s>>t>>w>>D;
    		Edge e = {t,w,D};	
    		nei[s].push_back(e);
    	}
    	for(int i=1;i<=T;i++){
    		map<int,int>::iterator it = maichong.begin();
    		for(it;it!=maichong.end();it++){//发送脉冲 
    			int rom=myrand();
    			if(it->second>rom){
    				for(int j=0;j<(int)nei[it->first].size();j++){
    					Edge tmp = nei[it->first][j];
    					ik[tmp.t][i+tmp.D]+=tmp.w; 
    				}
    			}
    		}
    		//更新vk uk
    		for(int j=0;j<N;j++) {
    			neuron[j].v=neuron[j].pre_v+dt*(0.04*neuron[j].pre_v*neuron[j].pre_v+5*neuron[j].pre_v+140-neuron[j].pre_u)+ik[j][i];
    			neuron[j].u=neuron[j].pre_u+dt*neuron[j].a*(neuron[j].b*neuron[j].pre_v-neuron[j].pre_u);
    		    if(neuron[j].v>=30){
    		    neuron[j].num++;
    			neuron[j].v=neuron[j].c;
    			neuron[j].u=neuron[j].u+neuron[j].d;
    			for(int k=0;k<(int)nei[j].size();k++){
    					Edge tmp = nei[j][k];
    					ik[tmp.t][i+tmp.D]+=tmp.w; 
    				}	
    		    }
    		    neuron[j].pre_v=neuron[j].v;
    		    neuron[j].pre_u=neuron[j].u;
    	   }	
        } 
      
        double ans1=99999999,ans2=-99999999;
    	int ans3=99999999,ans4=0;
    	for(int j=0;j<N;j++){
    		ans1=min(ans1,neuron[j].v);
    		ans2=max(ans2,neuron[j].v);
    		ans3=min(ans3,neuron[j].num);
    		ans4=max(ans4,neuron[j].num);
    	}
    	printf("%.3f %.3f\n",ans1,ans2);
    	printf("%d %d",ans3,ans4);
    	return 0;
    } 
    
    • 4搜集卡牌
      10分
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int n,k;
    int flag[16];//标记是否出现过 
    double p[16];//标记每种牌出现的概率 
    double ans;
    void dfs(int x,int cnt,double y,double num){
    	//x 记录当前有几种卡 
    	//cnt 记录当前有几个硬币
    	//y记录概率 
    	//num记录抽了几次卡 
    	if(x>=n||(x*k>=n*k-cnt)) {
    		ans+=y*num;
    		return; 
    	}
       	for(int i=0;i<n;i++){
       	   int tx=x;
    	   int tcnt= cnt;
           double ty= y;
    	   double tnum=num;
           if(flag[i]){
           	dfs(tx,tcnt+1,ty*=p[i],++tnum);
           }else{
           	flag[i]=1;
           	dfs(tx+1,tcnt,ty*=p[i],++tnum);
           	flag[i]=0;
           }
    	}
    }
    int main(){
    	cin>>n>>k;
    	for(int i=0;i<n;i++){
    	cin>>p[i];	
    	}
    	//第一次抽卡 
    	for(int i=0;i<n;i++){
    	flag[i]=1;
    	dfs(1,0,p[i],1);
    	flag[i]=0;
    	}
        printf("%.10lf",ans);//不知道为啥非得输10位 其他的都错的
    	return 0;
    } 
    

    记忆型搜索

    [https://paste.ubuntu.com/p/KTPwKRdPWB/]

    ljm要加油
  • 相关阅读:
    BZOJ1001 BJOI2006 狼抓兔子
    NOI2015 程序自动分析
    高斯消元法
    [POJ] 3666 Making the Grade
    [CODEVS] 2185 最长公共上升子序列
    [模板] LIS
    [CF] 219D Choosing Capital for Treeland
    [POJ] 2823 Sliding Window
    [BZOJ] 1072 [SCOI2007]排列perm
    [POJ] 1094 Sorting It All Out
  • 原文地址:https://www.cnblogs.com/ljmmm1/p/15617002.html
Copyright © 2011-2022 走看看