• [NOIP2010] 普及组


    三国游戏

    题目内容不放了

    由于电脑总是会拆掉最大的组合,所以玩家最多只能得到数值第二大的组合

    那么找出第二大的组合就行了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int d[510][510];
     7 int n;
     8 int fst,snd,ans;
     9 int main(){
    10     scanf("%d",&n);
    11     int i,j,x;
    12     for(i=1;i<n;i++)
    13       for(j=i+1;j<=n;j++)
    14       {
    15           scanf("%d",&d[i][j]);
    16           d[j][i]=d[i][j];
    17       }
    18     for(i=1;i<=n;i++){
    19       fst=0;snd=0;
    20       for(j=1;j<=n;j++){
    21           if(d[i][j]>fst){
    22               snd=fst;
    23               fst=d[i][j];
    24           }
    25         else if(d[i][j]>snd)snd=d[i][j];
    26         if(snd>ans)ans=snd;
    27       }
    28     }
    29     printf("1
    %d",ans);
    30     return 0;
    31 }

     

     

    导弹拦截

    题目描述

    经过 11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为 0 时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。

    某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。

    输入输出格式

    输入格式:

     

    第一行包含 4 个整数x1、y1、x2、y2,每两个整数之间用一个空格隔开,表示这两套导弹拦截系统的坐标分别为(x1, y1)、(x2, y2)。 第二行包含 1 个整数 N,表示有 N颗导弹。接下来 N行,每行两个整数 x、y,中间用 一个空格隔开,表示一颗导弹的坐标(x, y)。不同导弹的坐标可能相同。

     

    输出格式:

     

    输出文件名 missile.out。

    输出只有一行,包含一个整数,即当天的最小使用代价。

     

    输入输出样例

    输入样例#1:
    0 0 10 0
    2
    -3 3
    10 0
    输出样例#1:
    18
    输入样例#2:
    0 0 6 0
    5
    -4 -2
    -2 3
    4 0
    6 -2
    9 1
    输出样例#2:
    30

    说明

    两个点(x1, y1)、(x2, y2)之间距离的平方是(x1− x2)2+(y1−y2)2。

    两套系统工作半径 r1、r2的平方和,是指 r1、r2 分别取平方后再求和,即 r12+r22。

    【样例 1 说明】

    样例1 中要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分别为18 和0。

    【样例2 说明】

    样例中的导弹拦截系统和导弹所在的位置如下图所示。要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分别为20 和10。

    【数据范围】

    对于10%的数据,N = 1

    对于20%的数据,1 ≤ N ≤ 2

    对于40%的数据,1 ≤ N ≤ 100

    对于70%的数据,1 ≤ N ≤ 1000

    对于100%的数据,1 ≤ N ≤ 100000,且所有坐标分量的绝对值都不超过1000。

     

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 int n;
     6 int mxr2[200000];
     7 int fp;
     8 int xa,xb,ya,yb;//两套系统分别为a,b 
     9 struct ds{
    10     int a,b;
    11 }di[200000];
    12 int ncmp(ds a,ds b){//以点到a的距离为标准从小到大排序 
    13     return a.a<b.a;
    14 }
    15 int dis(int x1,int y1,int x2,int y2){//求距离 
    16     return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
    17 }
    18 int main(){
    19     scanf("%d%d%d%d",&xa,&ya,&xb,&yb);
    20     scanf("%d",&n);
    21     int i,j;
    22     for(i=1;i<=n;i++){
    23         int x,y;
    24         scanf("%d%d",&x,&y);
    25         di[i].a=dis(x,y,xa,ya);
    26         di[i].b=dis(x,y,xb,yb);
    27     }
    28     sort(di+1,di+n+1,ncmp);
    29     int mx=0;
    30     mxr2[n+1]=0;
    31     for(i=n;i>=1;i--){
    32         if(di[i].b>mx){
    33             mx=di[i].b;
    34         }
    35         mxr2[i]=mx;
    36     }
    37     int minn=1000000000;
    38     for(i=1;i<=n;i++){
    39         int mxr1=di[i].a;
    40         minn=min(minn,mxr1+mxr2[i+1]);
    41     }
    42     minn=min(minn,mxr2[1]);
    43     cout<<minn;
    44     return 0;
    45 }

     

     

    以其中一个雷达a为中心,从小到大排序各点到其距离,然后枚举该雷达管控的导弹数量,剩下的由雷达b管控

    找最优解就行

     

    数字统计

    题目描述

    请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6

    次。

    输入输出格式

    输入格式:

     

    输入文件名为 two.in。

    输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。

     

    输出格式:

     

    输出文件名为 two.out。

    输出共 1 行,表示数字 2 出现的次数。

     

    输入输出样例

    输入样例#1:
    【输入样例1】
    2 22
    【输入样例2】
    2 100
    输出样例#1:
    【输出样例1】
    6
    【输出样例2】
    20

    说明

    1 ≤ L ≤R≤ 10000。

     

    不用解释

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 int L,R;
     6 int ct(int n){
     7     int ans=0;
     8     while(n){
     9         if(n%10==2)ans++;
    10         n/=10;
    11     }
    12     return ans;
    13 }
    14 int main(){
    15     scanf("%d%d",&L,&R);
    16     int i,j;
    17     int cnt=0;
    18     for(i=L;i<=R;i++){
    19         cnt+=ct(i);
    20     }
    21     cout<<cnt;
    22     return 0;
    23 }

     

    接水问题

    题目描述

    学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1。

    现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1到 n 编号,i 号同学的接水量为 wi。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第 x 秒结束时完成接水,则 k 同学第 x+1 秒立刻开始接水。若当前接水人数 n’不足 m,则只有 n’个龙头供水,其它 m−n’个龙头关闭。

    现在给出 n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

    输入输出格式

    输入格式:

     

    输入文件名为 water.in。

    第 1 行 2 个整数 n 和 m,用一个空格隔开,分别表示接水人数和龙头个数。

    第 2 行 n 个整数 w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。

     

    输出格式:

     

    输出文件名为 water.out。

    输出只有一行,1 个整数,表示接水所需的总时间。

     

    输入输出样例

    输入样例#1:
    【输入样例1】
    5 3 
    4 4 1 2 1 
    【输入样例2】
    8 4 
    23 71 87 32 70 93 80 76 
    输出样例#1:
    【输出样例1】
    4
    【输出样例2】
    163

    说明

    【输入输出样例 1 说明】

    第 1 秒,3 人接水。第 1 秒结束时,1、2、3 号同学每人的已接水量为 1,3 号同学接完水,4 号同学接替 3 号同学开始接水。

    第 2 秒,3 人接水。第 2 秒结束时,1、2 号同学每人的已接水量为 2,4 号同学的已接水量为 1。

    第 3 秒,3 人接水。第 3 秒结束时,1、2 号同学每人的已接水量为 3,4 号同学的已接水量为 2。4 号同学接完水,5 号同学接替 4 号同学开始接水。

    第 4 秒,3 人接水。第 4 秒结束时,1、2 号同学每人的已接水量为 4,5 号同学的已接水量为 1。1、2、5 号同学接完水,即所有人完成接水。

    总接水时间为 4 秒。

    【数据范围】

    1≤n≤10000,1≤m≤100 且 m≤n;

    1≤wi≤100。

     

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 int n,m,w[20000];
     6 int ans[20000];
     7 int main(){
     8     scanf("%d%d",&n,&m);
     9     int i,j;
    10     for(i=1;i<=n;i++)scanf("%d",&w[i]);
    11     int mi;
    12     for(i=1;i<=n;i++){
    13         mi=1;
    14         for(int j=1;j<=m;j++)if(ans[j]<ans[mi])mi=j;
    15         ans[mi]+=w[i];
    16     }
    17     int mx=0;
    18     for(i=1;i<=m;i++)if(ans[i]>mx)mx=ans[i];
    19     cout<<mx;
    20     return 0;
    21 }

     

    本文为博主原创文章,转载请注明出处。
  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5550610.html
Copyright © 2020-2023  润新知