Codeforces Round #485 (Div. 2) ABCDE

A题.Infinity Gauntlet
A. Infinity Gauntlet
题意为求6个字符串中没出现的字符串,随意写吧
A题代码

#include
#include
#include
#include
using namespace std;
string str[6]={"purple","green","blue","orange","red","yellow"};
string str2[6]={"Power","Time","Space","Soul","Reality","Mind"};
set s;
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    cout<<6-n<>pp;
        s.insert(pp);
    }
    for(int i=0;i<6;i++)
    {

        if(!s.count(str[i]))
            cout<

B题.High School: Become Human
B. High School: Become Human
题意为求 x y 与 y x x^{y} 与 y^{x} xyyx 的大小关系
有两种做法,第一种做法对于 x , y < = 4 x,y<=4 x,y<=4 进行特判其余的一定是较小的在下面比较大
另一种做法是取对数,但是对于 x = y x=y x=y的情况要特判,以免被卡精度
B题第二种做法代码

#include
#include
#include
#include
using namespace std;
const double ERR = 1e-10;
int main()
{
    ios::sync_with_stdio(false);
    double x,y;
    cin>>x>>y;
    double tmp1=y*log(x);
    double tmp2=x*log(y);
    if(x==y||fabs(x-y)\n");
    }
     return 0;
}

C题.Three displays
C. Three displays
题意是在A数组中找出满足 i < j < k i<j<k i<j<k a [ i ] < a [ j ] < a [ k ] a[i]<a[j]<a[k] a[i]<a[j]<a[k] b [ i ] + b [ j ] + b [ k ] 最 小 b[i]+b[j]+b[k]最小 b[i]+b[j]+b[k]的i,j,k,并输出最小的和
数据范围是3000,所以我们考虑 n 2 n^{2} n2的做法,枚举i,j,找到满足条件的k,我们可以n^{2}预处理,处理出 m a x x [ i ] maxx[i] maxx[i]表示下标j大于 i i i而且 a [ j ] > a [ i ] a[j]>a[i] a[j]>a[i]中最小的 b [ j ] b[j] b[j].然后 n 2 n^{2} n2枚举$i,j,o(1) 计 算 计算 b[i]+b[j]+b[k] , 取 ,取 min$就好了。
C题代码

#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn = 3005;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
ll maxx[maxn];
ll a[maxn];
ll w[maxn];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i=0;i--)
    {
        maxx[i]=LL_INF;
        for(int j=i+1;ja[i])
            {
                maxx[i]=min(maxx[i],w[j]);
            }
        }
    }
    ll ans=LL_INF;
    for(int i=0;i

D题.Fair
D. Fair
题意是一共有k种商品,n个商户,m条道路,如果某个商户想要达到fair状态就必须拥有至少s种商品,每个商户可以从任意其他商户那里得到该商户的商品种类,(不存在减少),花费为两者之间的最短路的道路个数,求每个商家达到fair的最小花费
注意到k只有100,我们可以计算出,每种颜色到所有商家的最短距离,这样每种商家到所有颜色的最短距离我们也就知道了,所以做k次bfs之后对每个商家取前s种花费小的颜色即可。
D题代码

#include
#include
#include
#include
using namespace std;
const int maxn = 1e5+5;
int dis[maxn][105];
int a[maxn];
int ans[maxn];
int x,y,n,k,m,s;
vector E[maxn];
void bfs(int x)
{
    queue q;
    for(int i=1;i<=n;i++)
    {
        if(a[i]==x)
        {
            q.push(i);
            dis[i][x]=0;
        }
    }
    while(!q.empty())
    {
        int tmp=q.front();
        q.pop();
        for(int i=0;i

E题.Petr and Permutations
E.Petr and Permutations
题意为给AB分别一个1-n的顺序排列,设定x操作为任意交换序列中的两个元素,A对他进行3n次x操作,B对他进行7n+1次x操作,给你最终序列,问你此序列是由谁操作而来的。
我们考虑原序列是顺序的,线性代数中学过,交换序列中任意两个元素,会使序列逆序对的奇偶性发生改变一次,所以我们只需要知道总操作次数的就行,然后判断最终逆序对个数的奇偶性,就结束了。
E题代码

#include
#include
#include
#include
#define maxn 1000005
using namespace std;
int w[maxn],sum[maxn],n;
struct T
{
    int x,num;
} a[maxn],T[maxn];
void merge_sort(int l,int r)
{
    if(r-l==1)return;
    int m=l+r>>1,tm=l+r>>1,tl=l,i=l;
    merge_sort(l,m),merge_sort(m,r);
    while(tl=r||(tl

你可能感兴趣的:(Codeforces,个人训练计划)