浙南联合训练赛20180214

这场比赛题目还行,但是被一道数学题卡了

A - Supermarket

CodeForces - 919A

We often go to supermarkets to buy some fruits or vegetables, and on the tag there prints the price for a kilo. But in some supermarkets, when asked how much the items are, the clerk will say that a yuan for b kilos (You don‘t need to care about what "yuan" is), the same as a?/?b yuan for a kilo.

Now imagine you‘d like to buy m kilos of apples. You‘ve asked n supermarkets and got the prices. Find the minimum cost for those apples.

You can assume that there are enough apples in all supermarkets.

Input

The first line contains two positive integers n and m (1?≤?n?≤?5?000, 1?≤?m?≤?100), denoting that there are n supermarkets and you want to buy m kilos of apples.

The following n lines describe the information of the supermarkets. Each line contains two positive integers a,?b (1?≤?a,?b?≤?100), denoting that in this supermarket, you are supposed to pay a yuan for b kilos of apples.

Output

The only line, denoting the minimum cost for m kilos of apples. Please make sure that the absolute or relative error between your answer and the correct answer won‘t exceed 10?-?6.

Formally, let your answer be x, and the jury‘s answer be y. Your answer is considered correct if .

Example

Input

3 51 23 41 3

Output

1.66666667

Input

2 199 10098 99

Output

0.98989899

Note

In the first sample, you are supposed to buy 5 kilos of apples in supermarket 3. The cost is 5?/?3 yuan.

In the second sample, you are supposed to buy 1 kilo of apples in supermarket 2. The cost is 98?/?99 yuan.

找到比值最小的就行了

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int main()
{
    int n,m;
    cin>>n>>m;
    double mi=1e9;
    for(int i=0,x,y;i<n;i++)
    {
        cin>>x>>y;
        mi=min(mi,m*x*1.0/y);
    }
    printf("%12f",mi);
    return 0;
}

B - Eleven

CodeForces - 918A

Eleven wants to choose a new name for herself. As a bunch of geeks, her friends suggested an algorithm to choose a name for her. Eleven wants her name to have exactly n characters.

Her friend suggested that her name should only consist of uppercase and lowercase letters ‘O‘. More precisely, they suggested that the i-th letter of her name should be ‘O‘ (uppercase) if i is a member of Fibonacci sequence, and ‘o‘ (lowercase) otherwise. The letters in the name are numbered from 1 to n. Fibonacci sequence is the sequence f where

  • f1?=?1,
  • f2?=?1,
  • fn?=?fn?-?2?+?fn?-?1 (n?>?2).

As her friends are too young to know what Fibonacci sequence is, they asked you to help Eleven determine her new name.

Input

The first and only line of input contains an integer n (1?≤?n?≤?1000).

Output

Print Eleven‘s new name on the first and only line of output.

Example

Input

8

Output

OOOoOooO

Input

15

Output

OOOoOooOooooOoo


输出长度为n的字符串,如果是第i位是斐波那契数输出O

#include<bits/stdc++.h>
using namespace std;
int a[1005],f[100],n;
int main()
{
    f[1]=1,f[0]=1;
    for(int i=1;f[i]<=1005;i++)
        f[i+1]=f[i]+f[i-1],a[f[i]]=1;
    cin>>n;
    for(int i=1;i<=n;i++)
        if(a[i]==1)cout<<"O";
        else cout<<"o";
    return 0;
}

C - The Way to Home

CodeForces - 910A

A frog lives on the axis Ox and needs to reach home which is in the point n. She starts from the point 1. The frog can jump to the right at a distance not more than d. So, after she jumped from the point x she can reach the point x?+?a, where a is an integer from 1 to d.

For each point from 1 to n is known if there is a lily flower in it. The frog can jump only in points with a lilies. Guaranteed that there are lilies in the points 1and n.

Determine the minimal number of jumps that the frog needs to reach home which is in the point n from the point 1. Consider that initially the frog is in the point 1. If the frog can not reach home, print -1.

Input

The first line contains two integers n and d (2?≤?n?≤?100, 1?≤?d?≤?n?-?1) — the point, which the frog wants to reach, and the maximal length of the frog jump.

