P105
zhx 竞赛时间:????年??月??日??:??-??:??
题目名称 |
【模拟考试|济南刷题冲刺 Day2 下午】洗澡 |
日记 |
洗衣 |
名称 |
shower |
diary |
cloth |
输入 |
shower.in |
diary.in |
cloth.in |
输出 |
shower.out |
diary.out |
cloth.out |
每个测试点时限 |
1s |
1s |
1s |
内存限制 |
256MB |
256MB |
256MB |
测试点数目 |
10 |
10 |
10 |
每个测试点分值 |
10 |
10 |
10 |
是否有部分分 |
无 |
无 |
无 |
题目类型 |
传统 |
传统 |
传统 |
洗澡 【问题描述】
你是能看到第一题的friends呢。
——hja
洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代价(将左括号变成右括号或者相反),求最小代价使得括号序列合法。
【输入格式】
一行一个括号序列。
【输出格式】
一行一个整数代表答案。
【样例输入】
())(
【样例输出】
2
【数据范围与规定】
对于50%的数据,括号序列长度不超过100。
对于100%的数据,括号序列长度不超过105且一定为偶数,只包含小括号。
#include
#include
#include
#include
#define MAXN 100005
using namespace std;
char s[MAXN],st[MAXN];
int main(int argc,char *argv[]) {
freopen("shower.in","r",stdin);
freopen("shower.out","w",stdout);
scanf("%s",s + 1);
int len = strlen(s + 1),top = 0,Ans = 0;
for(int i=1;
i<=len;
++i) {
if(s[i] == ')') {
if(top > 0) top--;
else st[++top] = '(',++Ans;
}
else if(s[i] == '(') st[++top] = '(';
}
printf("%d\n",top/2 + Ans);
fclose(stdin);
fclose(stdout);
return 0;
}
日记 【问题描述】
你是能看到第二题的friends呢。
——laekov
日记之中,写满了质数,两个质数之间如果没有其他质数,那么则称为相邻的质数。给定N,k,询问不超过N的数中能够表示成连续k个质数之和的最大的数是多少。
【输入格式】
第一行一个整数T代表数据组数。
对于每组数据,一行行两个整数N,k。
【输出格式】
对于每组数据,一行一个整数代表答案。如果不存在,则输出-1。
【样例输入】
3
20 2
20 3
20 4
【样例输出】
18
15
17
【数据范围与规定】
对于20%的数据,1≤N≤100。
对于40%的数据,T=1。
对于另外20%的数据,所有的询问的N相等。
对于100%的数据,1≤T<2000,1≤N≤106。
#include
#include
#include
#include
#define MAXN 1000005
using namespace std;
typedef long long LL;
bool is_prime[MAXN];
int prime[100005];
LL sum[100005];
inline void read(int &x) {
x = 0;
register char c = getchar();
while(!isdigit(c)) c = getchar();
while(isdigit(c)) x = x * 10 + c - '0', c = getchar();
}int main(int argc,char *argv[]) {
int tot = 0,T,n,k;
for(int i=2;
i<=1000000;
++i) {
if(!is_prime[i]) prime[++tot] = i;
for(int j=1;
j<=tot&&prime[j]*i<=MAXN;
++j) {
is_prime[i * prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
for(int i=1;
i<=tot;
++i) sum[i] = sum[i-1] + prime[i];
read(T);
while(T--) {
read(n),read(k);
int Mid,l = 1, r = tot - k + 2,Ans = -1;
if(r <= 1) { printf("-1\n");
continue;
}
while(l <= r) {
int Mid = l + r >> 1;
if(sum[Mid + k - 1] - sum[Mid - 1] <= n) l = Mid + 1, Ans = Mid;
else r = Mid - 1;
}
if(sum[Ans + k - 1] - sum[Ans - 1] <= n && Ans != -1) printf("%lld\n",sum[Ans + k - 1] - sum[Ans - 1]);
else printf("-1\n");
}
}
洗衣 【问题描述】
你是能看到第三题的friends呢。
——aoao
洗完衣服,就要晒在树上。但是这个世界并没有树,我们需要重新开始造树。我们一开始拥有T0,是一棵只有一个点的树,我们要用它造出更多的树。
生成第i棵树我们需要五个参数ai,bi,ci,di,li(ai,bi 定义
FTi=i=0n-1j=i+1n-1d(vi,vj)
其中,n为树Ti的大小,vi,vj是Ti中的点,d(vi,vj)代表这两个点的距离。现在希望你求出?1≤i≤m,FTi是多少。
【输入格式】
第一行一个整数m,代表要造多少棵树。
接下来m行,每行5个数ai,bi,ci,di,li。
【输出格式】
m行每行一个整数代表F(Ti)对109+7取模之后的值。
【样例输入】
3
0 0 0 0 2
1 1 0 0 4
2 2 1 0 3
【样例输出】
2
28
216
【数据规模与约定】
对于30%的数据,1≤m≤10。
对于60%的数据,每棵树的点数个数不超过105。
对于100%的数据,1≤m≤60。
#include
#include
#include
#include
#includeusing namespace std;
const int mo=1000000007;
const int maxn=100;
int n,id1[maxn],id2[maxn],l[maxn],res[maxn];
long long num1[maxn],num2[maxn],size[maxn];
struct rec
{
int p;
long long p1,p2;
rec(){}
rec(int a,long long b,long long c)
{
p=a;
if (b ,int > ma;
map ma2;
int solve(int p,long long p1,long long p2)
{
if (!p) return 0;
if (p1==p2) return 0;
rec x=rec(p,p1,p2);
if (ma2.count(x)) return ma2[x];
if (p1 px;
px=make_pair(p,n);
if (ma.count(make_pair(p,n))) return ma[px];
if (n
推荐阅读
- POJ 1027 The Same Game 模拟题
- CodeForces - 1102B(Array K-Coloring(给数字涂颜色))
- CodeForces1102B--Array K-Coloring--思维
- 模拟|【离散化扫描】 校门外的树{加强版}
- codeforce 469 B C -模拟 -构造
- Codeforces Round #531 (Div. 3) D Balanced Ternary String【模拟】
- NOIP|POJ2728 Desert King - (0/1)分数规划
- 思维|牛客练习赛51 E 数列 (二分 + 贪心 + 思维)
- zoj Capture the Flag 比较难的模拟题