zoukankan      html  css  js  c++  java
  • NOIP水题合集[3/未完待续]

    
    

    NOIP2008pj传球游戏

    题目描述

    上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

    游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。

    聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。两种传球方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有三个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。

    输入输出格式

    输入格式:

    输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。

    输出格式:

    输出文件ball.out共一行,有一个整数,表示符合题意的方法数 

    输入输出样例

    输入样例#1:
    3 3
    输出样例#1:
    2

    说明

    40%的数据满足:3<=n<=30,1<=m<=20

    100%的数据满足:3<=n<=30,1<=m<=30

    2008普及组第三题

    -----------------------------------------
    环状递推,f[i][j]表示第i次到第j个人手里,人从0开始编号
    #include<iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N=35;
    int n,m,f[N][N];
    int dp(int i,int j){//printf("%d %d
    ",i,j);
        int &ans=f[i][j];
        if(ans!=-1) return ans;
        ans=dp(i-1,(j-1+n)%n)+dp(i-1,(j+1)%n);
        //printf("ans %d
    ",ans);
        return ans;
    }
    int main(){
        cin>>n>>m;
        memset(f,-1,sizeof(f));
        f[0][0]=1;
        for(int j=1;j<n;j++) f[0][j]=0;
        cout<<dp(m,0);
    }
    
    
    

    NOIP2007统计数字

    题目描述

    某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

    输入输出格式

    输入格式:

    输入文件count.in包含n+1行;

    第一行是整数n,表示自然数的个数;

    第2~n+1每行一个自然数。

    输出格式:

    输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

    输入输出样例

    输入样例#1:
    8
    2
    4
    2
    4
    5
    100
    2
    100
    
    
    输出样例#1:
    2 3
    4 2
    5 1
    100 2
    

    说明

    40%的数据满足:1<=n<=1000

    80%的数据满足:1<=n<=50000

    100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)

    NOIP 2007 提高第一题

    ----------------------------------------------------------------------

    map轻松水果

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    using namespace std;
    inline int read(){
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,a;
    map<int,int> mp;
    int main(){
        n=read();
        for(int i=1;i<=n;i++){
            a=read();
            mp[a]++;
        }
        map<int,int>::iterator it;
        for(it=mp.begin();it!=mp.end();it++){
            printf("%d %d
    ",it->first,it->second);
        }
    }

    NOIP2013转圈游戏

    题目描述

    n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从0 到 n-1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第n-m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第m-1 号位置。

    现在,一共进行了 10^k轮,请问 x 号小伙伴最后走到了第几号位置。

    输入输出格式

    输入格式:

    输入文件名为 circle.in。

    输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。

    输出格式:

    输出文件名为 circle.out。

    输出共 1 行,包含 1 个整数,表示 10

    k 轮后 x 号小伙伴所在的位置编号。

    输入输出样例

    输入样例#1:
    10 3 4 5
    
    输出样例#1:
    5
    

    说明

    对于 30%的数据,0 < k < 7;

    对于 80%的数据,0 < k < 10^7;

    对于 100%的数据,1 <n < 1,000,000,0 < m < n,1 ≤ x ≤ n,0 < k < 10^9


    裸取模快速幂 

    //
    //  main.cpp
    //  noip2013d2t1
    //
    //  Created by abc on 16/8/2.
    //  Copyright © 2016年 abc. All rights reserved.
    //
    
    #include <iostream>
    typedef long long ll;
    using namespace std;
    ll n,m,k,x;
    
    ll powMod(ll a,ll b){
        ll ans=1;
        for(;b;b>>=1,a=(a*a)%n)
            if(b&1) ans=(ans*a)%n;
        return ans;
    }
    
    int main(int argc, const char * argv[]) {
        cin>>n>>m>>k>>x;
        cout<<(powMod(10,k)*m%n+x)%n;
    
        return 0;
    }


  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/candy99/p/5796425.html
Copyright © 2011-2022 走看看