zoukankan      html  css  js  c++  java
  • 【noip 2016】普及组

    T1.买铅笔

    题目链接

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 int n,p,w,ans=0x3f3f3f3f;
     6 int read()
     7 {
     8     int x=0,f=1;char c=getchar();
     9     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    10     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    11     return x*f;
    12 }
    13 int main()
    14 {
    15     n=read();
    16     for(int i=1;i<=3;i++)
    17     {
    18         w=read(),p=read();
    19         if(n%w)w=n/w+1;
    20         else w=n/w;
    21         ans=min(ans,w*p);
    22     }
    23     printf("%d",ans);
    24     return 0;
    25 }
    View Code

    T2.回文日期

    题目链接

    直接枚举年份,再判断日期是否合法就好了……然而我居然还WA了一发(好菜啊

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int d1,d2,ans;
     6 int read()
     7 {
     8     int x=0,f=1;char c=getchar();
     9     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    10     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    11     return x*f;
    12 }
    13 int rev(int x)
    14 {
    15     int s[5],ans=0;
    16     for(int i=1;i<=4;i++)s[i]=x%10,x/=10;
    17     for(int i=1;i<=4;i++)ans=ans*10+s[i];
    18     return ans;
    19 }
    20 bool pan(int y,int m,int d)
    21 {
    22     int day=31;
    23     if(m==4||m==6||m==9||m==11)day=30;
    24     if(m==2)
    25     {
    26         if((y%4==0&&y%100!=0)||y%400==0)day=29;
    27         else day=28;
    28     }
    29     if(m<1||m>12||d<1||d>day)return false;
    30     return true;
    31 }
    32 int main()
    33 {
    34     d1=read();d2=read();
    35     for(int i=d1/10000;i<=d2/10000;i++)
    36     {
    37         int t=i*10000+rev(i);
    38         if(pan(i,(t/100)%100,t%100)&&t>=d1&&t<=d2)ans++;
    39     }
    40     printf("%d",ans);
    41     return 0;
    42 }
    View Code

    T3.海港

    题目链接

    因为保证输入的ti是递增的,所以开一个队列瞎搞就好了✔

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int n,k,t,ans,nat[100050];
     6 struct node{int t,nat;}q[300050];
     7 int read()
     8 {
     9     int x=0,f=1;char c=getchar();
    10     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    11     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    12     return x*f;
    13 }
    14 int main()
    15 {
    16     n=read();
    17     int head=0,tail=0;
    18     while(n--)
    19     {
    20         t=read();k=read();
    21         while(k--)
    22         {
    23             q[++tail].nat=read();
    24             if(!nat[q[tail].nat])ans++;
    25             nat[q[tail].nat]++;
    26             q[tail].t=t;
    27         }
    28         while(q[head].t<=t-86400)
    29         {
    30             nat[q[head].nat]--;
    31             if(!nat[q[head].nat])ans--;
    32             head++;
    33         }
    34         printf("%d
    ",ans);
    35     }
    36     return 0;
    37 }
    View Code

    T4.魔法阵

    题目链接

    据题意得,xb​​xa​​=2(xd​​xc​​),xc​​xb​​>6(xd​​xc​​),即总距离s>9(xd​​xc​​);

    另,魔法值相同的物品所需要输出的答案是一样的;

    所以可以先枚举(xd​​xc​​),再倒序枚举a的位置并推算出b及最小的合法c、d的位置并进行计算(倒序是为了使前面枚举过的c、d位置合法,方便累加);同理,正序枚举d的位置并推算出c及最大的合法a、b的位置并进行计算。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=15050;
     6 int n,m,num,xa,xb,xc,xd;
     7 int w[N],a[N],b[N],c[N],d[N],id[40050];
     8 int read()
     9 {
    10     int x=0,f=1;char c=getchar();
    11     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    12     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    13     return x*f;
    14 }
    15 int main()
    16 {
    17     n=read();m=read();
    18     for(int i=1;i<=m;i++)
    19     {
    20         id[i]=read();
    21         w[id[i]]++;
    22     }
    23     for(int i=1;i<=n/9;i++)
    24     {
    25         num=0;
    26         for(xa=n-9*i-1;xa>=1;xa--)
    27         {
    28             xb=xa+2*i;xc=xb+6*i+1;xd=xc+i;
    29             num+=w[xc]*w[xd];
    30             a[xa]+=w[xb]*num;
    31             b[xb]+=w[xa]*num;
    32         }
    33         num=0;
    34         for(xd=9*i+1;xd<=n;xd++)
    35         {
    36             xc=xd-i;xb=xc-6*i-1;xa=xb-2*i;
    37             num+=w[xa]*w[xb];
    38             c[xc]+=w[xd]*num;
    39             d[xd]+=w[xc]*num;
    40         }
    41     }
    42     for(int i=1;i<=m;i++)
    43         printf("%d %d %d %d
    ",a[id[i]],b[id[i]],c[id[i]],d[id[i]]);
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    C语言I博客作业08
    C语言寒假大作战02
  • 原文地址:https://www.cnblogs.com/zsnuo/p/7102362.html
Copyright © 2011-2022 走看看