zoukankan      html  css  js  c++  java
  • 20200807 贪心;排队接水;[AHOI2018初中组]分组;国王的游戏

    记录巧妙思维[自己写的太常规了就不放了]

    排队接水|来源

    有一个巧妙的存数据方式来输出排序之后编号的顺序(针对快排懒得用结构体的同学)
    因为n<=1000,所以给每个ti都*1001,在加上当前序号,可以保证排序的时候序号不干扰排序,又可以方便输出序号(只需mod1001输出序号,/1001 输出时间)直达



    [AHOI2018初中组]分组|来源

    如果右边一列的高度不低于当前列,则连接右边一列最下方的方块。反之,停止画线。
    这样,最靠左的一个“峰”相较其右边一列的高度差就不断减小,直到相同。如此反复。记录所画所有线的最短长度,即为答案。直达



    国王的游戏|链接

    冒泡排序的思想优化排序直达
    还没AC呢,等会看看哪错了
    谁能想到是进位不够呢




    其他看了的东西也一起记录一下叭不然就像啥也没学一样

    • Markdown入门教程
      这个感觉不是很全,但是基本的语法差不多都有
      
    • Git/Github入门







    //  main.cpp
    //  Water containing
    //
    //  Created by Leonardo Cullen on 2017/5/6.
    //  Copyright © 2017年 Leonardo Cullen. All rights reserved.
    //
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    double sum;
    long int n;
    long long int t[1001];
    double ans;
    int main(int argc, const char * argv[])
    {
    cin>>n;
    int x;
    for(int i=1;i<=n;i++)
    {
      cin>>x;
      t[i]=x*1001+i;
    }
    sort(t+1,t+1+n);
    for(int j=1;j<=n;j++)
    {
      cout<<t[j]%1001<<" ";
      sum+=t[j]/1001*(n-j);
    }
    cout<<endl;
    ans=sum/n;
    printf("%0.2lf",ans);
    return 0;
    }
    







    #include<cstdio>
    #include<map>
    std::map<int,int>m;
    typedef std::map<int,int>::iterator it;
    int main(){
    	int n,ans=0x3f3f3f3f;
    	scanf("%d",&n);
    	for(int i=0;i<n;++i){
    		int t;
    		scanf("%d",&t);
    		++m[t];
    		//记录图像。
    	}
    	while(!m.empty()){
    		it i=m.begin(),j=m.begin();
    		--(*i).second;
    		int t=1;
    		for(++j;j!=m.end()&&(*j).first==(*i).first+1&&(*j).second>(*i).second;++i,++j){
       			++t;
    			--(*j).second;
    		}
    		//若 i,j 所对应的能力值是连续的,且 i 对应的那一列高度不高于 j,则继续画线。
    		i=m.begin();
    		while(i!=m.end()&&(*i).second==0){
    			m.erase((*i++).first);
    		}
    		//高度降为 0 后直接删除,便于计算。
    		if(t<ans){
    			ans=t;
    		}
    		//记录答案。
    	}
    	printf("%d",ans);
    	return 0;
    }
    







    #include <bits/stdc++.h>
    
    #define RG register int
    #define rep(i,a,b)    for(RG i=a;i<=b;++i)
    #define per(i,a,b)    for(RG i=a;i>=b;--i)
    #define ll long long
    #define inf (1<<29)
    #define make_pair mp
    const int maxn=1e4+5;
    using namespace std;
    
    inline int read(){
        int x=0,f=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    
    struct node{
        int left,right;
    }a[maxn];
    
    int cmp(node a,node b){
        return a.right*a.left<b.right*b.left;
    }
    
    int maxs[maxn]={0},last[maxn];//前一位的乘积,从1开始算
    int laaa_len=1,maaa_len=1;//前一位的位数
    
    void ppl(int n){
        int num=a[n-1].left,pp[maxn];//当前可获金币数量
        memset(pp,0,sizeof(pp));
        laaa_len+=10;//最多乘10^4,多加一位//实际上这里要多加,至于为什么,咱也不知道
        rep(i,1,laaa_len)
        {
            pp[i]+=last[i]*num;
            pp[i+1]+=pp[i]/10;
            pp[i]%=10;
    
    //        cout<<pp[i]<<" "<<pp[i+1]<<endl;
    
        }
    	while(!pp[laaa_len])laaa_len--;//获取当前位数
        memcpy(last,pp,sizeof(pp));//获取当前乘积
    
    //    per(i,laaa_len,1)cout<<pp[i];
    //    cout<<endl;
    //
        num=a[n].right;
        per(i,laaa_len,1)
        {
            pp[i-1]+=pp[i]%num*10;
            pp[i]/=num;
        }
        while(!pp[laaa_len])laaa_len--;
    
    //    cout<<"num: "<<num<<' '<<endl;
    //    per(i,laaa_len,1)cout<<pp[i];
    //    cout<<endl;
    //
        per(i,laaa_len+2,1)
        {
            if(pp[i]==maxs[i]){continue;}
            else if(pp[i]>maxs[i]){memcpy(maxs,pp,sizeof(pp));maaa_len=laaa_len;break;}
            else break;
        }
    }
    
    int main()
    {
        int n=read();n+=1;
        rep(i,1,n){
            a[i].left=read();a[i].right=read();
        }
        sort(a+2,a+n+1,cmp);
        memset(last,0,sizeof(last));last[1]=1;
        rep(i,2,n)ppl(i);
        per(i,maaa_len,1)cout<<maxs[i];
        return 0;
    }
    //指针
    
  • 相关阅读:
    如何判定某个类的职责是否够"单一"?
    Guava中的Cache简易源码分析
    为什么尽量少用继承?
    聊聊抽象类和接口
    WINDOW 搭建 ELK 2.4.0
    摇摇棒,理工男的择偶权(上)
    C++值多态:传统多态与类型擦除之间
    C++值元编程
    STM32学习笔记——printf
    C++98/11/17表达式类别
  • 原文地址:https://www.cnblogs.com/tabshh/p/13456816.html
Copyright © 2011-2022 走看看