第八次多校,挂机三小时

Posted by Cww97 on 2016-08-12

版权声明:本文为博主原创文章,未经博主允许不得转载。原文所在http://blog.csdn.net/cww97 https://blog.csdn.net/cww97/article/details/52188130
01 额,乱搞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1000+5;
int a[MAXN], b[MAXN];
int l[MAXN], r[MAXN];
bool vis[MAXN];
int main(){
int T;
cin >> T;
while(T--) {
int N, M;
scanf("%d%d", &N, &M);
fill(vis, vis+N+1, false);
for(int i = 1; i <= N; i++) {
scanf("%d", a + i);
l[i] = r[i] = i;
}
for(int i = 1; i <= N; i++) {
scanf("%d", b + i);
}
for(int i = 0; i < M; i++) {
int x, y;
scanf("%d%d", &x, &y);
for(int j = 1; j <= N; j++) {
if (l[j] >= x && l[j] <= y) l[j] = x;
if (r[j] >= x && r[j] <= y) r[j] = y;
}
}
bool ok = true;
for(int i = 1; i <= N; i++) {
int pos = -1;
for(int j = l[i]; j <= i; j++) {
if (!vis[j] && b[j] == a[i]) {
pos = j;
break;
}
}
if (pos == -1) for(int j = i + 1; j <= r[i]; j++) {
if (!vis[j] && b[j] == a[i]) {
pos = j;
break;
}
}
if (pos == -1) {ok = false; break;}
else vis[pos] = true;
}
cout << (ok ? "Yes" : "No") << endl;
}
return 0;
}

06
解个微分方程,得出v=sqrt(2ct+v0*v0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100007;
double v[N];

int main(){
//freopen("fuck.in","r",stdin);
int T,n,q,x,k;
double c,t;
scanf("%d",&T);
while (T--){
scanf("%d%lf",&n,&c);
for (int i=1;i<=n;i++)
scanf("%lf%d%d",&v[i],&x,&x);
sort(v+1,v+n+1);
scanf("%d",&q);
while(q--){
scanf("%lf%d",&t,&k);
double ans = 1.0*v[k]*v[k];
ans += 2.0*c*t;
ans = sqrt(ans);
printf("%.3lf\n",ans);
}
}
return 0;
}

11
还是乱搞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 100000+5;
char data[MAXN];
int main(){
int T;
cin >> T;
while(T--) {
int n;
scanf("%d", &n);
scanf("%s", data);
int cnt = 0;
bool ok = true;
for(int i = 0; i < n; i++) {
if (data[i] == '(') cnt++;
else cnt--;
if (cnt < -2){ok = false;break; }
}
if (cnt != 0) ok = false;
if (n == 2 && data[0] == '(') ok = false;
if (ok) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}

08
有毒
有毒
有毒
这里写图片描述
扔个WA的代码吧,反正没人看
悬疑代码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=800007;
ll arr[N];

struct tree{
ll su[N],ma[N],mi[N],tag[N],set[N],size[N],ans;
int l[N],r[N],M;

inline void Tag(int t,ll x){
mi[t]+=x;
ma[t]+=x;
su[t]+=size[t]*x;
if (set[t])set[t]+=x;
else tag[t]+=x;
}

inline void Set(int t,ll x){
mi[t]=ma[t]=x;
su[t]=size[t]*x;
if (tag[t])tag[t]=0;
set[t]=x;
}

inline void down(int t){
if (tag[t]){
Tag(t<<1 ,tag[t]);
Tag(t<<1^1,tag[t]);
tag[t] = 0 ;
}
if (set[t]){
Set(t<<1 ,set[t]);
Set(t<<1^1,set[t]);
set[t] = 0 ;
}
}

inline void maintain(int t){
ma[t]=max(ma[t<<1],ma[t<<1^1]);
mi[t]=min(mi[t<<1],mi[t<<1^1]);
su[t]= su[t<<1]+su[t<<1^1] ;
}

void build(int n){
M=1; while(M<n)M<<=1; M--;
for (int i=M+1;i<=M*2+1;i++){
l[i]=r[i]=i-M;
su[i]=ma[i]=mi[i]=(i<=M+n)?(ll)arr[i-M]:0;
size[i]=1;
tag[i]=set[i]=0;
}
for (int i=M;i>=1;i--){
l[i]=l[i<<1],r[i]=r[i<<1^1];
maintain(i);
size[i]=size[i<<1]<<1;
}
}

void Add(int L,int R){
ll x;scanf("%I64d",&x);
add(1,L,R,x);
}
void add(int t,int L,int R,ll x){
if (L<=l[t]&&r[t]<=R){Tag(t,x);return;}
down(t);
int mid = (l[t] + r[t]) >> 1;
if (L<=mid)add(t<<1 ,L,R,x);
if (mid< R)add(t<<1^1,L,R,x);
maintain(t);
}

void Sqrt(int L,int R){_sqrt(1,L,R);}
void _sqrt(int t,int L,int R){
if (ma[t]==1){return;}
if (L<=l[t]&&r[t]<=R&&ma[t]==mi[t]){
Set(t,(ll)sqrt(ma[t]+0.5));
return;
}
down(t);
int mid = (l[t] + r[t]) >> 1;
if (L<=mid)_sqrt(t<<1 ,L,R);
if (mid <R)_sqrt(t<<1^1,L,R);
maintain(t);
}

ll sum(int L,int R){
ans = 0;
get(1,L,R);
return ans;
}
void get(int t,int L,int R){
if (L<=l[t]&&r[t]<=R){
ans += su[t];
return ;
}
down(t);
int mid=(l[t] + r[t]) >> 1 ;
if (L<=mid) get(t<<1 ,L,R);
if (mid< R) get(t<<1^1,L,R);
maintain(t);
}
}T;

int main(){
//freopen("fuck.in","r",stdin);
int cas,n,m,op,l,r;
scanf("%d",&cas);
while (cas--){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)scanf("%I64d",&arr[i]);
T.build(n);
while (m--){
scanf("%d%d%d",&op,&l,&r);
if (op==1)T.Add(l,r);
else if (op==2)T.Sqrt(l,r);
else printf("%I64d\n",T.sum(l,r));
//printf("ALLsum%I64d\n",T.sum(1,n));
}
}
return 0;
}