码迷,mamicode.com
首页 > 其他好文 > 详细

【刷题记录】七月七日忆山东兄弟(呸,是刷题记录)

时间:2016-07-09 09:18:13      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

今天简单刷了几道NOIP2014的题,今天发代码。

————————————————————————————————————————————————————————————————————————-—

【NOIP201401-珠心算测验】

技术分享
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b);
int main()
{
    int n,i,a[103]={0};
    int ans=0;
    int j,k,flag;
    
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    qsort(a,n,sizeof(a[0]),cmp);
    for(i=0;i<n;i++)
    {
        flag=0;
        for(j=0;j<n&&(a[j]<=a[i]);j++)
        {
            for(k=j+1;k<n&&(a[j]+a[k]<=a[i]);k++)
            {
                if(a[i]==a[j]+a[k])
                {
                    ans++;
                    flag=1;
                    break;
                }
            }
            if(flag==1) break;
        }
    }
    printf("%d\n",ans);
    return 0;
}
int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}
珠心算测验

【NOIP201402-比例化简】

技术分享
#include<iostream>
#include<cstdio>
using namespace std;
int gcd(int x,int y)
{
    if(y==0)return x;
    else return gcd(y,x%y);
}

int main()
{
    int i,j,k;
    int a,b,l,a1,b1;
    double k1,k2,k3;
    cin>>a>>b>>l;
    k1=a*1.0/b;
    k3=l*1.0;
    for(i=1;i<=l;i++)
        for(j=1;j<=l;j++)
            if(gcd(i,j)==1)
            {
                k2=i*1.0/j;
                if(k2>=k1 && k2-k1<k3)
                {
                    a1=i;b1=j;
                    k3=k2-k1;
                }
            }
    cout<<a1<<" "<<b1;
    return 0;
}
比例化简

【NOIP201403-螺旋矩阵】

技术分享
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int n,a,b,i,j,q=0,sum=1,t,l;
    cin>>n>>a>>b;
    for(i=1;i<=n;i++)
        if(a>=i&&a<=n-i+1&&b>=i&&b<=n-i+1) q++;
        else break;
    l=n+2;
    for(i=1;i<=q-1;i++)
    {
        l=n-2*(i-1);
        sum=sum+4*(l-1);
    }
    l=l-2;
    if(a==q)
        t=b-(q-1)-1;
    if(b==n-(q-1))
        t=a-(q-1)-1+(l-1);
    if(a==n-(q-1))
        t=n-(q-1)-b+(l-1)*2;
    if(b==q&&a!=q)
        t=n-(q-1)-a+(l-1)*3;
    cout<<sum+t;
    //system("pause");
    return 0;
}
螺旋矩阵

【NOIP201405-生活大爆炸版石头剪刀布】

技术分享
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#define ll long long 
using namespace std;
ll 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,na,nb;
int ans1,ans2;
int a[205],b[205];
int c[5][5]={
    {0,0,1,1,0},
    {-1,0,0,1,0},
    {-1,-1,0,0,1},
    {-1,-1,-1,0,1},
    {-1,-1,-1,-1,0},
    };
int cal(int x,int y)
{
    if(x>y)return c[y][x]^1;
    else return c[x][y];
}
int main()
{
    n=read();na=read();nb=read();
    for(int i=1;i<=na;i++)
        a[i]=read();
    for(int i=1;i<=nb;i++)
        b[i]=read();
    for(int i=1;i<=n;i++)
    {
        int x=a[(i-1)%na+1],y=b[(i-1)%nb+1];
        ans1+=cal(x,y);
        ans2+=cal(y,x);
    }
    printf("%d %d\n",ans1,ans2);
    return 0;
}
生活大爆炸版石头剪刀布

【NOIP201408-无线网络发射器选址】

技术分享
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
long long rsum=-1;
int rcnt;
int d,n;
struct Q
{
    int x,y,k;
}q[21];
void work(void)
{
    for (int x=0;x<=128;x++)
        for (int y=0;y<=128;y++)
        {
            long long sum=0;
            for (int i=1;i<=n;i++) 
            if (x-d<=q[i].x&&q[i].x<=x+d&&y-d<=q[i].y&&q[i].y<=y+d) sum+=q[i].k;
            if (rsum<sum)
            {
                rsum=sum;
                rcnt=1;
            }
            else rcnt+=rsum==sum;
        }
    printf("%d %lld\n",rcnt,rsum);
}
int main(void)
{
    scanf("%d%d",&d,&n);
    for (int i=1;i<=n;i++) scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].k);
    work();
    //system("pause");
    return 0;
}
无线网络发射器选址

【NOIP201409-寻找道路】

技术分享
#include <cstdio>
#include <cmath>
#include <queue>
#include <iostream>
#define INF 0x7fffffff
#define mes(a,x) memset(a,x,sizeof(a))
#define maxn 10010
#define maxR 200010
using namespace std;
struct Road
{
       int x,y,d,next; 
}road[maxR]; 

int first[maxn],tot; 
int d[maxn];
bool inq[maxn]; 
queue< int > Q; 
int x[maxR],y[maxR],n,m,st,ed; 

void Ins(int x,int y,int d)
{
     tot++; 
     road[tot].x=x; road[tot].y=y; road[tot].d=d; 
     road[tot].next=first[x];  first[x]=tot; 
}

void Change()
{
     int i,j,x,y,k; 
     for(i=1;i<=n;i++)
     {
         if(d[i]==INF)
         {
             x=i; 
             for(k=first[x];k!=-1;k=road[k].next)
             {
                y=road[k].y; 
                inq[y]=1; 
             }
             inq[x]=1; 
         }
     }
}

void Spfa(int ST)
{
     int x,y,k,i,j; 
     while(!Q.empty()) Q.pop();  
     inq[ST]=1; d[ST]=0; 
     Q.push(ST); 
     while(!Q.empty())
     {
            x=Q.front();   
            for(k=first[x];k!=-1;k=road[k].next)
            {
                 y=road[k].y;
                 if(d[y]>d[x]+road[k].d)
                 {
                     d[y]=d[x]+road[k].d; 
                     if(!inq[y])
                     {
                           Q.push(y);
                           inq[y]=1;  
                     }
                 } 
            }        
            inq[x]=0;
            Q.pop();  
     }
     
}

void Solve()
{
     int i,j;
     mes(first,-1); tot=0; 
     for(i=1;i<=m;i++) Ins(y[i],x[i],1); 
     for(i=1;i<=n;i++) {d[i]=INF; inq[i]=0;}
     Spfa(ed); 
     if(d[st]==INF) {printf("-1\n"); return ;}
     mes(inq,0); 
     Change(); 
     for(i=1;i<=n;i++) d[i]=INF; 
     mes(first,-1); tot=0; 
     for(i=1;i<=m;i++) Ins(x[i],y[i],1); 
     Spfa(st); 
     if(d[ed]==INF) printf("-1\n"); 
     else printf("%d\n",d[ed]); 
}

int main()
{
    int i,j; 
    scanf("%d%d",&n,&m); 
    for(i=1;i<=m;i++) scanf("%d%d",&x[i],&y[i]); 
    scanf("%d%d",&st,&ed); 
    Solve(); 
    //system("pause");
    return 0;
}
寻找道路

 

【刷题记录】七月七日忆山东兄弟(呸,是刷题记录)

标签:

原文地址:http://www.cnblogs.com/lijiaxin-blog-cpp/p/5655159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!