文章目录
202012-2 期末预测之最佳阈值202009-2 风险人群201909-2 小明种苹果(续)201903-2 二十四点201812-2 小明放学201809-2 买菜201803-2 碰撞的小球201703-2 学生排队201312-2 ISBN号码
202012-2 期末预测之最佳阈值
#include <iostream>
#include <stack>
#define M 100000
using namespace std
;
typedef long long LL
;
int pre(int y
, int the
)
{
if(y
< the
)
return 0;
else
return 1;
}
LL s1
[M
+ 1];
int res
[M
+ 1];
int main()
{
int m
, sum
= 0, i
, j
;
stack
<long long> s
;
cin
>> m
;
for(i
= 0; i
< m
; i
++)
{
cin
>> s1
[i
];
cin
>> res
[i
];
s
.push(s1
[i
]);
}
int max
= 0, maxi
= 0;
for(j
= 0; j
< m
; j
++)
{
sum
= 0;
for(i
= 0; i
< m
; i
++)
if(pre(s1
[i
], s
.top()) == res
[i
])
sum
++;
if(sum
> max
)
{
max
= sum
;
maxi
= s
.top();
}
if(sum
== max
)
{
if(s
.top() > maxi
)
maxi
= s
.top();
}
s
.pop();
}
cout
<< maxi
;
return 0;
}
202009-2 风险人群
0
#include <iostream>
using namespace std
;
int main()
{
int n
, k
, t
, xl
, yl
, xr
, yr
, x1
, y1
, i
, j
, max
;
int jsum
= 0, dsum
= 0;
cin
>> n
>> k
>> t
>> xl
>> yl
>> xr
>> yr
;
for (i
= 0; i
< n
; i
++)
{
max
= 0;
int cnt
= 0, count
= 0;
for (j
= 0; j
< t
; j
++)
{
cin
>> x1
>> y1
;
if (x1
>= xl
&& x1
<= xr
&& y1
>= yl
&& y1
<= yr
)
{
count
++;
cnt
++;
}
else
{
if (max
< count
)
max
= count
;
count
= 0;
}
}
if (max
== 0)
max
= count
;
if (max
> k
)
dsum
++;
if (cnt
> 0)
jsum
++;
}
cout
<< jsum
<< endl
<< dsum
<< endl
;
return 0;
}
100没啥好说的,经验就是分开做,别以为你能一次处理多个
#include<iostream>
using namespace std
;
int arr
[2001] = { 0 };
int main(void)
{
int n
, k
, t
, xl
, yd
, xr
, yu
;
scanf("%d%d%d%d%d%d%d", &n
, &k
, &t
, &xl
, &yd
, &xr
, &yu
);
int tempn
= n
, jingguo
= 0, douliu
= 0;
while (tempn
--) {
for (int i
= 1; i
<= t
; i
++)
scanf("%d%d", &arr
[i
], &arr
[i
+ 1000]);
int tempk
= 0;
for (int i
= 1; i
<= t
; i
++)
if (arr
[i
] >= xl
&& arr
[i
] <= xr
&& arr
[i
+ 1000] >= yd
&& arr
[i
+ 1000] <= yu
)
{
jingguo
++;
break;
}
for (int i
= 1; i
<= t
; i
++) {
if (arr
[i
] >= xl
&& arr
[i
] <= xr
&& arr
[i
+ 1000] >= yd
&& arr
[i
+ 1000] <= yu
) {
tempk
++;
if (tempk
== k
) {
douliu
++;
break;
}
}
else
tempk
= 0;
}
}
printf("%d\n%d\n", jingguo
, douliu
);
return 0;
}
201909-2 小明种苹果(续)
50分,空间占用382.8MB,太大了所以不给过???
#include <iostream>
#define N 1000
using namespace std
;
int apple
[N
+ 1][N
+ 1];
int flag
[N
+ 1];
int main()
{
int n
, t
, d
= 0, e
= 0, sumt
= 0;
cin
>> n
;
for (int i
= 0; i
< n
; i
++)
{
cin
>> t
;
for (int j
= 0; j
< t
+ 1; j
++)
if (j
== 0)
apple
[i
][j
] = t
;
else
cin
>> apple
[i
][j
];
}
for (int i
= 0; i
< n
; i
++)
{
int sum
= 0;
for (int j
= 0; j
< apple
[i
][0] + 1; j
++)
{
if (j
== 0)
continue;
else if (j
== 1)
sum
= apple
[i
][j
];
else if (apple
[i
][j
] <= 0)
sum
+= apple
[i
][j
];
else if (sum
> apple
[i
][j
])
{
d
++;
sum
= apple
[i
][j
];
flag
[i
] = 1;
}
}
sumt
+= sum
;
}
if (d
>= 3)
for (int i
= 0; i
< n
; i
++)
if (flag
[(i
- 1 + n
) % n
] && flag
[i
] && flag
[(i
+ 1) % n
])
e
++;
cout
<< sumt
<< " " << d
<< " " << e
;
return 0;
}
100分,空间占用仅520.0kb
#include <iostream>
#define N 1000
using namespace std
;
int flag
[N
+ 1];
int main()
{
int n
, t
, a
, d
= 0, e
= 0, sumt
= 0;
cin
>> n
;
for (int i
= 0; i
< n
; i
++)
{
int sum
= 0;
cin
>> t
;
cin
>> sum
;
for (int j
= 2; j
<= t
; j
++) {
cin
>> a
;
if (a
<= 0)
sum
+= a
;
else if (a
< sum
) {
flag
[i
] = 1;
sum
= a
;
}
}
sumt
+= sum
;
if (flag
[i
])
d
++;
}
if (d
>= 3)
for (int i
= 0; i
< n
; i
++)
if (flag
[(i
- 1 + n
) % n
] && flag
[i
] && flag
[(i
+ 1) % n
])
e
++;
cout
<< sumt
<< " " << d
<< " " << e
;
return 0;
}
201903-2 二十四点
#include <stdio.h>
#include <string.h>
#include <math.h>
int a
[10];
char s
[7];
int original(char s
[]);
bool
issecond(char c
);
bool
istwofour(char s
[]);
int original(char s
[])
{
int res
= a
[0];
for (int i
= 1; i
< 7; i
+= 2)
{
if (s
[i
] == '+')
res
+= a
[i
+ 1];
if (s
[i
] == '-')
res
-= a
[i
+ 1];
if (s
[i
] == 'x')
res
*= a
[i
+ 1];
if (s
[i
] == '/')
res
+= floor(res
/ a
[i
+ 1]);
}
return res
;
}
bool
issecond(char c
)
{
if (c
== 'x' || c
== '/')
return true
;
else
return false
;
}
bool
istwofour(char s
[])
{
int res
= 0;
for (int i
= 0; i
< 7; i
+= 2)
a
[i
] = s
[i
] - '0';
if (issecond(s
[1]) && issecond(s
[3]) && issecond(s
[5])){
if (s
[1] == 'x')
res
= a
[0] * a
[2];
else
res
= floor(a
[0] / a
[2]);
for (int i
= 3; i
< 7; i
+= 2)
if (s
[i
] == 'x')
res
= res
* a
[i
+ 1];
else
res
= floor(res
/ a
[i
+ 1]);
}
else if (!(issecond(s
[1])) && !(issecond(s
[3])) && !(issecond(s
[5]))){
res
+= a
[0];
for (int i
= 1; i
< 7; i
+= 2)
if (s
[i
] == '+')
res
+= a
[i
+ 1];
else
res
-= a
[i
+ 1];
}
else
{
int m
= 0, n
= 0;
for (int i
= 3; i
< 7; i
+= 2)
if (issecond(s
[i
])) {
m
= i
;
if (i
< 4) {
i
+= 2;
if (issecond(s
[i
]))
n
= i
;
}
}
if (m
== 0)
res
= original(s
);
else if (n
== 0) {
if (issecond(s
[1]))
{
int tmp
;
res
= a
[0];
if (s
[1] == '/')
res
= floor(res
/ a
[2]);
else
res
*= a
[2];
if (s
[5] == '/')
tmp
= floor(a
[4] / a
[6]);
else
tmp
= a
[4] * a
[6];
if (s
[3] == '+')
res
+= tmp
;
else
res
-= tmp
;
}
else {
if (s
[5] == '/')
res
+= floor(a
[4] / a
[6]);
else
res
+= a
[4] * a
[6];
if (s
[3] == '+')
res
+= a
[2];
else
res
+= a
[2] - res
;
if (s
[1] == '+')
res
+= a
[0];
else
res
+= a
[0] - res
;
}
}
else {
if (s
[3] == '/')
res
+= floor(a
[2] / a
[4]);
else
res
+= a
[2] * a
[4];
if (s
[5] == '/')
res
= floor(res
/ a
[6]);
else
res
= res
* a
[6];
if (s
[1] == '+')
res
+= a
[0];
else
res
+= a
[0] - res
;
}
}
return res
== 24;
}
int main()
{
int n
;
scanf("%d", &n
);
while (n
--)
{
scanf("%s", s
);
if (istwofour(s
))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
201812-2 小明放学
第一次写只有30分,就不贴了,第二次写60分呵呵第二题真难,第三次80了,但是我不知道哪里还有瑕疵。
#include <iostream>
using namespace std
;
int main()
{
int r
, y
, g
, n
, k
, t
, sum1
;
long long sum
= 0, judge
;
cin
>> r
>> y
>> g
>> n
;
sum1
= r
+ g
+ y
;
while (n
--)
{
cin
>> k
>> t
;
judge
= (sum
- t
) % sum1
;
switch (k
)
{
case 1:
if (judge
>= g
+ y
)
sum
= sum
+ sum1
- judge
;
else if (judge
>= g
)
sum
= sum
+ g
+ y
- judge
+ r
;
break;
case 2:
if (judge
<= r
)
sum
= sum
+ r
- judge
;
else if (judge
>= r
+ g
)
sum
= sum
+ sum1
- judge
+ r
;
break;
case 3:
if (judge
<= y
+ r
)
sum
= sum
+ r
+ y
- judge
;
break;
default:
sum
+= t
;
break;
}
}
cout
<< sum
<< endl
;
return 0;
}
201809-2 买菜
#include <iostream>
#define N 1000000
using namespace std
;
struct stucktime
{
int le
, ri
;
};
stucktime xh
[N
+ 1], xw
[N
+ 1];
int main()
{
int n
, i
, j
, sum
= 0;
cin
>> n
;
for (i
= 0; i
< n
; i
++)
cin
>> xh
[i
].le
>> xh
[i
].ri
;
for (i
= 0; i
< n
; i
++)
cin
>> xw
[i
].le
>> xw
[i
].ri
;
for (i
= 0; i
< n
; i
++)
for (j
= 0; j
< n
; j
++)
if (xh
[i
].le
< xw
[j
].le
)
{
if (xh
[i
].ri
> xw
[j
].le
&& xh
[i
].ri
< xw
[j
].ri
)
sum
+= xh
[i
].ri
- xw
[j
].le
;
else if (xh
[i
].ri
> xw
[j
].ri
)
sum
+= xw
[j
].ri
- xw
[j
].le
;
}
else if (xh
[i
].le
>= xw
[j
].le
&& xh
[i
].le
<xw
[j
].ri
)
{
if (xh
[i
].ri
<= xw
[j
].ri
)
sum
+= xh
[i
].ri
- xh
[i
].le
;
else
sum
+= xw
[j
].ri
- xh
[i
].le
;
}
cout
<< sum
;
return 0;
}
#include <iostream>
#define N 1000000
using namespace std
;
struct stucktime
{
int le
, ri
;
};
stucktime xh
[N
+ 1], xw
[N
+ 1];
int main()
{
int n
, i
, j
, sum
= 0, max
, min
;
cin
>> n
;
for (i
= 0; i
< n
; i
++)
cin
>> xh
[i
].le
>> xh
[i
].ri
;
for (i
= 0; i
< n
; i
++)
cin
>> xw
[i
].le
>> xw
[i
].ri
;
for (i
= 0; i
< n
; i
++)
for (j
= 0; j
< n
; j
++)
{
if (xh
[i
].le
> xw
[j
].le
)
max
= xh
[i
].le
;
else
max
= xw
[j
].le
;
if (xh
[i
].ri
< xw
[j
].ri
)
min
= xh
[i
].ri
;
else
min
= xw
[j
].ri
;
if (max
< min
)
sum
+= min
- max
;
}
cout
<< sum
;
return 0;
}
201803-2 碰撞的小球
#include <iostream>
#include <cmath>
#define N 100
using namespace std
;
int loc
[N
+ 1];
int main()
{
int i
, j
, n
, l
, t
, m
;
cin
>> n
>> l
>> t
;
for (i
= 0; i
< n
; i
++)
cin
>> loc
[i
];
for (i
= 0; i
< t
; i
++)
for (j
= 0; j
< n
; j
++)
{
if (abs(loc
[j
]) == l
)
loc
[j
] = -loc
[j
];
else
for(m
= j
+1; m
< n
; m
++)
if (abs(loc
[j
]) == abs(loc
[m
]))
{
loc
[j
] = -loc
[j
];
loc
[m
] = -loc
[m
];
}
loc
[j
]++;
}
for (i
= 0; i
< n
; i
++)
{
loc
[i
] = abs(loc
[i
]);
if (i
!= 0)
cout
<< " ";
cout
<< loc
[i
];
}
return 0;
}
201703-2 学生排队
#include <iostream>
#define N 2000
using namespace std
;
int stu
[N
+ 1];
void MakeTable(int);
void swap(int*, int*);
void swap(int* a
, int* b
)
{
int temp
= *a
;
*a
= *b
;
*b
= temp
;
}
void MakeTable(int n
)
{
for (int i
= 1; i
<= n
; i
++)
stu
[i
] = i
;
}
int main()
{
int n
, m
, s1
, s2
, a
;
cin
>> n
>> m
;
MakeTable(n
);
while (m
--)
{
cin
>> s1
>> s2
;
for (int i
= 1; i
<= n
; i
++)
if (stu
[i
] == s1
)
{
a
= i
;
break;
}
while (s2
!= 0)
{
if (s2
> 0) {
swap(&stu
[a
], &stu
[a
+ 1]);
s2
--, a
++;
}
else {
swap(&stu
[a
], &stu
[a
- 1]);
s2
++, a
--;
}
}
}
for (int i
= 1; i
<= n
; i
++)
{
if (i
!= 1)
cout
<< " ";
cout
<< stu
[i
];
}
return 0;
}
201312-2 ISBN号码
#include <iostream>
using namespace std
;
int main()
{
int a
, b
, c
, d
, sum
= 0, t
, cos_d
, cos_c
, cos_b
;
scanf("%d-%d-%d-%d", &a
, &b
, &c
, &d
);
sum
+= a
;
cos_b
= b
;
cos_c
= c
;
for (int i
= 4; i
> 1; i
--)
{
t
= b
% 10;
sum
+= t
* i
;
b
/= 10;
}
for (int i
= 9; i
> 4; i
--)
{
t
= c
% 10;
sum
+= t
* i
;
c
/= 10;
}
cos_d
= sum
% 11;
if (cos_d
== d
)
cout
<< "Right!";
else
printf("%d-%d-%d-%d", a
, cos_b
, cos_c
, cos_d
);
return 0;
}
#include <iostream>
#include <string>
using namespace std
;
int main()
{
int sum
= 0, i
= 0, judge
;
string s
;
getline(cin
, s
);
for (int j
= 0; j
< 12; j
++)
{
if (s
[j
] == '-')
continue;
i
++;
sum
+= (s
[j
] - '0') * i
;
}
judge
= sum
% 11;
if (judge
== s
[12] - '0')
cout
<< "Right";
else
{
s
[12] = judge
+ '0';
for (string
::iterator it
= s
.begin(); it
!= s
.end(); it
++)
cout
<< *it
;
}
return 0;
}
#include <iostream>
#include <string>
using namespace std
;
int main()
{
int sum
= 0, i
= 0;
string s
, mod
;
mod
= "0123456789X";
getline(cin
, s
);
for (int j
= 0; j
< 12; j
++)
{
if (s
[j
] == '-')
continue;
i
++;
sum
+= (s
[j
] - '0') * i
;
}
if (s
[12] == mod
[sum
% 11])
cout
<< "Right";
else
{
s
[12] = mod
[sum
% 11];
for (string
::iterator it
= s
.begin(); it
!= s
.end(); it
++)
cout
<< *it
;
}
return 0;
}