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

今天简单刷了几道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;
}

寻找道路

时间: 2024-08-09 07:35:49

【刷题记录】七月七日忆山东兄弟(呸,是刷题记录)的相关文章

【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个測试题,測试题的大体意思是:删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录. 比如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "

【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录

根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享. package shuai.study.map; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import j

AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源码包-下载/配置/编译/刷机)

特别感谢google官方文档及AOSP源码开放 参考链接: https://source.android.com/source/building-devices.html (官方源码刷device) https://developers.google.com/android/nexus/drivers#makokrt16s (硬件驱动包, 如只是运行模拟器则直接安装即可) https://developers.google.com/android/nexus/images (官方刷机包-下载im

删除Map中Value重复的记录,并且只保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "3

【方法3:Perl版本】删除Map中Value重复的记录,并且只保留Key最小的那条记录

icemouse210写了一个Perl版本的,发挥了脚本高度封装的优势.我把代码贴出来,供大家参考分享. #!/user/bin/perl -w use English; use strict; use warnings; my %test_hash=( "A" => '1', "B" => '2', "C" => "2", "D" => "3", "E

微信运动刷步助手v9.0【免费安卓微信运动刷步神器】

软件名称:   刷步助手v9.0[免费安卓微信运动刷步神器]                     软件大小:1.5MB 软件版本:9.00.0015 软件描述:刷步助手,一款能修改微信运动步数显示的软件,本次已更新到9.0版本,支持安卓微信平台,让你在好友圈内大放光彩.想要一款安卓微信刷运动步数软件的朋友们不妨试试吧! 官网地址:http://www.ishuabu.cn/ 下载地址:https://pan.baidu.com/s/1QzoPYxbe6uP80UWOCJb3wg 环境:And

第八届山东ACM省赛F题-quadratic equation

这个题困扰了我长达1年多,终于在今天下午用两个小时理清楚啦 要注意的有以下几点: 1.a=b=c=0时 因为x有无穷种答案,所以不对 2.注意精度问题 3.b^2-4ac<0时也算对 Problem Description With given integers a,b,c, you are asked to judge whether the following statement is true: "For any x, if a?+b?x+c=0, then x is an inte

记录一次面试中二分查找的算法题

总结一下本次二面的一道算法题,当时代码写到一半,发现自己逻辑好像有问题,然后就没办法往下写了,导致最终没做出来,面试出来百度了一下,瞬间感觉自己......... 废话不多说,直接看题 需求:写一个二分查找,用迭代的方式去实现,并设计该算法的测试案例 面试完后看见这个题目真是简单,直接代码写起 public class Algorithm{ public int binarySearch(int[] nums,int target){ int left = 0; int right = nums

【第60题】【062题库】2019年OCP认证062考试新题

60题.choose one When does a database checkpoint occur? A) When there is an online redo log switch. B) When the SHUTDOWN ABORT command is issued. C) When a user session terminates abnormally. D) When a server process terminates abnorthally. Answer:A (解