2016 Multi-University Training Contest 2(补题ing)

5734 Acperience

水题.. 队友写的C++数据溢出了,于是改成java水过。

import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
    static BigInteger[] a=new BigInteger[100020];
    public static void main(String[] args)throws IOException
    {
        Main ma=new Main();
        ma.solve();
    }
    public void solve()throws IOException
    {
        StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        st.nextToken();  //输入前记得加
        int t=(int)st.nval;
        while(true)
        {
            if(t==0) break;
            st.nextToken();
            int n=(int)st.nval;
            BigInteger sum=BigInteger.ZERO;
            int num=0;
            for(int i=0;i0&&a[i].compareTo(a[i-1])!=0)
                    num=1;
                sum=sum.add(a[i]);
            }
            if(num==0)
            {
                out.println("0/1");
                t--;
                continue;
            }
            BigInteger fe,mu,fe1,mu1;
            fe=sum;
            mu=BigInteger.valueOf(n);
            fe1=BigInteger.ZERO;
            mu1=BigInteger.valueOf(n).multiply(BigInteger.valueOf(n));
            for(int i=0;i

5735 Born Slippy

待补...

5736 Call It What You Want

待补...

Differencia

待补...

Eureka

要求找一些点集,满足每个集合中,存在至少一个点对(u,v),让集合中任何一点w,满足g(u,v,w) >= f(u,v)

化简为 f(u,v) >= f(v,w)+f(w,u) ,可知大于号是无法满足的,即w在u,v线段上。

这样要找的集合其实是一条线段,点对u,v其实就是线段两个端点。


待补...


Fantasia

待补...

Glorious Brilliance

待补...

Helter Skelter

待补...

It's All In The Mind

水题, xa1a2ya3a4anx=a1+a2,y=a3+a4++an , 那么 a1a2a1a2anxxy1yxya1+a2++ana1+a2=x+yx=1x+yy . 对于定值 yy , 显然 xx 越大越好, 对于定值 xx , 显然 yy 越小越好. 于是按照 a1a1 a2a2 尽量大, 其他元素尽量小的策略填数就好了.
#include 
#include 
#include 
#include 
#include 
#include 
#define ll long long
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
using namespace std;
int a[105];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            a[i]=-1;
        for(int i=0;i>id>>v;
            a[id]=v;
        }    
        int tmp=0;
        for(int i=n;i>=3;i--)
        {
            if(a[i]==-1)
                a[i]=tmp;
            else
                tmp=a[i];
        }
        if(a[2]==-1&&a[1]==-1)
            a[1]=a[2]=100;
        else if(a[2]==-1&&a[1]!=-1)
            a[2]=a[1];
        else if(a[2]!=-1&&a[1]==-1)
            a[1]=100;
        int sum=a[1]+a[2];
        for(int i=n;i>=3;i--)
            sum+=a[i];
        int g=__gcd(a[1]+a[2],sum);
        int tt=(a[1]+a[2])/g;
        sum/=g;
        printf("%d/%d\n",tt,sum);
    }
}

Join The Future

待补...

Keep On Movin

水题, 如果每个字符出现次数都是偶数, 那么答案显然就是所有数的和. 对于奇数部分, 显然需要把其他字符均匀分配给这写奇数字符. 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
#define lowbit(x) x&(-x)

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int a[100005],xx=0,sum=0;
        for(int i=0;i

La Vie en rose

题解上貌似很麻烦,可以直接暴力水过...
#include 
#include 
#include 
#include 
using namespace std;
const int max_n = 100005;
int main()
{
    int t, n,m;
    int i,j;
    char s1[100005],s2[5005];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        scanf("%s",s1);
        scanf("%s",s2);
        for(i=0;i


Memento Mori

待补...





(xuxv)2+(yuyv)2  即为u,v两点距离

你可能感兴趣的:(Training,Contest)