Codeforces Beta Round #4 (Div. 2 Only)
2013-04-30 22:24
369 查看
点击打开链接
A
B
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 35
int d , sumTime;
int minTime[MAXN] , maxTime[MAXN];
int main(){
int tmpMin , tmpMax;
while(scanf("%d%d" , &d , &sumTime) != EOF){
tmpMin = tmpMax = 0;
for(int i = 0 ; i < d ; i++){
scanf("%d%d" , &minTime[i] , &maxTime[i]);
tmpMin += minTime[i];
tmpMax += maxTime[i];
}
if(tmpMin > sumTime || sumTime > tmpMax)
printf("NO\n");
else{
int mark = 0;
printf("YES\n");
for(int i = 0 ; i < d ; i++){
if(tmpMin != sumTime){
int count = minTime[i];
for(int j = minTime[i]+1 ; j <= maxTime[i] ; j++){
if(tmpMin == sumTime)
break;
count++;
tmpMin++;
}
if(!mark){
printf("%d" , count);
mark = 1;
}
else
printf(" %d" , count);
}
else{
if(!mark){
printf("%d" , minTime[i]);
mark = 1;
}
else
printf(" %d" , minTime[i]);
}
}
}
}
return 0;
}
C
D
A
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int main(){ int n; while(scanf("%d" , &n) != EOF){ if(n < 4) printf("NO\n"); else{ if(n%2 == 0) printf("YES\n"); else printf("NO\n"); } } return 0; }
B
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 35
int d , sumTime;
int minTime[MAXN] , maxTime[MAXN];
int main(){
int tmpMin , tmpMax;
while(scanf("%d%d" , &d , &sumTime) != EOF){
tmpMin = tmpMax = 0;
for(int i = 0 ; i < d ; i++){
scanf("%d%d" , &minTime[i] , &maxTime[i]);
tmpMin += minTime[i];
tmpMax += maxTime[i];
}
if(tmpMin > sumTime || sumTime > tmpMax)
printf("NO\n");
else{
int mark = 0;
printf("YES\n");
for(int i = 0 ; i < d ; i++){
if(tmpMin != sumTime){
int count = minTime[i];
for(int j = minTime[i]+1 ; j <= maxTime[i] ; j++){
if(tmpMin == sumTime)
break;
count++;
tmpMin++;
}
if(!mark){
printf("%d" , count);
mark = 1;
}
else
printf(" %d" , count);
}
else{
if(!mark){
printf("%d" , minTime[i]);
mark = 1;
}
else
printf(" %d" , minTime[i]);
}
}
}
}
return 0;
}
C
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 100010 #define N 40 int n , pos; char ch[MAXN] ; int vis[MAXN]; int main(){ char name ; while(scanf("%d" , &n) != EOF){ memset(vis , 0 , sizeof(vis)); pos = 0; int mark , cnt , p; for(int i = 0 ; i < n ; i++){ scanf("%s" , name); mark = 1; for(int j = 0 ; j < pos ; j++){ if(strcmp(ch[j] , name) == 0){ mark = 0; cnt = vis[j]++; p = j; break; } } if(mark){ printf("OK\n"); strcpy(ch[pos] , name); vis[pos++]++; } else printf("%s%d\n" , ch[p] , cnt); } } return 0; }
D
/* 思路:dp+路径输出 分析: 1 题目要求的是找到最多的信封的个数并输出编号,如果没有则输出0 2 很明显额矩形嵌套问题,利用dp求解,路径输出利用回溯法记录前驱点。 代码: */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 5010 int n , w , h; int pos , ans , mark; int pre[MAXN]; int dp[MAXN]; struct envelop{ int w; int h; int number; }e[MAXN]; /*排序*/ bool cmp(envelop e1 , envelop e2){ if(e1.w != e2.w) return e1.w < e2.w; return e1.h < e2.h; } /*事先判断有没有满足的信封*/ bool judge(){ for(int i = 0 ; i < n ; i++){ if(e[i].w > w && e[i].h > h){ pos = i; return true; } } return false; } /*回溯法输出*/ void output(int x){ if(pre[x] == x){ printf("%d" , e[x].number); return; } output(pre[x]); printf(" %d" , e[x].number); } void solve(){ ans = 0; for(int i = pos ; i < n ; i++){ dp[i] = 1; pre[i] = i; for(int j = pos ; j < i ; j++){ if(e[j].w > w && e[j].h > h && e[i].w > e[j].w && e[i].h > e[j].h && dp[j]+1 > dp[i]){ dp[i] = dp[j] + 1; pre[i] = j; } } if(ans < dp[i]){ ans = dp[i]; mark = i; } } printf("%d\n" , ans); output(mark); printf("\n"); } int main(){ while(scanf("%d%d%d" , &n , &w , &h) != EOF){ for(int i = 0 ; i < n ; i++){ scanf("%d%d" , &e[i].w , &e[i].h); e[i].number = i+1; } sort(e , e+n , cmp); if(!judge()) printf("0\n"); else solve(); } return 0; }
相关文章推荐
- 03Codeforces Beta Round #92 (Div. 2 Only) _B题
- Codeforces Beta Round #85 (Div. 2 Only) A题
- Codeforces Beta Round #83 (Div. 1 Only) E.Darts 凸多边形面积交
- Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam dp
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- #9 (Div. 2 Only) D. How many trees? (dp)(好题)
- Codeforces Beta Round #6 (Div. 2 Only) D. Lizards and Basements 2
- Codeforces Beta Round #6 (Div. 2 Only) D. Lizards and Basements 2 dp
- Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!
- Codeforces Beta Round #72 (Div. 2 Only)D. Doctor
- Codeforces Beta Round #18 (Div. 2 Only)——A
- Codeforces Beta Round #87 (Div. 1 Only)A. Party(深搜/树高)
- Codeforces Beta Round #18 (Div. 2 Only) C. Stripe 前缀和
- CodeForces round 428 div2 only
- Codeforces Beta Round #72 (Div. 2 Only)——A,B,C
- Codeforces Beta Round #75 (Div. 2 Only)——D
- Codeforces Beta Round #76 (Div. 2 Only)——A,B,C
- Codeforces Beta Round #94 (Div. 1 Only) B.String
- Codeforces Beta Round #92 (Div. 2 Only) A题
- Codeforces Beta Round #83 (Div. 1 Only) E.Darts 凸多边形面积交