码迷,mamicode.com
首页 > 其他好文 > 详细

Day2下午

时间:2017-10-29 16:49:34      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:space   一个   while   main   连接   friend   freopen   mes   技术分享   

T1

洗澡
【问题描述】
你是能看到第一题的friends 呢。
——hja
洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代价(将左括
号变成右括号或者相反),求最小代价使得括号序列合法。
【输入格式】
一行一个括号序列。
【输出格式】
一行一个整数代表答案。
【样例输入】
())(
【样例输出】
2
【数据范围与规定】
对于50%的数据,括号序列长度不超过100。
对于100%的数据,括号序列长度不超过105且一定为偶数,只包含小括
号。

技术分享
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<cmath>
#include<ctime>
using namespace std;
char s[100009];
int len;
int ans,sum;
int main()
{
    freopen("shower.in","r",stdin);
    freopen("shower.out","w",stdout);
    cin>>(s+1);
    len=strlen(s+1);
    for(int i=1;i<=len;i++)
    {
        if(s[i]==()    sum++;
        else sum--;
        if(sum<0)    ans++,sum+=2;        
    }
    if(sum)    ans+=sum/2;
    cout<<ans;
    return 0;
}
第一遍

 

T2

日记
【问题描述】
你是能看到第二题的 friends呢。
—— laekov
日记之中,写满了质数两个间如果没有其他那么则称为相 邻的质数。给定 ??,??,询问不超过 ??的数中能够表示成连续 ??个质数之和的最大 的数是多少。
【输入格式】
第一行个整数 ??代表数据组。
对于每组数据,一行 行两个整数 ??,??。
【输出格式】
对于每组数据,一行个整代表答案。如果不存在则输出 ?1。
【样例输入】
3
20 2
20 3
20 4
【样例输出】
18
15
17
【数据范围与规定】
对于 20%的数据 ,1≤??≤100。
对于 40%的数据 ,??=1。
对于 另外 20%的数据 ,所有的 询问??相等 。
对于 100%的数据 ,1≤??<2000,1≤??≤106。

技术分享
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<cmath>
#include<ctime>
using namespace std;
const int N=1000000+4;
int prime[N],cnt;
bool is[N];
int T;
void first()
{
    cnt=0;
    for(int i=2;i<=N;i++)
    {
        if(!is[i])    prime[++cnt]=i;
        for(int j=1;j<=cnt;j++)
        {
            if(i*prime[j]>N)    break;
            is[i*prime[j]]=1;
            if(i%prime[j]==0)    break;
        }
    }
    return ;
}
int work(int mid,int len)
{
    int sum=0;
    for(int i=mid;i<=mid+len-1;i++)
    sum+=prime[i];
    return sum;
}
int main()
{
    freopen("diary.in","r",stdin);
    freopen("diary.out","w",stdout);
    first();
    scanf("%d",&T);
    for(int i=1,n,k;i<=T;i++)
    {
        scanf("%d%d",&n,&k);
        int j=1,sum=0,L,R,mid;
        if(n<=100)
        {
            j=1,sum=0;
            for(j=1;j<=k;j++)    sum+=prime[j];j--;
            if(n<sum)
            {
                printf("-1\n");
                continue;
            }
            while(sum+prime[j+1]-prime[j-k+1]<=n)
                sum=sum+prime[j+1]-prime[j-k+1],j++;
            printf("%d\n",sum);
            continue;
        }
        L=1,R=cnt-k+1;
        while(L<=R)
        {
            mid=(L+R)>>1;
            if(work(mid,k)<=n)    L=mid+1;
            else R=mid-1;
        }
        for(j=min(cnt,L);j>=R;j--)
        if((sum=work(j,k))<=n)
        {
            printf("%d\n",sum);
            break;
        }
    }    
    return 0;
}
第一遍

 

T3

洗衣
【问题描述】
你是能看到第三题的 friends呢。
—— aoao
洗完衣服,就要晒在树上 洗完衣服,就要晒在树上 。但是这个世界并没有树,我们需要重新开始造。 但是这个世界并没有树,我们需要重新开始造。 我们一开始拥有 ??0,是一棵只有个点的树,我们要用它造出更多。
生成第 ??棵树我们需要五个参数 ????,????,????,????,????(????,????<??)。我们生成第 。我们生成第 ??棵树是 将第 ????棵树的 ????号点和第 ????棵树的 ????号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 ????的边连接起来形成新 的边连接起来形成新 的树 (不会改变原来两棵树 不会改变原来两棵树 不会改变原来两棵树 不会改变原来两棵树 )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: 对于原来在 第????棵树中的点 ,我们不会改变他的编号 ;对于原来在第 ????棵树中的点 ,我们 会将他们的编号加上第 ????棵树的点个数作为新编号 。
定义 ??(????)=ΣΣ??(????,????)???1??=??+1???1??=0
其中 ,??为树 ????的大小 ,????,????是????中的 点, ??(????,????)代表这两个点的距离。现 代表这两个点的距离。现 在希望你求出 ?1≤??≤??,??(????)是多少 。
【输入格式】
第一行 一个整数 ??,代表要造多少棵树 。
接下来 ??行 ,每5个数 ????,????,????,????,????。
【输出格式】
??行每一个整数代表 ??(????)对109+7取模之后的值 。
【样例输入】
3
0 2
1 0 4
2 1 0 3
【样例输出】
2
28
216
P105 zhx 洗衣
第 5 页 共 5 页
【数据规模与约定】
对于 30%的数据, 1≤??≤10。
对于 60%的数据 ,每棵树的点数个不超过 105。
对于 100%的数据 ,1≤??≤60。

 

Day2下午

标签:space   一个   while   main   连接   friend   freopen   mes   技术分享   

原文地址:http://www.cnblogs.com/CLGYPYJ/p/7750266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!