第一题
直接满分了:
#include <iostream> using namespace std ; const int N = 1e6 ; int n,a,b ; int panduan(int x1,int y1,int x2, int y2, int a,int b) { int c,k ; if( x2<0 || y2<0 || x1>a || y1>b ) return 0 ; // 在外侧 else { // 先判断x 左 中 右 if( x1<=0 && x2<=a ) c = x2 ; else if( x1>=0 && x2<=a ) c = x2-x1 ; else if( x1>=0 && x2>=a) c = a-x1 ; // 判断 y 上中下 if( y1>=0 && y2>=b) k = b-y1 ; else if(y1>=0 && y2<=b ) k = y2-y1; else if(y1<=0 && y2<=b) k = y2 ; } return c*k ; } int main(){ cin>>n>>a>>b ; int x1,y1,x2,y2 ; int sum =0 ; for(int i=0; i<n ; i++) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2) ; sum += panduan(x1,y1,x2,y2,a,b) ; } cout<<sum<<endl ; return 0 ; }
第二题
第一次提交只拿了 70分, 出现了超时错误,应该是每次都遍历所有点的问题
#include <iostream> #include <algorithm> using namespace std ; const int N = 1e6 ; int n,m,k ; struct tian{ int t,c ; }t[N] ; bool cmp(tian a, tian b) { return a.t>b.t ; } int main(){ cin>>n>>m>>k ; for(int i=0; i<n; i++) scanf("%d%d", &t[i].t, &t[i].c) ; sort(t,t+n,cmp) ; // 按照耗时进行排序 int max = t[0].t ; // 标记最大耗时 while(m>=0) { max -- ; // 提出要求 if( max < k) break ; // 达到最低线 for(int i=0 ; i<n ; i++) { if( t[i].t > max) { t[i].t-- ; m -= t[i].c ; } } } cout<<max+1 ; return 0 ; }
老师给的代码,可以100
标签:03,x1,int,CSP2023,x2,&&,y1,y2 From: https://www.cnblogs.com/zundicai/p/17367115.html