10.30 afternoon

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。

暴力60

/*暴力60 似乎离散化一下好的多...考试的时候没时间了23333*/
#include<cstdio>
#define maxn 3010
using namespace std;
int n,m,a[maxn],x,P[maxn],c[maxn][maxn],f[maxn][maxn];
int init(){
    int x=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
int max(int x,int y){
    return x>y?x:y;
}
int main()
{
    freopen("he.in","r",stdin);
    freopen("he.out","w",stdout);
    n=init();m=init();
    for(int i=0;i<=n;i++)
        c[i][++c[i][0]]=i,P[i]=i;
    int p,s1,s2,len=n;
    while(m--){
        x=init();p=P[x];
        s1=p;s2=len-p;
        if(s1<s2){
            for(int i=p+1,k=p-1;k>=0;i++,k--)
                for(int j=1;j<=c[k][0];j++)
                    c[i][++c[i][0]]=c[k][j];
            for(int i=p,k=0;i<=len;i++,k++){
                c[k][0]=0;
                for(int j=1;j<=c[i][0];j++){
                    c[k][++c[k][0]]=c[i][j];
                    P[c[i][j]]=k;
                }
            }
        }
        else{
            for(int i=p+1,k=p-1;i<=len;i++,k--)
                for(int j=1;j<=c[i][0];j++){
                    c[k][++c[k][0]]=c[i][j];
                    P[c[i][j]]=k;
                }
        }
        len=max(s1,s2);
    }
    printf("%d\n",len);
    return 0;
}

离线就100....

/*离散化.... 考试的时候脑抽拿n直接做的*/
#include<cstdio>
#define ll long long
#define maxn 3010
#ifdef unix
#define LL "%lld\n"
#else
#define LL "%I64d\n"
#endif
using namespace std;
ll n,m,a[maxn],c[maxn];
ll init(){
    ll x=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
ll max(ll x,ll y){
    return x>y?x:y;
}
ll min(ll x,ll y){
    return x<y?x:y;
}
int main()
{
    freopen("he.in","r",stdin);
    freopen("he.out","w",stdout);
    n=init();m=init();
    for(int i=1;i<=m;i++)
        c[i]=init();
    for(int p=1;p<=m;p++){
        ll P=c[p],mi=P*2-n;//这个才是右端点 不是P*2-c[m]233s
        ll s1=P,s2=n-P;n=max(s1,s2);
        for(int i=1;i<=m;i++)
            if(c[i]>P)c[i]=2*P-c[i];
        if(mi<0)for(int i=1;i<=m;i++)
            c[i]-=mi;
    }
    printf(LL,n);
    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。

暴力50

/*这题无了语了 本来50来 想了想 嗯都用gcd搞吧 可能快点 然后就20了*/
#include<iostream>
#include<cstdio>
#define maxn 1000000
#define ll long long
#define inf 1e9+10
using namespace std;
ll T,M,S,L,R,x,y,gcd,ans;
ll init(){
    ll x=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
ll min(ll x,ll y){
    return x<y?x:y;
}
void Cl(){
    ans=inf;x=0;y=0;gcd=0;
}
void Gcd(ll a,ll b){
    if(b==0){x=1;y=0;gcd=a;}
    else{
        Gcd(b,a%b);
        ll tmp=x;x=y;y=tmp-a/b*y;
    }
}
void Solve1(){
    if(S%M==0){
        ans=-1;return;
    }
    Gcd(S,M);int r=0,falg=0;
    for(int c=L;c<=R;c++){
        if(c%gcd)continue;
        ll tmp=x*c/gcd;r=M/gcd;
        tmp=(tmp%r+r)%r;falg=1;
        if(tmp==0)tmp+=r;
        ans=min(ans,tmp);
    }
    if(falg==0)ans=-1;
}
void Solve2(){
    if(S%M==0){
        ans=-1;return;
    }
    int falg=0;
    for(x=1;x<=1000000;x++){
        ll r=(S*x)%M;
        if(r>=L&&r<=R){
            falg=1;break;
        }
    }
    if(falg)ans=x;
    else ans=-1;
}
int main()
{
    freopen("she.in","r",stdin);
    freopen("she.out","w",stdout);
    T=init();
    while(T--){
        M=init();S=init();
        L=init();R=init();
        Cl();
        if(R==L)Solve1();
        else Solve2();
        cout<<ans<<endl;
    }
    return 0;
}

正解嘛 你猜


【问题描述】
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。

Orz...

/*还有待研究2333*/
#include<cstdio>
#define maxn 110
#define ld long double
using namespace std;
int T,n,k,a[maxn],b[maxn];
ld p[maxn],q[maxn],P,Q,ans;
void Cal(int m){
    /*int l=a[m],r=b[m];
    q[l]=(q[m]*q[l])/(1-q[m]*p[l]);
    p[l]=1-q[l];
    p[r]=(p[m]*p[r])/(1-p[m]*q[r]);
    q[r]=1-p[r];
    b[l]=r;a[r]=l;*/
    int l=a[m],r=b[m];
    long double pa=p[l],pb=p[m],pc=p[r];
    p[l]=pa*pb/(1-pa*(1-pb));q[l]=1-p[l];
    q[r]=(1-pc)*(1-pb)/(1-pb*(1-pc));p[r]=1-q[r];
    b[l]=r;a[r]=l;
}
int main()
{
    freopen("it.in","r",stdin);
    freopen("it.out","w",stdout);
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++){
            scanf("%llf",&p[i]);
            q[i]=1-p[i];
            a[i]=i-1;b[i]=i+1;
        }
        a[1]=n;b[n]=1;
        if(n==2)ans=1;
        else if(n==3)k==1?1-q[1]:1-p[2];
        else if(k==1){
            for(int i=2;i<n-1;i++)Cal(i);ans=1-q[1];
        }
        else if(k==n-1){
            for(int i=2;i<n-1;i++)Cal(i);ans=1-p[n-1];
        }
        else {
            for(int i=2;i<k;i++)Cal(i);
            for(int i=k+1;i<n;i++)Cal(i);
            ans=q[k]*p[1]+q[n-1]*p[k];
        }
        printf("%.9f\n",double(ans));
    }
    return 0;
}

时间: 2024-11-08 03:16:02

10.30 afternoon的相关文章

2016.10.30 NOIP模拟赛 day2 PM 整理

满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经被覆盖了,我的做法是递归去推出它现在在哪个位置,不仅超时,而且答案错误. 也曾想过用数组去存下它当前的位置,但是被10^18的数据吓到了. 正解:并不是所有的坐标都有用,仅仅是那m个将要用到的点有用,所以每次折叠,就只对之后的有用的k个点进行更新,这样就行了. 时间复杂度O(m^2) 不会超时的.

背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

原文:背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) AutoSuggestBox 示例Controls/TextControl/AutoSuggestBoxDemo.xaml <Page x:Class="Windows10.Controls.TextControl.AutoSuggestBoxDemo" xmlns="http:/

10.28 rsync工具介绍 - 10.29/10.30 rsync常用选项 - 10.31 rsync通过ssh同步

- 10.28 rsync工具介绍 - 10.29/10.30 rsync常用选项 - 10.31 rsync通过ssh同步 # 10.28 rsync工具介绍 -/A目录 --> /B目录(A目录更新了一个文件,每次更新都需要把A目录拷贝到B目录),如果用cp命令 比较浪费时间,耗费磁盘空间,磁盘压力 读写之类的, -使用rsync -av /etc/passwd /tmp/1.txt -a选项就是包含了好几个选项  ,v 是可视化,可以看到拷贝的过程 ``` [[email protecte

2016.10.30 对时间的感悟

2016.10.30 对时间的感悟 时间的单位是什么,年,月日,时,分秒? 对于我们来说时间应该是这辈子,然后被我们 切割成一个个时间段,这很有意思, 其实我想说, 有时候我们感觉来不及, 我们很烦躁, 我们快乐不起来, 可能是因为我们没有在自己规定的时间段完成规定的目标, 我们希望小孩上好的学校, 希望工资高点, 希望今天公安局办理身份证的人员有上班等等, 当我们完不成目标的时候就会有各种不良反应, 不是说有目标不好,有目标是很好的,这没毛病, 问题是我们在不够了解这个世界的规则的情况下常常高

gnuWin32-mini-2016.10.30

2016-10-28 04:48 1,017,856 awk.exe ver 4.1.4 2016-10-29 00:26 77,312 bc.exe ver 1.06 2016-10-30 01:43 1,037,312 cat.exe ver 8.25 2016-10-29 12:42 987,648 cmp.exe ver 3.5 2016-10-29 00:26 44,544 dc.exe ver 1.3 2016-10-29 12:42 1,166,848 diff.exe ver 3

八周二次课(1月30日) 10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步

八周二次课(1月30日)10.28 rsync工具介绍10.29/10.30 rsync常用选项10.31 rsync通过ssh同步===================================================================================================================================================================rsync命令:是一个远程数据同步工具,可

10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通

八周二次课 10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步 10.28 rsync工具介绍 10.29/10.30 rsync常用选项 设置rsync Rsync 进行同步 删除多余文件 排除掉*.txt的文件 参数:-P 参数:-u 10.31 rsync通过ssh同步 原文地址:http://blog.51cto.com/wbyyy/2067136

10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync

10.28 数据备份工具rsyncrsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),但是与scp和cp的区别在于:如果数据已经存在,不会覆盖以前的数据rsync会先判断数据是否 存在和新数据的差异,只有数据不同时,才会把不同的部分覆盖yum install -y rsync(安装rsync工具) 10.29/10.30 rsync常用选项rsync的常用选项:-a 包含-rtplgoD-r 同步目录的时候也加上(类似于 cp -r)-v 同步的时候显示同步的进程

【谜客帝国】第140届兰萱联想专场(2018.10.30)

 [谜客帝国]第140届兰萱联想专场(2018.10.30) 主持:瓷   计分:默沫 1.沧海桑田.抱布贸丝.金兵撼山.吹灰之力(一字)易 2.云长拒豪宅.逃出囹圄来.红杏春意闹.破门阖又开(三字)关不住 3.浅尝辄止.滑稽出演.少年之行.不大喝茶(二字)小品 4.余高阳之苗裔兮.滕王阁主今何在.董卓废之立新君.古诗有云君不见(二字)少帝 5.匈奴鲜卑并川渝.顽皮妖宝憨态掬.因何前倨后恭也.似闻主动点炮语(二字)胡巴 6.正是阿堵物.三强皆出色.一掷千金者.实乃囊羞涩(三字)不差钱 7.上书帝