// //

2019佳木斯集训 Day7

    T1

  不算很水的数学题,难度中

  思路:我们首先发现除了2xy以外剩下的加和必定是个奇数

然后我们发现r是偶数时无解,并且r<=4时无解,其余情况就是

3+一个偶数,显然可以表达所有情况,所以直接输出1和(r-3)/2即可

  
1 #include <bits/stdc++.h>
2 using namespace std;
3 long long r;
4 int main(){
5     scanf("%lld",&r);
6     if(r%2==0||r<=5) printf("NO");
7     else printf("1 %lld",(r-3)/2);
8     return 0;
9 }
T1-签到题

    T2

  垃圾题,臭题,题面都能给错!!!(要不然我就A了!!)

  思路:暴力跑模拟就行,需要注意,班长无论如何都不会去0位置

所以一旦班长跑到0要变到1.

  
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,m,k,t,x,y,l,r;
 4 int main(){
 5     scanf("%d%d%d%d",&n,&m,&k,&t);
 6     for(register int i=1;i<=t;i++){
 7         scanf("%d%d",&x,&y);
 8         if(x==0){
 9             if(y<=m){
10                 m-=y;
11                 n-=y;
12             }
13             else if(y>m){
14                 n-=(n-y);
15             }
16         }
17         if(x==1){
18             if(y<=m){
19                 n++,m++;
20             }
21             if(y>m) n++;
22         }
23         if(m==0) m=1;
24         printf("%d %d\n",n,m);
25     }
26     return 0;
27 }
T2-权力

    T3

  我们有时需要简便的暴力,来解决暴力问题

  思路:我们预处理把横的和竖的分开存好,然后暴力跑O(n^3)

每次枚举两条横着的边,再挨个遍历剩下的竖边,如果竖边能切割两条

横边,就累加一个num,每跑完一条竖边,ans+=num*(num-1)/2即可;

  
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct node{
 4     int yu,yd,x;
 5 }shu[1010];
 6 struct nodee{
 7     int xl,xr,y;
 8 }heng[1010];
 9 int he,sh;
10 int n,a,b,c,d,num;
11 long long ans;
12 int main(){
13     scanf("%d",&n);
14     for(register int i=1;i<=n;i++){
15         scanf("%d%d%d%d",&a,&b,&c,&d);
16         if(a==c){
17             sh++;
18             shu[sh].x=a;
19             shu[sh].yu=max(b,d);
20             shu[sh].yd=min(b,d);
21             continue;
22         }
23         he++;
24         heng[he].y=b;
25         heng[he].xr=max(a,c);
26         heng[he].xl=min(a,c);
27     }
28     for(register int i=1;i<=he;i++){
29         for(register int j=i+1;j<=he;j++){
30             num=0;
31             int emm=max(heng[i].y,heng[j].y);
32             int err=min(heng[i].y,heng[j].y);
33             int ess=max(heng[i].xl,heng[j].xl);
34             int epp=min(heng[i].xr,heng[j].xr);
35             if(epp<=ess)continue;
36             for(register int k=1;k<=sh;k++){
37                 if(shu[k].yu>=emm&&shu[k].yd<=err&&shu[k].x>=ess&&shu[k].x<=epp) num++;
38             }
39             ans+=num*(num-1)/2;
40         }
41     }
42     printf("%lld",ans);
43     return 0;
44 }
T3-长方形

 

  end;

posted @ 2019-08-02 21:03  Zafkiel  阅读(107)  评论(0编辑  收藏  举报
Live2D //博客园自带,可加可不加