The second line contains a string s of length n, consisting of zeros and ones. If a character of the string s equals to zero, then in the corresponding point there is no lily flower. In the other case, in the corresponding point there is a lily flower. Guaranteed that the first and the last characters of the string s equal to one.

Output

If the frog can not reach the home, print -1.

In the other case, print the minimal number of jumps that the frog needs to reach the home which is in the point n from the point 1.

Example

Input

8 410010101

Output

2

Input

4 21001

Output

-1

Input

8 411100101

Output

3

Input

12 3101111100101

Output

4

Note

In the first example the from can reach home in two jumps: the first jump from the point 1 to the point 4 (the length of the jump is three), and the second jump from the point 4 to the point 8 (the length of the jump is four).

In the second example the frog can not reach home, because to make it she need to jump on a distance three, but the maximum length of her jump equals to two.

前几场CF的题目,直接dp就可以了

#include<bits/stdc++.h>
using namespace std;
const int N=105,INF=0x3f3f3f3f;
int dp[N],n,d;
string s;
int main()
{
    cin>>n>>d>>s;
    memset(dp,INF,sizeof dp);
    dp[0]=0;
    for(int i=0; i<n; i++)
        if(s[i]==‘1‘)
        {
            for(int j=max(0,i-d);j<i;j++)
                dp[i]=min(dp[i],dp[j]+1);
        }
    printf("%d\n",dp[n-1]!=INF?dp[n-1]:-1);
    return 0;
}

D - Cave Painting

CodeForces - 922C

Imp is watching a documentary about cave painting.

Some numbers, carved in chaotic order, immediately attracted his attention. Imp rapidly proposed a guess that they are the remainders of division of a number n by all integers i from 1 to k. Unfortunately, there are too many integers to analyze for Imp.

Imp wants you to check whether all these remainders are distinct. Formally, he wants to check, if all , 1?≤?i?≤?k, are distinct, i. e. there is no such pair (i,?j) that:

  • 1?≤?i?<?j?≤?k,
  • , where  is the remainder of division x by y.

Input

The only line contains two integers nk (1?≤?n,?k?≤?1018).

Output

Print "Yes", if all the remainders are distinct, and "No" otherwise.

You can print each letter in arbitrary case (lower or upper).

Example

Input

4 4

Output

No

Input

5 3

Output

Yes

Note

In the first sample remainders modulo 1 and 4 coincide.

只是试了一下暴力就过了,可能大数据很难造吧,或者不存在

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll n,k;
    cin>>n>>k;
    for(ll i=1;i<=k;i++)
        if(n%i!=i-1)
        {
            puts("No\n");
            return 0;
        }
    puts("Yes\n");
    return 0;
}

E - And Now, a Remainder from Our Sponsor

HDU - 1930

IBM has decided that all messages sent to and from teams competing in the ACM programming contest should be encoded. They have decided that instead of sending the letters of a message, they will transmit their remainders relative to some secret keys which are four, two-digit integers that are pairwise relatively prime. For example, consider the message "THE CAT IN THE HAT". The letters of this message are first converted into numeric equivalents, where A=01, B=02, ..., Z=26 and a blank=27. Each group of 3 letters is then combined to create a 6 digit number. (If the last group does not contain 3 letters it is padded on the right with blanks and then transformed into a 6 digit number.) For example 
THE CAT IN THE HAT → 200805 270301 202709 142720 080527 080120 
Each six-digit integer is then encoded by replacing it with the remainders modulo the secret keys as follows: Each remainder should be padded with leading 0’s, if necessary, to make it two digits long. After this, the remainders are concatenated together and then any leading 0’s are removed. For example, if the secret keys are 34, 81, 65, and 43, then the first integer 200805 would have remainders 1, 6, 20 and 38. Following the rules above, these combine to get the encoding 1062038. The entire sample message above would be encoded as 
1062038 1043103 1473907 22794503 15135731 16114011

