zoukankan      html  css  js  c++  java
  • 10.18 noip模拟试题

    分火腿

    (hdogs.pas/.c/.cpp)

    时间限制:1s;内存限制 64MB

    题目描述:

    小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿。为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份。请问最少要切几刀?

    输入描述:

    第一行一个整数T,表示有T组数据。

    接下来T组数据,每组共一行,有两个数字n,m。

    输出描述:

    每组数据一行,输出最少要切的刀数。

    样例输入:

    2

    2 6

    6 2

    样例输出:

    4

    0

    数据范围:

    100%的数据保证T<=1000;n,m<=2147483647。

    /*数论题 似乎搞麻烦了 可以化简*/
    #include<iostream>
    #include<cstdio>
    #define ll long long
    using namespace std;
    ll T,n,m,lcm,gcd;
    ll Gcd(ll x,ll y){
        return y?Gcd(y,x%y):x;
    }
    ll Lcm(ll x,ll y){
        return x/Gcd(x,y)*y;
    }
    int main()
    {
        freopen("hdogs.in","r",stdin);
        freopen("hdogs.out","w",stdout);
        cin>>T;
        while(T--){
            cin>>n>>m;
            gcd=Gcd(n,m);
            n/=gcd;m/=gcd;
            lcm=Lcm(n,m);
            ll x=(lcm-n)/n*gcd;
            cout<<x<<endl;
        }
        return 0;
    } 
    View Code

    无聊的会议

    (meeting.pas/.c/.cpp)

    时间限制:1s;内存限制 128MB

    题目描述:

    土豪学长作为一名光荣的学生会干部,每天要参加很多无聊的会议。他发现:他开会的会议桌一定是正n边形,n个干部坐在这个多边形顶点上。因为太无聊了,所以他想要数出所有的“完全”等腰三角形——这种等腰三角形的三个顶点一定全是给出n多边形的顶点,且三个顶点上坐的干部性别相同。

    土豪学长是土豪,他用1000000000%10的佣金雇用你,让你帮他数。PS:如果两个“完全”等腰三角形三个顶点相同,计算时只算一个。

    输入描述:

    第一行一个数字T,表示有T组数据。

    接下来有T组数据,每组数据共一行。这一行给出一个长度为n的字符串,表示正n边形n个顶点上干部的性别。1为男,0为女。

    输出描述:

    对于第i组数据:输出”Case i: ans”(不带引号),ans为“完全”等腰三角形的数量。

    样例输入:

    5

    0001

    01

    10001

    1101010

    111010

    样例输出:

    Case 1: 1

    Case 2: 0

    Case 3: 1

    Case 4: 3

    Case 5: 2

    数据范围:

    40%的数据保证n<=20

    100%的数据保证 n<=10^6

    所有数据保证T<=10

    /*
    n*n*n暴力40 开始傻逼的写x==y==z....
    正解比较神奇 看不懂....又没有注释
    于是弃疗了QAQ 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 2000010
    using namespace std;
    int T,n,ans,sum,cas,x,y,z;
    char s[maxn];
    int main()
    {
        //freopen("meeting.in","r",stdin);
        //freopen("meeting.out","w",stdout);
        scanf("%d",&T);
        while(T--){
            scanf("%s",s);
            n=strlen(s);ans=0;sum=0
            for(int i=0;i<n;i++)
                s[i+n]=s[i];
            for(int i=0;i<n;i++)
                for(int j=i+1;j<n+i;j++)
                    for(int k=j+1;k<n+i;k++)
                        if(s[i]==s[j]&&s[j]==s[k]){
                        x=j-i;y=k-j;z=n*2-k+i-n;
                        if(x==y&&y==z)sum++;
                        else if(x==y||y==z||x==z)ans++;
                    }
            ans/=3;
            if(n%3==0)ans+=sum/3;
            printf("Case %d: %d
    ",++cas,ans);
        }
        return 0;
    }
    View Code

    班服

     (shirt.pas/.c/.cpp)

    时间限制:1s;内存限制 128MB

    题目描述:

    要开运动会了,神犇学校的n个班级要选班服,班服共有100种样式,编号1~100。现在每个班都挑出了一些样式待选,每个班最多有100个待选的样式。要求每个班最终选定一种样式作为班服,且该班的样式不能与其他班级的相同,求所有可能方案的总数,由于方案总数可能很大,所以要求输出mod 1000000007后的答案。

    输入描述:

    共有T组数据。

    对于每组数据,第一行为一个整数n,表示有n个班级。

    2~n+1行,每行有最多100个数字,表示第i-1班待选班服的编号。

    输出描述:

    对于每组数据,输出方案总数 mod 1000000007后的答案。

    样例输入:

    2

    3

    5 100 1

    2

    5 100

    2

    3 5

    8 100

    样例输出:

    4

    4

    数据范围:

    对于30%的数据,1<=T<=3, 1<=n<=3,每班待选样式不超过10种。

    对于50%的数据,1<=T<=5, 1<=n<=5,每班待选样式不超过50种。

    对于100%的数据,1<=T<=10, 1<=n<=10,每班待选样式不超过100种。

    /*简单的状丫 考试没时间了 打了50的暴力*/
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 3010
    #define mod 1000000007
    using namespace std;
    int T,n,c[110][110],f[110][maxn],ans,x;
    char s;
    void Solve(){
        f[0][0]=1;//f[i][j]表示前i种服装 选不选的状态集合为j的方案数 
        for(int i=1;i<=100;i++)
            for(int j=0;j<(1<<n);j++){
                f[i][j]+=f[i-1][j];
                for(int k=1;k<=c[i][0];k++)
                    if(j&(1<<c[i][k]-1)){
                        f[i][j]+=f[i-1][j-(1<<c[i][k]-1)];
                        if(f[i][j]>mod)f[i][j]%=mod;
                    }    
            }
    }
    int main()
    {
        freopen("shirt.in","r",stdin);
        freopen("shirt.out","w",stdout);
        scanf("%d",&T);
        while(T--){
            ans=0;scanf("%d",&n);
            memset(c,0,sizeof(c));
            memset(f,0,sizeof(f));
            for(int i=1;i<=n;i++){
                while(1){
                    scanf("%d",&x);
                    c[x][++c[x][0]]=i;
                    s=getchar();
                    if(s=='
    ')break;
                }
            }
            Solve();
            printf("%d
    ",f[100][(1<<n)-1]);
        }
        return 0;
    }
    View Code

     conclusion

    今天170
    题目比较水 不是很高 而且 暴力分 没 的 全
    QAQ
    T1 数论啊 找找规律就水过了
    T2 不会正解啊 想了好久也没想出来....
    最后还是暴力 
    40%的数据保证n<=20
    100%的数据保证 n<=10^6
    被数据坑了又
    上次以为会有几个在这范围之间的
    然后出了%40剩下都是最大的数据 还浪费了好久
    这次长记性了 反正慢了 n*n*n和n*n区别不大
    然而一个40 一个50
    而且40的还打wa了 x==y==z.....
    暴力wa了就很蛋疼了 又不能排...
    T3 时间不多了 10分钟暴力...
    正解简单状丫dp
    应该能想出来的 可是吧
    QAQ
    总之还是能打快的就打快的 特别是数据范围不清楚的时候
    还有就是 不要一个题卡太久 有时候说不定T3比T2好想
    View Code
  • 相关阅读:
    python作业堡垒机(第十三周)
    Python的一个BOX
    Nginx (限速)限制并发、限制访问速率、限制流量
    Nginx反向代理维基百科镜像制作全解析
    防盗链测试01
    Pycharm和IntelliJ IDEA激活 2017.3.x版本
    [Openwrt 扩展下篇] Openwrt搭建私有云Owncloud 9
    [Openwrt扩展中篇]添加Aria2和webui
    [Openwrt 扩展上篇]USB挂载&U盘启动&Samba共享
    python作业(第十一周)基于RabbitMQ rpc实现的主机管理
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5974293.html
Copyright © 2011-2022 走看看