2018년 북우망 연구기 시험
48116 단어 OJ 퀴즈
문서 목록
Problem A
슈퍼마켓과 유사하게 계산하여 구매한 상품의 총 가격을 계산하다.
입력
1차 비헤이비어 테스트 데이터 그룹 수 T(0
각 조의 데이터는 첫 번째 행위로 상품의 종류 n을 구매한다. 다음 n행은 두 개의 데이터로 첫 번째는 상품 가격이고 두 번째는 상품 수량이며 가격은 실형이다.
출력
줄마다 대응하는 데이터의 총 가치를 출력하고 두 개의 소수를 보존한다.
샘플 입력
2
2
1.00 2
0.50 2
1
100.0 1
샘플 출력
3.00
100.00
코드
#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int main()
{
freopen("in","r",stdin);
int T,N;
scanf("%d",&T);
while(T--){
double sum=0;
double t;
int n;
scanf("%d",&N);
while(N--){
scanf("%lf%d",&t,&n);
sum+=t*n;
}
printf("%.2f
",sum);
}
return 0;
}
ProblemB
V자형 수열은 삼원조 a[j]와 a[k]>a[j]만 합치면 V자형 수열로 계산된다.
입력
1차 비헤이비어 테스트 데이터 그룹 수 T
각 그룹 데이터의 첫 번째 동작 이 그룹의 숫자 개수
다음 행위 그룹 요소
출력
대응하는 그룹의 v자형 수열에 맞는 개수를 출력합니다
테스트 데이터
2
3
2 1 2
5
2 1 2 1 2
출력
1
4
코드
복잡성이 높아 최적화 필요#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int a[LEN];
int main()
{
freopen("in","r",stdin);
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
FF(i,N)
scanf("%d",&a[i]);
int ans=0;
for(int i=1;i<N-1;i++){
int n=0,m=0;
for(int j=0;j<i;j++){
if(a[j]>a[i]){
n++;
}
}
for(int j=i+1;j<N;j++){
if(a[j]>a[i])
m++;
}
ans+=n*m;
}
printf("%d
",ans);
}
return 0;
}
Problem C. 24 시
제목 설명
4개의 숫자를 입력하십시오. a, b, c, d.만약에 abcd=24라면 이 수조가 24점을 만족시킨다고 하는데 그 중에서 +, -, *,/어느 것이든지 할 수 있고 결과 24를 얻지 못하면 이 수조가 24점을 만족시키지 못한다고 한다.(실제 형식으로 계산됨)
입력
첫 번째 비헤이비어 테스트 그룹 수 t
다음 t행, 매 행위 4개의 정수 a, b, c, d, 24점 만족 여부 테스트
1<=a, b, c, d<10000(오른쪽 구간은 잊어버리고, 어쨌든 네 개의 수는 0이 아니다)
출력
줄마다
만족하면 YES 내보내기
불만족, 출력 NO
예제
2
2
1.00 2
0.50 2
1
100.0 1
3.00
100.00
#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int main()
{
freopen("in","r",stdin);
int T,N;
scanf("%d",&T);
while(T--){
double sum=0;
double t;
int n;
scanf("%d",&N);
while(N--){
scanf("%lf%d",&t,&n);
sum+=t*n;
}
printf("%.2f
",sum);
}
return 0;
}
V자형 수열은 삼원조 a[j]와 a[k]>a[j]만 합치면 V자형 수열로 계산된다.
입력
1차 비헤이비어 테스트 데이터 그룹 수 T
각 그룹 데이터의 첫 번째 동작 이 그룹의 숫자 개수
다음 행위 그룹 요소
출력
대응하는 그룹의 v자형 수열에 맞는 개수를 출력합니다
테스트 데이터
2
3
2 1 2
5
2 1 2 1 2
출력
1
4
코드
복잡성이 높아 최적화 필요
#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int a[LEN];
int main()
{
freopen("in","r",stdin);
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
FF(i,N)
scanf("%d",&a[i]);
int ans=0;
for(int i=1;i<N-1;i++){
int n=0,m=0;
for(int j=0;j<i;j++){
if(a[j]>a[i]){
n++;
}
}
for(int j=i+1;j<N;j++){
if(a[j]>a[i])
m++;
}
ans+=n*m;
}
printf("%d
",ans);
}
return 0;
}
Problem C. 24 시
제목 설명
4개의 숫자를 입력하십시오. a, b, c, d.만약에 abcd=24라면 이 수조가 24점을 만족시킨다고 하는데 그 중에서 +, -, *,/어느 것이든지 할 수 있고 결과 24를 얻지 못하면 이 수조가 24점을 만족시키지 못한다고 한다.(실제 형식으로 계산됨)
입력
첫 번째 비헤이비어 테스트 그룹 수 t
다음 t행, 매 행위 4개의 정수 a, b, c, d, 24점 만족 여부 테스트
1<=a, b, c, d<10000(오른쪽 구간은 잊어버리고, 어쨌든 네 개의 수는 0이 아니다)
출력
줄마다
만족하면 YES 내보내기
불만족, 출력 NO
예제
3
2 6 3 4
1 1 2 3
3 2 2 8
// 2+6*3+4
Yes
// 1 1 2 3
No
// 3*2/2*8
Yes
코드
OJ가 제출할 수 있는 것은 아니지만 구덩이를 기록하고 싶은데, 그것은 부동점수로 계산하는 것이 가장 좋다는 것이다
#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int num[4];
string a="+-*/";//
vector<string> ans;//
string ch2str(char fuck){
char fuckYou[2]={0};
fuckYou[0]=fuck;
return fuckYou;
}
void product(int t,int n,int m){//P(n,m)
if(t>=m){//
return;
}else{
vector<string> tmp;
int sz=ans.size();
if(sz){
for(int i=0;i<n;i++){
for(int j=0;j<sz;j++){
tmp.push_back(ans[j]+a[i]);
}
}
}else{
for(int i=0;i<n;i++){
tmp.push_back(ch2str(a[i]));
}
}
ans=tmp;
product(t+1,n,m);
}
}
int operate(int &a,int& b,char op){
int v;
switch(op){
case '+':
v=a+b;
break;
case '-':
v=a-b;
break;
case '*':
v=a*b;
break;
case '/':
v=a/b;
break;
}
return v;
}
bool judge(string op,int*num){
string opbk=op;
string p="*/+-";//
vector<int> v(num,num+4);
while(op.size()>0){
FF(i,4){//
FF(j,op.size()){
if(p[i]==op[j]){
int ans=operate(v[j],v[j+1],op[j]);
v[j]=ans;
v.erase(v.begin()+j+1);
op.erase(j,1);
break;
}
}
}
}
//
if(v[0]==24){
FF(i,3){
cout<<num[i];
cout<<opbk[i];
}
cout<<num[3]<<endl;
}//end
return v[0]==24;
}
int main()
{
freopen("in","r",stdin);
int T,N;
scanf("%d",&T);
product(0,4,3);// , ans
while(T--){
FF(i,4){
scanf("%d",&num[i]);
}
bool yes=0;
for(int i=0;i<ans.size();i++){//
string op=ans[i];
bool pd=judge(op,num);
if(pd){
yes=1;
break;
}
}
puts(yes?"Yes":"No");
}
product(0,4,3);
return 0;
}
Problem D. 최대 가치
모든 부품에 적당한 온도 구간이 있다. [Ri, Ji]는 온도 tji가 되면 부품의 가치는 z이다.온도가 적당하면 가치는 y이다.그리고 y>x, y>z.지금 온도 t를 확인할 수 있는 항온 상자가 있습니다.
입력
첫 번째 줄은 순서대로 각각 n, x, y,z이다.0 다음 n 동작 각 부품의 적정 온도 구간 09
출력
온도치 t를 확정하여 이 온도에서 모든 부품의 총가치가 가장 크고 이 가치를 출력합니다
테스트 데이터
3 1 3 2
1 4
2 5
7 10
출력
7
코드
샘플을 통과할 수 있지만 AC의 복잡도가 가능한지 확실하지 않습니다. Nlog2N N∈[1200000)#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int main()
{
vector<int> left;//
vector<int> right;//
vector<int> node;//
freopen("in","r",stdin);
int N,x,y,z,l,r;//0 < n <20000
scanf("%d%d%d%d",&N,&x,&y,&z);
FF(i,N){
scanf("%d%d",&l,&r);
left.push_back(l);
right.push_back(r);
node.push_back(l+1);//
node.push_back(r-1);
}
sort(left.begin(),left.end());
sort(right.begin(),right.end());
sort(node.begin(),node.end());
int ans=0;
FF(i,node.size()){
int cur=node[i];
vector<int>::iterator it;
//
it=upper_bound(right.begin(),right.end(),cur);
int lCnt=distance(right.begin(),it);
//
it=lower_bound(left.begin(),left.end(),cur);
int rCnt=distance(it,left.end());
int cCnt=N-lCnt-rCnt;
int sum=rCnt*x+cCnt*y+lCnt*z;
ans=max(ans,sum);
}
printf("%d
",ans);
return 0;
}
3 1 3 2
1 4
2 5
7 10
7
#include
#define FF(a,b) for(int a=0;a
#define F(a,b) for(int a=1;a<=b;a++)
#define LEN 200
#define INF 100000
#define bug(x) cout<
using namespace std;
typedef long long ll;
const double pi=acos(-1);
int main()
{
vector<int> left;//
vector<int> right;//
vector<int> node;//
freopen("in","r",stdin);
int N,x,y,z,l,r;//0 < n <20000
scanf("%d%d%d%d",&N,&x,&y,&z);
FF(i,N){
scanf("%d%d",&l,&r);
left.push_back(l);
right.push_back(r);
node.push_back(l+1);//
node.push_back(r-1);
}
sort(left.begin(),left.end());
sort(right.begin(),right.end());
sort(node.begin(),node.end());
int ans=0;
FF(i,node.size()){
int cur=node[i];
vector<int>::iterator it;
//
it=upper_bound(right.begin(),right.end(),cur);
int lCnt=distance(right.begin(),it);
//
it=lower_bound(left.begin(),left.end(),cur);
int rCnt=distance(it,left.end());
int cCnt=N-lCnt-rCnt;
int sum=rCnt*x+cCnt*y+lCnt*z;
ans=max(ans,sum);
}
printf("%d
",ans);
return 0;
}