InputThe input consists of multiple test cases. The first line of input consists of a single positive integer n indicating the number of test cases. The next 2n lines of the input consist of the test cases. The first line of each test case contains a positive integer (< 50) giving the number of groups in the encoded message. The second line of each test case consists of the four keys followed by the encoded message. 
Each message group is separated with a space. 
OutputFor each test case write the decoded message. You should not print any trailing blanks.Sample Input

2
6
34 81 65 43 1062038 1043103 1473907 22794503 15135731 16114011
3
20 31 53 39 5184133 14080210 7090922

Sample Output

THE CAT IN THE HAT
THE END


这个题目是数学题啦

给n串密码,再给4个被取余的数,要求恢复成原来的一串数组,所以两位两位分,运用扩欧或者中国剩余定理即可解决

还有玄学代码使用272727这个数字的,应该是数据不强,这个题目是这次最难得题目

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int a[5],TT[N][5],out[N];
char num[N],m[5];
void exgcd(int a,int b,int &d,int &x,int &y)
{
    if(!b)d=a,x=1,y=0;
    else exgcd(b,a%b,d,y,x),y-=x*(a/b);
}
int main()
{
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        for(int i=1; i<=4; i++)cin>>a[i];
        for(int i=1,x; i<=n; i++)
        {
            cin>>x;
            for(int j=4; j>0; j--)TT[i][j]=x%100,x/=100;
        }
        for(int i=1; i<=n; i++)
        {
            int c=a[1],t=TT[i][1],d,z,x,y;
            for(int j=2; j<5; j++)
            {
                exgcd(c,a[j],d,x,y);
                z=a[j]/d;
                x=((TT[i][j]-t)/d*x%z+z)%z;
                t+=c*x;
                c=c/d*a[j];
            }
            out[i]=t;
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<4; j++)
                m[j]=out[i]%100,out[i]/=100;
            for(int j=3; j>0; j--)
            {
                if(m[j]==27)
                {
                    if(i!=n)printf(" ");
                    else break;
                }
                else printf("%c",m[j]+‘A‘-1);
            }
        }
        putchar(10);
    }
    return 0;
}

F - Connected Components?

CodeForces - 920E

You are given an undirected graph consisting of n vertices and  edges. Instead of giving you the edges that exist in the graph, we give you m unordered pairs (x,?y) such that there is no edge between x and y, and if some pair of vertices is not listed in the input, then there is an edge between these vertices.

You have to find the number of connected components in the graph and the size of each component. A connected component is a set of vertices X such that for every two vertices from this set there exists at least one path in the graph connecting these vertices, but adding any other vertex to X violates this rule.

Input

The first line contains two integers n and m (1?≤?n?≤?200000, ).

Then m lines follow, each containing a pair of integers x and y (1?≤?x,?y?≤?nx?≠?y) denoting that there is no edge between x and y. Each pair is listed at most once; (x,?y) and (y,?x) are considered the same (so they are never listed in the same test). If some pair of vertices is not listed in the input, then there exists an edge between those vertices.

Output

Firstly print k — the number of connected components in this graph.

Then print k integers — the sizes of components. You should output these integers in non-descending order.

Example

Input

5 51 23 43 24 22 5

Output

21 4 


图论啦,bfs出序列就可以了

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
set<int>M[N+N];
queue<int>Q;
int q[N],yy[N],n,m,k;
void bfs()
{
    while(!Q.empty())
    {
        int tot=1,u=Q.front();
        Q.pop();
        q[0]=u;
        for(int i=0; i<tot; i++)
        {
            int now=n-tot;
            while(now>0&&!Q.empty())
            {
                int v=Q.front();
                Q.pop();
                if(!M[q[i]].count(v)) q[tot++]=v;
                else Q.push(v);
                --now;
            }
        }
        yy[k++]=tot;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=0,u,v; i<m; i++)
        cin>>u>>v,M[u].insert(v),M[v].insert(u);
    for(int i=1; i<=n; i++) Q.push(i);
    bfs();
    sort(yy,yy+k);
    printf("%d\n",k);
    for(int i=0; i<k; i++)printf("%d ",yy[i]);
    return 0;
}

G - MADMAX

CodeForces - 917B

