zoukankan      html  css  js  c++  java
  • 9.14——模拟赛

     T1 仙 临江仙 旧梦  (Topcoder SRM 703 div2 500pts)

    题目背景
    闻道故园花陌,今年奼紫嫣红。扬帆直渡水千重。东君何解意,送我一江风。
    还是昔时庭院,终得醉卧花丛。残更惊醒月明中。流光如旧岁,多少梦成空。
    题目描述
    #define goodcatdog gcd
    #define important i
    #define judge j
    神说 每个梦想就是一轮月亮,高高地孤寂地挂在清冷的夜空。为了让月亮不再
    孤独,灯神给她找了好多好多伴儿。现在天空上就有n轮月亮啦!
    月亮在天上跟相邻的伙伴玩够以后,就开始想要去找其他月亮玩,灯神为了让月
    亮变得更聪明,下了一个规定:若两个月亮编号分别为 important 和 judge ,若
    important , judge 满足 goodcatdog ( important , judge )>β,则 important , judge 就可以联通。
    现在来了一个垃圾神叫J乌拉,他想知道编号为x的月亮和编号为y的月亮 是否联
    通,聪明的你能帮帮它吗????
    输入描述
    第一行为一个数T,表明有T组测试数据
    四个个数n,β,x,y;
    输出描述
    若x,y联通,输出YeS,否则输出No
    样例输入
    1
    12 2 8 9
    样例输出
    YeS
    数据范围: :
    对于30%的数据 n<=10
    对于50%的数据 n<=15
    对于第六个测试点 n<=65432
    对于第七,八个测试点 n<=999999
    对于100%的数据 n,β,<=1000000;T<=4;x,y<=10000000

    并查集维护β的倍数、

     1 #include <cstdio>
     2 
     3 inline void read(int &x)
     4 {
     5     x=0; register char ch=getchar();
     6     for(; ch>'9'||ch<'0'; ) ch=getchar();
     7     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     8 }
     9 
    10 int fa[1000005];
    11 int GCD(int a,int b)
    12 {
    13     return !b ?a :GCD(b,a%b);
    14 }
    15 int find(int x)
    16 {
    17     return fa[x]==x?x:fa[x]=find(fa[x]);
    18 }
    19 
    20 int Presist()
    21 {
    22     freopen("dream.in","r",stdin);
    23     freopen("dream.out","w",stdout);
    24     int t,n,b,x,y; read(t);
    25     for( ; t--; )
    26     {
    27         read(n),read(b),read(x),read(y);
    28         for(int i=1; i<=n; ++i) fa[i]=i;
    29         if(GCD(x,y)>b||x==y)
    30         {
    31             puts("YeS");
    32             continue;
    33         }
    34         for(int fx,fy,i=b+1; i<=n; ++i)
    35         {
    36             fx=find(i);
    37             for(int j=i; j<=n; j+=i)
    38                 fa[find(j)]=fx;
    39         }
    40         if(find(x)==find(y)) puts("YeS");
    41         else puts("No");
    42     }
    43     return 0;
    44 }
    45 
    46 int Aptal=Presist();
    47 int main(){;}
    AC

    T2  长命女 (洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows

    题目背景
    夏夜宴,绿酒一杯歌一遍
    再拜陈三愿:
    一愿郎君千岁;
    二愿妻妾常健;
    三月如同梁上雕燕,
    你我常相见
    题目描述
    给定一个r*c的矩阵,在这个矩阵中有...一棵树!这棵树上有n间小屋,每间小
    屋都有v[i]个松果,两个小屋之间有一条双向树枝相连。
    小浪是一只特别懒的小松鼠, 他希望知道从每间小屋 向外扩展 γ 步范围内最多能
    拿到多少松果,不聪明的你可以帮帮他吗????
    输入描述
    第一行 r,c
    第二行 n,γ
    以下n-1行 x,y有连边
    最后一行n个数 表示每个小屋的松果数目。
    输出描述
    n行,每行为第i个小屋最多能拿到多少松果
    样例输入
    8 8
    6 2
    5 1
    3 6
    2 4
    2 1
    3 2
    1
    2
    3
    4
    5
    6
    样例输出
    15
    21
    16
    10
    8
    11
    数据范围
    对于10%的数据:n<=10,r<=c<=50
    对于40%的数据:n<=1000
    对于100%的数据:n<=100000;0<=v[i]<=1000;γ<=20;r<=1000000,c<=1000000

     1 #include <cstdio>
     2 
     3 inline void read(int &x)
     4 {
     5     x=0; register char ch=getchar();
     6     for(; ch>'9'||ch<'0'; ) ch=getchar();
     7     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     8 }
     9 const int N(100000+5);
    10 int val[N],n,m;
    11 int head[N],sumedge;
    12 struct Edge {
    13     int v,next;
    14     Edge(int v=0,int next=0):v(v),next(next){}
    15 }edge[N<<1];
    16 inline void ins(int u,int v)
    17 {
    18     edge[++sumedge]=Edge(v,head[u]);
    19     head[u]=sumedge;
    20     edge[++sumedge]=Edge(u,head[v]);
    21     head[v]=sumedge;
    22 }
    23 
    24 int sum[N];
    25 int DFS(int u,int pre,int cnt)
    26 {
    27     if(cnt<0) return 0;
    28     sum[u]=val[u];
    29     for(int v,i=head[u]; i; i=edge[i].next)
    30     {
    31         v=edge[i].v;
    32         if(pre==v) continue;
    33         sum[u]+=DFS(v,u,cnt-1);
    34     }
    35     return sum[u];
    36 }
    37 
    38 int Presist()
    39 {
    40     freopen("young.in","r",stdin);
    41     freopen("young.out","w",stdout);
    42     
    43     int r,c; read(r),read(c);
    44     read(n),read(m);
    45     for(int u,v,i=1; i<n; ++i)
    46         read(u),read(v),ins(u,v);
    47     for(int i=1; i<=n; ++i) read(val[i]);
    48     for(int i=1; i<=n; ++i)
    49         printf("%d
    ",DFS(i,-1,m));
    50     return 0;
    51 }
    52 
    53 int Aptal=Presist();
    54 int main(){;}
    40分暴力 (洛谷60)
     1 #include <cstdio>
     2 
     3 inline void read(int &x)
     4 {
     5     x=0; register char ch=getchar();
     6     for(; ch>'9'||ch<'0'; ) ch=getchar();
     7     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     8 }
     9 const int N(100000+5);
    10 int val[N],n,m;
    11 int head[N],sumedge;
    12 struct Edge {
    13     int v,next;
    14     Edge(int v=0,int next=0):v(v),next(next){}
    15 }edge[N<<1];
    16 inline void ins(int u,int v)
    17 {
    18     edge[++sumedge]=Edge(v,head[u]);
    19     head[u]=sumedge;
    20     edge[++sumedge]=Edge(u,head[v]);
    21     head[v]=sumedge;
    22 }
    23 
    24 int sum[N][25],dad[N];
    25 void DFS(int u,int pre)
    26 {
    27     dad[u]=pre;
    28     sum[u][0]=val[u];
    29     for(int v,i=head[u]; i; i=edge[i].next)
    30     {
    31         v=edge[i].v;
    32         if(v==pre) continue;
    33         DFS(v,u);
    34         for(int j=1; j<=m; ++j)
    35             sum[u][j]+=sum[v][j-1];
    36     }
    37 }
    38 
    39 int Get(int x)
    40 {
    41     int ret=sum[x][m],t=m;
    42     for(; x!=1&&t; x=dad[x])
    43     {
    44         ret+=sum[dad[x]][--t];
    45         if(t) ret-=sum[x][t-1];
    46     }
    47     return ret;
    48 }
    49 
    50 int Presist()
    51 {
    52 //    freopen("young.in","r",stdin);
    53 //    freopen("young.out","w",stdout);
    54 
    55 //    int r,c; read(r),read(c);
    56     read(n),read(m);
    57     for(int u,v,i=1; i<n; ++i)
    58         read(u),read(v),ins(u,v);
    59     for(int i=1; i<=n; ++i) read(val[i]);
    60     DFS(1,-1);
    61     for(int i=1; i<=n; ++i)
    62       for(int j=1; j<=m; ++j)
    63         sum[i][j]+=sum[i][j-1];
    64     for(int i=1; i<=n; ++i)
    65         printf("%d
    ",Get(i));
    66     return 0;
    67 }
    68 
    69 int Aptal=Presist();
    70 int main(){;}
    树形DP f[i][j]表示i节点,扩展j步的最大数

    T3  春江花月夜(  BZOJ 1108: [POI2007]天然气管道Gaz )

    题目背景
    春江潮水连海平,海上明月共潮生。滟滟随波千万里,何处春江无月明!
    江流宛转绕芳甸,月照花林皆似霰;空里流霜不觉飞,汀上白沙看不见。
    江天一色无纤尘,皎皎空中孤月轮。江畔何人初见月?江月何年初照人?
    人生代代无穷已,江月年年只相似。不知江月待何人,但见长江送流水。
    白云一片去悠悠,青枫浦上不胜愁。谁家今夜扁舟子?何处相思明月楼?
    可怜楼上月徘徊,应照离人妆镜台。玉户帘中卷不去,捣衣砧上拂还来。
    此时相望不相闻,愿逐月华流照君。鸿雁长飞光不度,鱼龙潜跃水成文。
    昨夜闲潭梦落花,可怜春半不还家。江水流春去欲尽,江潭落月复西斜。
    斜月沉沉藏海雾,碣石潇湘无限路。不知乘月几人归,落月摇情满江树。
    题目描述
    小春和小江是两个很好的朋友,他们都信奉灯神教。有一天,小春突发奇想,学
    习起了莫比乌斯反演,恰好在这天,小江也突发奇想,学起了快速傅里叶变换。
    可是莫比乌斯反演比快速傅里叶变换字数多啊,于是乎小春就比小江学得快。
    小春非常得意,利用所学知识给小江出了一倒防AK好题:已知在这个宇宙中有n
    个太阳和n个月亮,由于宇宙之神--灯神是一个喜爱数学的神,所以他就规定了n
    属于数域P。灯神把整个宇宙抽象成了一个 二维平面坐标系,对于每个太阳和每
    个月亮,都有自己的一个坐标xi,yi 坐标也是数域成员。如果一个太阳想去找一
    个月亮玩,那么 他只能往东面或者南面飞 。月亮是不能动哒!飞行单位距离为1,
    他就会消耗
     
    1 mod ) / * (
    2 / ) 1 (
    1




    q p kq p
    p
    k
    的花费 灯神想知道怎么让每个太阳都能找
    到某个月亮玩使得花费最小 (一个月亮只能被找一次) ?小江一下子就被难倒了,
    询问聪明的你, 那么聪明年轻帅气漂亮颜值居高无比的你能帮助他解决这个问题
    吗?(保证答案在long int的十分之一范围内)。
    题目提示
    1.数域定义 设F是一个数环( 设S S 是复数集的非空子集,如果S S 中的数对任意两个
    数的和 、 差 、 积仍属于S S , 则称S S 是一个数环。),如果对任意的a,b∈F而且a≠0,
    则b/a∈F;则称F是一个数域。著名的域有:Klein四元域。
    数域性质 任何数域都包含有理数域Q。即Q是最小的数域。
    证明:F必有一个非零元素a.由于F为数环,所以0 = a - a属于F1 = a/a 属于F0
    和1都属于F那么2 = 1+13 = 2+1。。。。自然数N都属于F-n = 0 - n 也属于F
    故整数集合Z都属于F那么a/b 也属于F(其中a,b为整数)这样,任何一个数域都
    包含Q
    2.莫比乌斯反演
    卷积:令d|n表示d能整除n,比如 2|4 (=.=)定义关于整数的函数F(n)然后定义
    G(n)=Σ(F(d)) (其中d|n)
    反演原式:G(n)=Σ(F(d))(其中d|n)
    反演公式:F(n)=Σ(U(n/d)*G(d))这里U是莫比乌斯函数,他是每一项 G(d) 的系
    数。
    3.欧拉函数:
    其中p1, p2……pn为x的所有质因数,x是不为0的整数。
    φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。
    输入描述
    第一行为一个正整数n,表示天月亮的数量(太阳的数量与之相等)。接下来n
    行,每行两个整数xi和yi,表示太阳的坐标。规定向东向北为x,轴正方向。接下
    来n行,每行两个数a和b,示月亮的坐标。
    输出描述
    第一行包含一个数,表示最小的花费。答案对斐波那契数列的第100000007项取
    模。
    样例输入
    3
    3 5
    1 2
    4 3
    6 3
    5 2
    2 1
    样例输出
    9
    数据范围
    对于30%的数据 n<=300
    对于第四,五个测试点 n<=20000
    对于第六,七,八个测试点 n<=25000
    对于100%的数据 n<=3 0 0 0 1;0<=xi,yi<=1 0 0 0 0 0,0<=a,b<=1 0 0 0 0 0.
    保证答案存在。

    无聊的公式、

    一定有解,且太阳只能向南和东走,画图意会吧。。

     1 #include <algorithm>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 
     5 inline void read(long long &x)
     6 {
     7     x=0; register char ch=getchar();
     8     for(; ch>'9'||ch<'0'; ) ch=getchar();
     9     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
    10 }
    11 
    12 long long ans,n,x,y;
    13 
    14 int Presist()
    15 {
    16 //    freopen("moon.in","r",stdin);
    17 //    freopen("moon.out","w",stdout);
    18     
    19     read(n);
    20     for(long long i=1; i<=n ;++i)
    21     {
    22         read(x),read(y);
    23         ans-=x,ans+=y;
    24     }
    25     for(long long i=1; i<=n ;++i)
    26     {
    27         read(x),read(y);
    28         ans+=x,ans-=y;
    29     }
    30     printf("%I64d
    ",ans);
    31     return 0;
    32 }
    33 
    34 int Aptal=Presist();
    35 int main(){;}
    AC
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    测试用例设计方法
    软件测试--常考的证书
    fillder-----接口延时返回(新方法)
    测试工作之--adb代码
    设计测试用例的常用方法
    TFS2013 设置签出独占锁
    Sql Server (MSSQLSERVER) 服务无法启动
    Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
    C#使用redis学习笔记
    C#使用mybatis学习笔记
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7520701.html
Copyright © 2011-2022 走看看