• NOIP2010普及组题解 -SilverN


    三国游戏

    题目内容不放了

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

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

     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 }
  • 相关阅读:
    java后台对上传的图片进行压缩
    Reflections框架,类扫描工具
    commons-httpclient和org.apache.httpcomponents的区别
    sql里面插入语句insert后面的values关键字可省略
    Callable接口、Runable接口、Future接口
    Java多线程之Callable接口的实现
    说说Runnable与Callable
    论坛贴吧问题:如何终止运行时间超时的线程
    使用Future停止超时任务
    spring的@Transactional注解详细用法
  • 原文地址:https://www.cnblogs.com/AwesomeOrion/p/5439938.html
Copyright © 2020-2023  润新知