As we all know, Max is the best video game player among her friends. Her friends were so jealous of hers, that they created an actual game just to prove that she‘s not the best at games. The game is played on a directed acyclic graph (a DAG) with nvertices and m edges. There‘s a character written on each edge, a lowercase English letter.

Max and Lucas are playing the game. Max goes first, then Lucas, then Max again and so on. Each player has a marble, initially located at some vertex. Each player in his/her turn should move his/her marble along some edge (a player can move the marble from vertex v to vertex u if there‘s an outgoing edge from v to u). If the player moves his/her marble from vertex v to vertex u, the "character" of that round is the character written on the edge from v to u. There‘s one additional rule; the ASCII code of character of round i should be greater than or equal to the ASCII code of character of round i?-?1 (for i?>?1). The rounds are numbered for both players together, i. e. Max goes in odd numbers, Lucas goes in even numbers. The player that can‘t make a move loses the game. The marbles may be at the same vertex at the same time.

Since the game could take a while and Lucas and Max have to focus on finding Dart, they don‘t have time to play. So they asked you, if they both play optimally, who wins the game?

You have to determine the winner of the game for all initial positions of the marbles.

Input

The first line of input contains two integers n and m (2?≤?n?≤?100, ).

The next m lines contain the edges. Each line contains two integers vu and a lowercase English letter c, meaning there‘s an edge from v to u written c on it (1?≤?v,?u?≤?nv?≠?u). There‘s at most one edge between any pair of vertices. It is guaranteed that the graph is acyclic.

Output

Print n lines, a string of length n in each one. The j-th character in i-th line should be ‘A‘ if Max will win the game in case her marble is initially at vertex iand Lucas‘s marble is initially at vertex j, and ‘B‘ otherwise.

Example

Input

4 41 2 b1 3 a2 4 c3 4 b

Output

BAAAABAABBBABBBB

Input

5 85 3 h1 2 c3 1 c3 2 r5 1 r4 3 z5 4 r5 2 h

Output

BABBBBBBBBAABBBAAABAAAAAB

Note

Here‘s the graph in the first sample test case:

Here‘s the graph in the second sample test case:

因为dag环,所以可以记忆化搜索

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int SG[105][105][26];
int head[5005],nxt[5005],to[5005],W[5005];
int tot;
int DFS(int i,int j,int k)
{
    if(SG[i][j][k])return SG[i][j][k];
    for(int p=head[i]; p; p=nxt[p])
        if(W[p]>=k&&!DFS(j,to[p],W[p]))SG[i][j][k]=1;
    return SG[i][j][k];
}
void add(int u,int v,int w)
{
    nxt[++tot]=head[u],head[u]=tot,to[tot]=v,W[tot]=w;
}
int main()
{
    int n,m;
    string s;
    cin>>n>>m;
    for(int i=1,u,v; i<=m; i++)
        cin>>u>>v>>s,add(u,v,s[0]-‘a‘);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            if(DFS(i,j,0))cout<<‘A‘;
            else cout <<‘B‘;
        cout<<"\n";
    }
    return 0;
}

H - Color a Tree

HDU - 1055

Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the "root" of the tree, and there is a unique path from the root to each of the other nodes.

Bob intends to color all the nodes of a tree with a pen. A tree has N nodes, these nodes are numbered 1, 2, ..., N. Suppose coloring a node takes 1 unit of time, and after finishing coloring one node, he is allowed to color another. Additionally, he is allowed to color a node only when its father node has been colored. Obviously, Bob is only allowed to color the root in the first try.

Each node has a “coloring cost factor”, Ci. The coloring cost of each node depends both on Ci and the time at which Bob finishes the coloring of this node. At the beginning, the time is set to 0. If the finishing time of coloring node i is Fi, then the coloring cost of node i is Ci * Fi.

For example, a tree with five nodes is shown in Figure-1. The coloring cost factors of each node are 1, 2, 1, 2 and 4. Bob can color the tree in the order 1, 3, 5, 2, 4, with the minimum total coloring cost of 33.

Given a tree and the coloring cost factor of each node, please help Bob to find the minimum possible total coloring cost for coloring all the nodes.

