首页 > 代码库 > 10.30下午考试

10.30下午考试

P76
竞赛时间: ??????????:??-??:??

题目名称
名称 he she it
输入 he.in she.in it.in
输出 he.out she.out it.out
每个测试点时限 1 秒 1 秒 1 秒
内存限制 512MB 512MB 512MB
测试点数目 10 10 10
每个测试点分值 10 10 10
是否有部分分
题目类型 传统 传统 传统

 


【问题描述】
一张长度为N的纸带, 我们可以从左至右编号为0 − N( 纸带最左端标号为
0)。 现在有M次操作, 每次将纸带沿着某个位置进行折叠, 问所有操作之后纸带
的长度是多少。
【输入格式】
第一行两个数字N, M如题意所述。
接下来一行M个整数代表每次折叠的位置。
【输出格式】
一行一个整数代表答案。
【样例输入】
5 2
3 5
【样例输出】
2
【样例解释】
树上有只鸟。
【数据规模与约定】
对于60%的数据, N, M ≤ 3000。
对于100%的数据, N ≤ 10^18, M ≤ 3000。

/*离线做每次折之后 都找出后面还没折的位置变到了那里设折的位置为x,折之前位置为i若i<=x则位置不变 若否则变为2*x-i并且一直保持左端点为0若这之后右边折到0左边 则所有的点加上右边现在位置的相反数 */#include<iostream>#include<cstdio>#include<cstring>#define LL long long#define maxn 3010using namespace std;LL n,m,r;LL w[maxn];LL init(){    LL 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;}int main(){    freopen("he.in","r",stdin);    freopen("he.out","w",stdout);    n=init();m=init();r=n;    for(LL i=1;i<=m;i++)      w[i]=init();    for(LL i=1;i<=m;i++)    {        LL minn=2*w[i]-r;r=w[i];        for(LL j=i+1;j<=m;j++)        {            if(w[j]<=w[i])continue;            w[j]=2*w[i]-w[j];        }        if(minn<0)        {            r-=minn;            for(LL j=i+1;j<=m;j++)              w[j]-=minn;        }    }    cout<<r<<endl;    return 0;}

 



【问题描述】
给你M, S, L, R, 求满足L ≤ (S × x) mod M ≤ R最小的正整数x。

【输入格式】
第一行一个数T代表数据组数。
接下来T行每行四个数代表该组数据的M, S, L, R。
【输出格式】
对于每组数据, 输出一行代表答案。 如果不存在解, 输出“ −1”。
【样例输入】
1
5 4 2 3
【 样例输出】
2
【 样例解释】
叫南小鸟。
【数据规模与约定】
对于30%的数据, 保证有解且答案不超过10^6。
对于另外20%的数据, L = R。
对于100%的数据, 1 ≤ T ≤ 100,0 ≤ M, S, L,R ≤ 10^9。




【问题描述】
N个人坐成一圈, 其中第K个人拿着一个球。 每次每个人会以一定的概率向
左边的人和右边的人传球。 当所有人都拿到过球之后, 最后一个拿到球的人即为
胜者。 求第N个人获胜的概率。( 所有人按照编号逆时针坐成一圈)
【输入格式】
第一行一个数T代表数据组数。
对于每组数据, 第一行两个整数N, K如题意所述。
接下来每行一个实数p代表该人将球传给右边的人的概率。
【输出格式】
对于每组数据, 一行一个实数代表答案, 保留9位小数。
【样例输入】
1
5 1
0.10
0.20
0.30
0.40
0.50
【 样例输出】
0.007692308
【 样例解释】
然后鸟是我的。
【数据规模与约定】
对于20%的数据, N ≤ 3。
对于70%的数据, T, N ≤ 100。
对于100%的数据, T ≤ 10000,1 ≤ N ≤ 100。

 

10.30下午考试