• 9.3 simulated match


    2118: 卡片

    时间限制: 1 Sec  内存限制: 128 MB

    题目描述

           lrb喜欢玩卡牌。他手上现在有张牌,每张牌的颜色为红绿蓝中的一种。现在他有两种操作。一是可以将两张任意位置的不同色的牌换成一张第三种颜色的牌;二是可以将任意位置的两张相同颜色的牌换成一张该颜色的牌。两个操作后都可以将生成的牌放到任意位置。现在他想知道,最后一张牌可能是什么颜色的。

    输入

    第一行输入一个n,表示卡牌数量。

           第二行输入一个由’B’,’G’,’R’组成的长度为n的字符串,分别表示卡牌的颜色为蓝色、绿色、红色中的一种。

    输出

    输出’B’,’G’,’R’中的若干个字母,按字典序输出。代表可能的最后一张牌的颜色。

    样例输入

    3
    GRG

    样例输出

    BR

    well,this problem was easy,but I made the order of the letters wrong.
    so...you know...i fell to pass it.
    the thinking doesn't need any explication.
    here is the code
    #include<iostream>
    using namespace std;
    string w;
    char a[3]={'B','G','R'};int a1[3]={0};
    int main(){
        int n;cin>>n;cin>>w;
        for(int i=0;i<n;i++)for(int j=0;j<3;j++)if(w[i]==a[j])a1[j]++;
        for(int i=0;i<3;i++)if(a1[i]==n){cout<<a[i];return 0;}
        if(n==2)for(int i=0;i<3;i++)if(!a1[i]){cout<<a[i];return 0;}
        for(int i=0;i<3;i++)
            if(a1[i]==n-1){for(int j=0;j<3;j++)if(j!=i)cout<<a[j];return 0;}
        for(int i=0;i<3;i++)cout<<a[i];return 0;
    }

    the only problem is that when I used getchar optimization,it went wrong.

    maybe this web never allows it...

    2119: 取数

    时间限制: 1 Sec 内存限制: 128 MB

    题目描述

    lrb目前有n个数字,他想知道这n个数中选出若干个数,平均数减中位数的最大值是多少。

    输入

    第一行为n,为数字个数。

    第二行有n个数,分别代表n个数字。

    输出

    输出一个数,为平均数减中位数的最大值,保留两位小数。

    样例输入

    4
    1 2 3 4

    样例输出

    0.33

    提示

    对于100%的数据,n<=10^5,0<=a[i]<=10^6

    well the code is the best language

    #include <cstdio> 
    #include <algorithm> 
    #define cint    register int  
    #define fr(i,a,b)  for(cint i=a;i<=b;i++)
    #define INF 1e9 
    #define ll long long 
    //---------------read optimization----------------------------------- 
    #define getchar() (SS==TT&&(TT=(SS=BB)+fread(BB,1,1<<15,stdin),SS==TT)?EOF:*SS++) 
    char BB[1<<15],*SS=BB,*TT=BB; 
    int read(){cint x=0,f=1;char ch=getchar(); 
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 
        while('0'<=ch&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*f;} 
    //---------------optimization above-----------------------------------
    using namespace std; 
    int n,a[200010];  
    ll maxw,maxl,left,right,w1,w2,p[200010];  
    double v1,v2,v,maxh=-1; 
    double solute(ll w,ll l){return (double)(p[w]-p[w-l-1]+p[n]-p[n-l])/(double)(2*l+1)-(double)a[w];}
    //calculate out the average_number  subtract median
    int TPM(int i){left=0;right=min(i-1,n-i); 
        while(left+1<=right){//if has not run out the section 
            w1=(right-left)/3+left;w2=right-(right-left)/3; 
            v1=solute(i,w1);v2=solute(i,w2); 
            if(v1>v2)right=w2-1;else left=w1+1;} 
    }//Three_Point_Method
    void pans(double key){printf("%.2lf
    ",key);}//out the data
    int main(){n=read(); // read the total_sum of the array
        fr(i,1,n)a[i]=read();//read the array
        sort(a+1,a+n+1);//set the array in order
        fr(i,1,n)p[i]=p[i-1]+a[i];//mark each prefix sum
        if(n<=2){pans(0);return 0;} //the special case
        fr(i,1,n){TPM(i);v=solute(i,left);//mark the solution of the_average_number_subtract_median
            if(v>maxh)maxh=v,maxw=i,maxl=left;}//if the solution is the best ,renew it.
        pans(maxh);return 0;//out the ans
    } 

    2120: 密码

    时间限制: 1 Sec 内存限制: 128 MB

    题目描述

    lrb去柜员机取钱,并输入了他的四位密码。但是这一切都被一个黑帮拍摄了下来。幸好,这一次他的银行卡里并没有剩余任何钱。lrb知道了他的账户被异常登录后十分害怕,然后修改了他的密码。从此以后他为了不被看出密码,他开始“徐晃”。但这一切还是被拍摄了下来,拍摄多次以后,这个黑帮找到了你,希望你在一秒内帮他算出lrb的可能使用的密码数量。

    输入

    第一行输入一个n,为lrb被拍摄的动作次数。

    接下来n行,每行第一个数为t,表示lrb接下来的手指移动次数,接下来为一个长度为t的数字串,表示lrb手指经过的轨迹。lrb手指经过的位置,可能没有按,也有可能按了多次。

    输出

    输出一行,为可能的密码数量。

    样例输入

    2
    3 123
    3 234
    

    样例输出

    5

    提示

    lrb可能用的是2222,2223,2233,2333,3333五种密码

    设所有轨迹串的总长度为L。


    对于100%的数据,1<=n<=1000,1<=t<=10^4,L<=10^6

    the code is the best language...

    #include <bits/stdc++.h> 
    #define ll long long 
    using namespace std; 
    #define cint    register int
    #define cchar   register char
    #define fr(cint,i,a,b)  for(cint i=a;i<=b;i++)
    #define fd(i,a,b)  for(cint i=a;i>=b;i--)
    //---------------read optimization-----------------------------------
    char BB[1<<15],*SS=BB,*TT=BB; 
    short inline read(){short x=0;char ch=getchar(); 
        while(ch<'0'||ch>'9')ch=getchar(); 
        while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x;} 
    //---------------optimization above-----------------------------------
    int n,cnt; 
    //n:just the total_num
    //cnt:mark the final solution(just the possible number of password)
    short k[1005],ans[5]={0,1,3,3,1};
    //k:use to read the move frequency
    char *ch[1005],a[5]; 
    //a:use to mark the password
    //ch:use to read the given trail
    struct sth{short las[10];void init(){memset(las,0,sizeof(las));} }*suf[1004],tmp; 
    //las's 1 to 9 individually mark the last_appear_site of each number
    bool check(int x){int w,fr;//set two variable 
        fr(cint,i,1,n){//make a loop from 1 to n 
            for(w=1,fr=0;w<=x;w++)//initializate fr as 0
            //and give w a loop from 1 to x
                if(suf[i][fr].las[a[w]])fr=suf[i][fr].las[a[w]];
                //if the last_appear_site is real,just renew the fr
                else break; //or just means that the site isn't real,
                //just means that this suppose is wrong just this case can't be real
                //just break
            if(w<=x)return false;//NO SOLUTION case,just return false 
        }return true;//or,this case is real ,just return true
    } 
    void dfs(int x){ 
        fr(cchar,i,0,9)//make a loop from 0 to 9(type:char)
        if(i!=a[x-1]){//if the number has not been marked
            a[x]=i;//just mark it and then go on
            if(check(x))cnt+=ans[x];//if after check this case is true ,just add the ans
            if(x<4)dfs(x+1);//because the array:ans's section is from 0 to 4
            //so we can only operate when it was inside the section,
            //if x<4,just means that x+1<=4,means satisfy the requirement
            //if satisfy this,just go on to the next operatation
        }} 
    //deep search
    int main(){n=read();//read the total_num of the trail
        fr(cint,i,1,n)//make a loop from 1 to n
        {
            k[i]=read();//read the move frequency
            ch[i]=new char[k[i]+2];suf[i]=new sth[k[i]+2];//set the memory dynamically
            //one point is very important,the  new_type[size]_operation only support pointer
            scanf("%s",ch[i]+1);tmp.init();//read the trail and initialilzate the letters' array
            fd(j,k[i],0){//make a loop from k[i] down to 0
               suf[i][j]=tmp;//well,set the pointer:suf against tmp
               //this operation just means that send the tmp's address to suf[i][j]
               //afer this operation,you can use suf[i][j].lase[] to replace the tmp.las[]
               if(j)//if j is ont zero just means that it is inside the section
               //just go on
               tmp.las[ch[i][j]-'0']=j;//renew the last_appear_site
            }
        }
        a[0]=-1;dfs(1);//initializate the a[0] as a boundary,and then go to the operate_function
        //!-_-!,the highlight part!!!!
        printf("%d",cnt);return 0;//out the ans
    } 
  • 相关阅读:
    global mapper合并多个tif影像
    arcgis 10.2 licence manager无法启动
    Error C2079 'CMFCPropertySheet::m_wndOutlookBar' uses undefined class 'CMFCOutlookBar'
    家里的技嘉B360主板win10 uefi系统安装
    vc 6.0项目转为vs 2017项目遇到 的问题
    PPT学习笔记
    git拉取分支
    将本地源码推向gitee码云
    java反编译工具使用记录
    node.js install and cecium apply
  • 原文地址:https://www.cnblogs.com/muzu/p/7499571.html
Copyright © 2020-2023  润新知