NOIP模拟4

期望得分:20+100+100=220

实际得分:20+100+100=220

特判相离、内含

对于两圆相交的情况,一直在考虑求交点

实际上相交的面积可以用两个扇形减去两个三角形

正弦定理、余弦定理来搞搞

#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const double pi=acos(-1.0);
const double eps=1e-6;
double Two_point_dis(double x1,double yy1,double x2,double yy2)
{
    return sqrt((x1-x2)*(x1-x2)+(yy1-yy2)*(yy1-yy2));
}
double circle_S(double r)
{
    return pi*r*r;
}
int main()
{
    freopen("standing.in","r",stdin);
    freopen("standing.ans","w",stdout);
    int T;
    scanf("%d",&T);
    double x1,yy1,r1,x2,yy2,r2;
    while(T--)
    {
        scanf("%lf%lf%lf%lf%lf%lf",&x1,&yy1,&r1,&x2,&yy2,&r2);
        double dis=Two_point_dis(x1,yy1,x2,yy2);
        if(dis>=r1+r2)
        {
            printf("%.3lf\n",circle_S(r1)+circle_S(r2));
            continue;
        }
        if(dis<=fabs(r1-r2))
        {
            printf("%.3lf\n",max(circle_S(r1),circle_S(r2)));
            continue;
        }
        else
        {
            double ans=circle_S(r1)+circle_S(r2);
            double j1=acos((r1*r1+dis*dis-r2*r2)/(2*r1*dis));
            double l1=j1*2*r1;
            double j2=acos((r2*r2+dis*dis-r1*r1)/(2*r2*dis));
            double l2=j2*2*r2;
            double s1=l1*r1*0.5;
            double s2=l2*r2*0.5;
            double s=r1*dis*sin(j1);
            ans-=(s1+s2-s);
            printf("%.3lf\n",ans);
        }
    }
}

约瑟夫环问题

公式推导:http://blog.csdn.net/u011500062/article/details/72855826?locationNum=6&fps=1

#include<cstdio>
using namespace std;
int main()
{
    freopen("resist.in","r",stdin);
    freopen("resist.out","w",stdout);
    int n,k,ans=0;
    scanf("%d%d",&n,&k);
    for(int i=2;i<=n;i++)
     ans=(ans+k)%i;
    printf("%d",ans+1);
}

贪心

最大值:

什么视图要求为x,就把对应的位置全弄成x

所以最后每个位置的高度为min(left[j],front[i])

最小值:

先看主视图

如果主视图i=左视图j,且之前第j列没有高度能满足左视图j,那么(i,j)的高度就是主视图i

否则,任选一个左视图j>=主视图i的j,(i,j)的高度为主视图i

再看左视图

j已经被满足,忽略

否则,任选一个主视图i<=左视图j的i,(i,j)的高度为左视图j

#include<cstdio>
#include<iostream>
#define N 1011
using namespace std;
int n,m;
int front[N],leftt[N];
int maxn[N][N],minn[N][N];
int sumd,sumx;
bool have[N];
void read(int &x)
{
    x=0; char c=getchar();
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) { x=x*10+c-‘0‘; c=getchar();}
}
int main()
{
    freopen("neighbor.in","r",stdin);
    freopen("neighbor.out","w",stdout);
    read(n); read(m);
    for(int i=1;i<=n;i++) read(front[i]);
    for(int i=m;i;i--) read(leftt[i]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            maxn[i][j]=front[i];
    for(int j=1;j<=m;j++)
        for(int i=1;i<=n;i++)
            maxn[i][j]=min(maxn[i][j],leftt[j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            sumd+=maxn[i][j];

    bool ok;
    for(int i=1;i<=n;i++)
    {
        ok=false;
        for(int j=1;j<=m;j++)
        {
            if(have[j]) continue;
            if(leftt[j]==front[i]) { minn[i][j]=front[i]; have[j]=ok=true; break; }
        }
        if(ok) continue;
        for(int j=1;j<=m;j++)
            if(leftt[j]>=front[i]) { minn[i][j]=front[i]; break; }
    }
    for(int j=1;j<=m;j++)
    {
        ok=false;
        for(int i=1;i<=n;i++)
            if(minn[i][j]==leftt[j]) { ok=true; break; }
        if(ok) continue;
        for(int i=1;i<=n;i++)
            if(minn[i-1][j]==leftt[j]) { minn[i-1][j]=0; minn[i][j]=leftt[j]; ok=true; break; }
        if(ok) continue;
        for(int i=1;i<=n;i++)
            if(leftt[j]<=front[i]) { minn[i][j]=leftt[j]; break; }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            sumx+=minn[i][j];
    printf("%d %d",sumx,sumd);
}

时间: 2024-10-07 19:58:26

NOIP模拟4的相关文章

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

[BZOJ入门OJ2092][Noip模拟题]舞会

2092: [Noip模拟题]舞会 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 9  Solved: 5 [Submit][Status][Web Board] Description 学校举行舞会啦,一共有N个人参加,所有人站成一排,从左开始编号,最左边的人编号为1 ,最右边的为N.每个人跳舞的熟练度我们用一个整数表示,第i个人的熟练度为Ai,每次熟 练度最接近的一对相邻男女会出列跳舞,如果有多对那么最左边的那一对会先出列,请你给 出出列跳

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻

NOIP模拟赛

#1[Nescafé 31]杯NOIP模拟赛 t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+

NOIP模拟 17.8.18

NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也需要一定量的草作为饲料对于第 i头奶牛来说,它每天可以产 vi升的奶,同时需要 wi千克的草作为饲料现在来自蚯蚓国的九条可怜想借一些奶牛,使借走的这些奶牛每天的总产奶量最大,但九条可怜很穷,每天最多只能提供W千克的草作为饲料,而且她还需要对付跳蚤国的神刀手,所以她把这个问题交给了阿强巴,不不不……阿

NOIP模拟 6.28

NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式]

NOIP模拟17.9.21

NOIP模拟17.9.21 1 任务安排manage.in/.out/.cpp1.1 问题描述你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开始.你最早可以从时间0 开始工作.1.2 输入格式第一行一个整数N,表示任务数量接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截止时间.1.3 输出格式输出一个整数,表示最晚的开始时间,如果不能完成,输出-1.1.4 样例输入43 58

NOIP模拟赛 6.29

2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的命令进行移动,命令包括‘E’.‘S’.‘W’.‘N’四种,分别对应东南西北.执行某个命令时,它会向对应方向移动一个单位.作为新型机器人,它可以执行命令串.对于输入的命令串,每一秒它会按命令行动一次.执行完命令串的最后一个命令后,会自动从头开始循环.在0时刻时机器人

NOIP模拟17.9.22

NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥ ??的位置去,但很不幸数轴上有??个区间是禁区,不能进入.青蛙会选择一个长度??,从原点开始每次向右跳长度为??的一段.一路上青蛙会停的位置是0, ??, 2??,…直到跳到了≥ ??的位置,任意一个位置都不能在禁区中.请求出??的最小值,注意??可以是实数.[输入格式]输入文件为susume.in.输入文件的第一行包含两个整数??和??,含义如问题描述中所述.接下来??行,每行描述一个禁区.每行有两个整数