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 3010 using 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。