InputThe input consists of several test cases. The first line of each case contains two integers N and R (1 <= N <= 1000, 1 <= R <= N), where N is the number of nodes in the tree and R is the node number of the root node. The second line contains N integers, the i-th of which is Ci (1 <= Ci <= 500), the coloring cost factor of node i. Each of the next N-1 lines contains two space-separated node numbers V1 and V2, which are the endpoints of an edge in the tree, denoting that V1 is the father node of V2. No edge will be listed twice, and all edges will be listed.

A test case of N = 0 and R = 0 indicates the end of input, and should not be processed. 
OutputFor each test case, output a line containing the minimum total coloring cost required for Bob to color all the nodes. 
Sample Input

5 1
1 2 1 2 4
1 2
1 3
2 4
3 5
0 0

Sample Output

33


树染色经典题目,可以并查集维护的

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int a[N],f[N],fa[N],num[N],sum[N],n,r;
int find(int u)
{
    return u==fa[u]?u:(fa[u]=find(fa[u]));
}
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n>>r)
    {
        if(!n&&!r)break;
        f[r]=0,memset(sum,0,sizeof sum);
        for(int i=0; i<=n; i++)
            fa[i]=i,num[i]=1;
        for(int i=1; i<=n; i++)cin>>a[i];
        for(int i=1,u,v; i<n; i++)
            cin>>u>>v,f[v]=u;
        for(int i=0; i<n; i++)
        {
            int u=-1;
            for(int j=1; j<=n; j++)
            if(fa[j]==j&&(u==-1||a[u]*num[j]<a[j]*num[u]))u=j;
            int v=find(f[u]);
            sum[v]+=num[v]*a[u]+sum[u],num[v]+=num[u],a[v]+=a[u],fa[u]=v;
        }
        cout<<sum[0]<<"\n";
    }
    return 0;
}

原文地址:https://www.cnblogs.com/BobHuang/p/8457755.html

时间: 2024-10-09 10:28:30

浙南联合训练赛20180214的相关文章

浙南联合训练赛 H - The number of positions

Petr stands in line of n people, but he doesn't know exactly which position he occupies. He can say that there are no less than a people standing in front of him and no more than b people standing behind him. Find the number of different positions Pe

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称. 现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中 要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部分,也就是说,左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样. 因为我们已经记录下来以

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&amp;#39;s problem(manacher+二分/枚举)

pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法.求出以第i个点为中心的回文串长度.记录到数组p中 要满足题目所要求的内容.须要使得两个相邻的回文串,共享中间的一部分,也就是说.左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也

hdu 5361 2015多校联合训练赛#6 最短路

In Touch Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 67    Accepted Submission(s): 11 Problem Description There are n soda living in a straight line. soda are numbered by  from left to ri

HDU 5358(2015多校联合训练赛1006) First One (区间合并+常数优化)

HDU 5358 题意: 求∑?i=1?n??∑?j=i?n??(?log?2??S(i,j)?+1)?(i+j). 思路: S(i,j) < 10^10 < 2^34,所以log2(S)+1的值只可能在1~35之间.由于log变化缓慢的函数特性,我们可以S(i,n)分作多个相同log值的区间来计算,用pos[i][j]预处理记录每个以i为起点,log(s)值为j的区间的右边界,即可优化至nlogn的复杂度. 主要是写起来比较难一些,一些细节比较纠结,一定思路理清后再写. ps.此题卡常数毫无

hdu 5358 First One 2015多校联合训练赛#6 枚举

First One Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 142    Accepted Submission(s): 37 Problem Description soda has an integer array a1,a2,-,an. Let S(i,j) be the sum of ai,ai+1,-,aj. No

hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法

The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 23    Accepted Submission(s): 4 Problem Description You have an array ,the length of  is Let Input There are multiple test cases.

最后一周第二天训练赛之第二题

试题: B - B Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice SPOJ ICODER Description Mathews uses a brand new 16-bit instruction processor. (Yeah i am being sarcastic!). It has one register (say R) and it su

Dream_Chaser队训练赛第一场 I题

Dream_Chaser队训练赛第一场 I题 题目来自2012成都区域赛 I - Count Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4472 Description Prof. Tigris is the head of an archaeological team who is currently in charge of a