模拟2

   
ID

Origin

Title
6 / 10 Problem A HDU 4706 Children‘s Day
7 / 22 Problem B HDU 4707 Pet
5 / 25 Problem C HDU 4708 Rotation Lock Puzzle
6 / 26 Problem D HDU 4709 Herding
1 / 9 Problem E HDU 4710 Balls Rearrangement
    Problem F HDU 4711 Weather
  3 / 10 Problem G HDU 4712 Hamming Distance
    Problem H HDU 4713 Permutation
  0 / 1 Problem I HDU 4714 Tree2cycle
6 / 44 Problem J HDU 4715 Difference Between Primes

A.

d.按要求输出‘N‘就行了。注意字母是连续使用的,而不是再从‘a‘开始。

#include<iostream>
#include<stdio.h>
using namespace std;

char str[16][16];
int t;

void display(int n){

    int i,j;

    for(i=0;i<16;++i){
        for(j=0;j<16;++j){
            str[i][j]=‘ ‘;
        }
    }

    for(i=0,j=0;i<n;++i){
        str[i][j]=‘a‘+t;
        t=(t+1)%26;
    }

    for(i=n-2,j=1;i>0&&j<n-1;--i,++j){
        str[i][j]=‘a‘+t;
        t=(t+1)%26;
    }

    for(i=0,j=n-1;i<n;++i){
        str[i][j]=‘a‘+t;
        t=(t+1)%26;
    }

    for(i=0;i<n;++i){
        for(j=0;j<n;++j){
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
}

int main(){

    int i;

    t=0;
    for(i=3;i<=10;++i){
        display(i);
    }

    return 0;
}

B.

d.这个题意啊。。。尴尬。。三天没找到仓鼠,说明它在诱捕的有效范围之外。。

ps:nearer than是小于等于的意思吗?怎么感觉是小于呢。。不过这题从样例可以得知是小于等于。

s.直接bfs

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;

#define MAXN 200005

int sum;
int D;
int dis[MAXN];
bool vis[MAXN];

struct Edge{
    int to,next;
}edge[MAXN];
int head[MAXN],tot;

void addedge(int u,int v){
    edge[tot].to=v;
    edge[tot].next=head[u];
    head[u]=tot++;

}

void init(){
    tot=0;
    memset(head,-1,sizeof(head));
    memset(vis,false,sizeof(vis));
}

void bfs(int u){

    queue<int> myQueue;
    myQueue.push(0);
    dis[0]=0;
    vis[0]=true;
    ++sum;
    int i;
    int v;

    while(!myQueue.empty()){
        v=myQueue.front();
        myQueue.pop();

        for(i=head[v];i!=-1;i=edge[i].next){

            if(dis[v]+1<=D&&!vis[edge[i].to]){
                myQueue.push(edge[i].to);
                dis[edge[i].to]=dis[v]+1;
                vis[edge[i].to]=true;
                ++sum;
            }
        }

    }

}

int main(){

    int T;
    int N;
    int x,y;
    int i;

    scanf("%d",&T);

    while(T--){
        scanf("%d%d",&N,&D);

        init();
        for(i=1;i<N;++i){
            scanf("%d%d",&x,&y);
            addedge(x,y);
            addedge(y,x);
        }

        sum=0;

        bfs(0);

        printf("%d\n",N-sum);
    }

    return 0;
}

C.

d.一圈是一层,求旋转的最少次数,使对角线和最大。

s.找规律

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int ma[16][16];
int sum[10][10];
int q[12]={0,1,2,3,4,5,6,7,8,9,10,11};

int main(){

    int n;
    int i,j;
    int t;
    int k;
    int ma_sum,ma_loc;
    int tol_sum;
    int tol_step;

    while(~scanf("%d",&n)){
        if(n==0){
            break;
        }

        for(i=0;i<n;++i){
            for(j=0;j<n;++j){
                scanf("%d",&ma[i][j]);
            }
        }

        t=n/2;
        memset(sum,0,sizeof(sum));
        tol_sum=0;
        tol_step=0;
        for(i=0;i<t;++i){
            ma_sum=0;
            for(j=0;j<(i+1)*2;++j){
                sum[i][j]=ma[t-i-1+q[j]][t-i-1]+ma[t+i+1][t-i-1+q[j]]+ma[t+i+1-q[j]][t+i+1]+ma[t-i-1][t+i+1-q[j]];//主要是这个地方,写对就差不多了。
                if(sum[i][j]>ma_sum){
                    ma_sum=sum[i][j];
                    ma_loc=j;
                }
            }
            if(ma_loc-0<(i+1)*2-ma_loc){
                tol_step+=ma_loc;
            }
            else{
                tol_step+=(i+1)*2-ma_loc;
            }

            tol_sum+=ma_sum;
        }

        printf("%d %d\n",tol_sum+ma[t][t],tol_step);

    }

    return 0;
}

D.

d.从一些点中找出3个,使围成的三角形面积最小。

s.才100个点,三重循环。

ps:用海伦公式wa了,改向量叉乘才过。为啥wa,精度问题?抽空再看看。

#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;

double X[128];
double Y[128];

double ff(int i,int j,int k){
    return fabs(X[i]*Y[j]+Y[i]*X[k]+X[j]*Y[k]-X[k]*Y[j]-X[j]*Y[i]-X[i]*Y[k])/2;
}

int main(){

    int T;
    int N;
    int i,j,k;
    double area;
    double mi_area;

    scanf("%d",&T);

    while(T--){
        scanf("%d",&N);

        for(i=0;i<N;++i){
            scanf("%lf%lf",&X[i],&Y[i]);
        }
        area=0;
        mi_area=-1;
        for(i=0;i<N;++i){
            for(j=i+1;j<N;++j){
                for(k=j+1;k<N;++k){
                    area=ff(i,j,k);

                    if(area!=0){
                        if(area<mi_area||mi_area<0){
                            mi_area=area;
                        }
                    }

                }
            }
        }
        if(mi_area<0){
            printf("Impossible\n");
        }
        else{
            printf("%.2f\n",mi_area);
        }
    }

    return 0;
}

E.

s.找规律

c.张

#include <iostream>
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
#define MAX 500
#define INF 0x3f3f3f3f
int mmap[MAX][MAX];
int nodeMark[MAX];
#include<iostream>
#include<stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <set>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
int arr[5000005],coun=0;

LL gcd(LL a,LL b){
  LL temp;
  while(a%b!=0){
    temp=a;
    a=b;
    b=temp%b;
  }
  return b;
}

LL fun(LL a,LL b,LL sum,bool iscir){
  LL tempa=arr[0],tempb=arr[1];
  int xxx=2;
  LL res=0;
  while(tempa<sum && tempb<sum){
    if(tempa>tempb)  res=res+(tempa-tempb)*abs(tempb%a-tempb%b);
    else res=res+(tempb-tempa)*abs(tempa%a-tempa%b);
    tempb<tempa ? tempb=arr[xxx++] : tempa=arr[xxx++];
  }
 // cout<<"*********"<<tempa<<‘ ‘<<tempb<<‘ ‘<<res<<"******\n"<<endl;
  //if(!iscir) sum++;
  if(tempa<sum)
    res=res+(sum-tempa)*abs(tempa%a-tempa%b);
  if(tempb<sum)
     res=res+(sum-tempb)*abs(tempb%a-tempb%b);
  //cout<<"========"<<res<<"========\n"<<endl;
  return res;
}

int main(){
  int T;
  LL A,B,N;
  LL res;
  scanf("%d",&T);
  while(T--){
    scanf("%I64d%I64d%I64d",&N,&A,&B);
    res=0;
    if(A==B){
        printf("0\n");
        continue;
    }
    LL cir=A*B/gcd(A,B);
    LL eend=min(cir,N);
    coun=0;
    for(int i=A;i<=eend;i+=A) arr[coun++]=i;
    for(int i=B;i<eend;i+=B) arr[coun++]=i;
    arr[coun++]=INF;
    sort(arr,arr+coun);

    if(cir<N)
      res+=(N/cir*fun(A,B,cir,1));
    res+=fun(A,B,N%cir,0);

    //if(N%cir) res--;
    //if(A==1||B==1) A==1 ? res-=(B-1) : res-=(A-1);
    printf("%I64d\n",res);
  }
return 0;
}

F.

G.

ps:这个题学会了随机数法。。。具体看上篇博客吧。。。尴尬。。

H.

I.

d.这个题好像是一颗树,可以删除一条边、添加一条边,求最少的操作次数,构成一个单链的环。

s.方法好像是一个节点的度大于2时,删除它与父节点的边,最后所有的单链再连起来就行了。至于为什么,再看。

J.

d.一个数c,找出两个质数a、b,使得a-b=c。

s.当时直接把一些素数打表出来,挨个找,当这些没找到时,认为不存在。

ps:好像这个是一定存在的,水过因为数据弱吧。。。

#include<iostream>
#include<stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;

#define N 1000000
bool isprm[N];
long long xx[N];
void isprime()
{
    int i,j,k=0;
    int s,e=sqrt( double(N) )+1;        //sqrt是对于double数开平方

    memset(isprm,1,sizeof(isprm));

    isprm[0] = isprm[1] = 0;
    for(i=4 ; i < N; i=2+i)
        isprm[i]=0;

    for(i=3; i<e; i=2+i)
        if(isprm[i])
            for(s=i*2,j=i*i; j<N; j=j+s)
                isprm[j]=0;                        //因为j是奇数,所以+奇数后是偶数,不必处理
}

int main(){
    int coun=0;
    int i;

    isprime();
    for(i=0; i<N; i++)
        if(isprm[i]){
            xx[coun++]=i;
        }

    int T;
    long long t;
    long long t2;
    bool flag;

    scanf("%d",&T);

    while(T--){
        scanf("%lld",&t);

        flag=false;
        for(i=0;i<coun;++i){
            t2=t+xx[i];
            if(isprm[t2]){
                flag=true;
                break;
            }
        }

        if(flag){
            printf("%lld %lld\n",t2,xx[i]);
        }
        else{
            printf("FAIL\n");
        }

    }

    return 0;
}

时间: 2024-10-21 19:06:33

模拟2的相关文章

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

爬虫——网站模拟登录

使用Selenium与PhantomJS模拟登录豆瓣:https://www.douban.com/ #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 模拟登录豆瓣:https://www.douban.com/ """ from selenium import webdriver # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

Android模拟位置信息

Android模拟位置程序,俗称GPS欺骗,只能修改采用GPS定位的软件. 手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位 常见的修改手法: 1. 抓包欺骗法,抓包改包欺骗服务器端, 但是得专门去针对某款app,而且现在很多app数据包都加密了 2. hook java层经纬度获取函数, 这个方法以前可以用,现在不行了 3. hook native层经纬度获取函数 4. 使用允许模拟地址位置信息(不是很通用有版本限制) 为了修改微信朋友圈地理位置信息,为了好玩 试过了上

CSU 1112: 机器人的指令【模拟题】

1112: 机器人的指令 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1858  Solved: 682 [Submit][Status][Web Board] Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往左移动一个单位 ·RIGHT: 往右移动一个单位 ·SAME AS i: 和第i 条执行相同的动作.输入保证i 是一个正整数,且不超过之前执行指令数 In

Regionals 2015 &gt;&gt; Europe - Central &gt;&gt;7325 - Book Borders【模拟】

Europe - Central >>7325 - Book Borders 题目链接:7325 题目大意:给你一个字符串(含空格),每行x个字符,将单词排列进去,单词不能断开,问每行第一个单词的长度时多少,注意加空格 题目思路:直接模拟.第一个for遍历[a,b],第二个大致为n/a.复杂度大概为nlogn. 开两个数组,v[i]记录i这个位置所属的单词开始位置,e[v[i]]记录第i个位置所属的单词的结束位置. 然后每次判断这一行结尾,所在位置.如果在两个单词中间,则将该单词视为下一行开始

GNS 3模拟防火墙ASA

[模拟环境] 所使用的GNS3版本为0.7.4,如果低于这个版本,有些版本会缺少些选项无法支持. [ASA]     ASA有2种模式的编译文件,分别为单模式和多模式,可选择使用.我使用的是单模式,我试用过多模式,不太好用. [配置] 打开GNS3,编辑→首选项→Qemu→ASA:     添加单模式:Identifier name:asa802-k8-sing(自己填名称,但不能是中文)RAM:256(使用默认的256)Number of NICs:6(网卡数量,默认是6)NIC model:

hdu 5640 King&#39;s Cake(模拟)

Problem Description It is the king's birthday before the military parade . The ministers prepared a rectangle cake of size n×m(1≤n,m≤10000) . The king plans to cut the cake himself. But he has a strange habit of cutting cakes. Each time, he will cut