zoukankan      html  css  js  c++  java
  • 牛客小白月赛18【其中含有给4个点坐标,判断是不是正方形模板】【树状数组模板】

     

    线性筛的一道题。

    线筛是能记录最小质因子的。套模板。

     1 #include<bits/stdc++.h>
     2   
     3 using namespace std;
     4 #define int long long
     5 #define MAXN 30000012
     6 int prime[MAXN],v[MAXN];
     7 int m=0;//m表示现在筛出m个质数
     8 void primes(int n)
     9 {
    10     for(int i=2;i<=n;i++)
    11     {
    12         if(v[i]==0)//如果v[i]为0,说明 i 之前没有被筛到过,i 为质数
    13         {
    14             v[i] = i;
    15              prime[++m] = i;
    16         }
    17         for(int j = 1;j<=m;j++)//遍历小于 i 的所有质数
    18         {
    19             //如果质数大于 i 的最小质因数或者乘起来大于n就跳出循环
    20             if(prime[j] > v[i] || prime[j] > n/i) break;
    21             v[i*prime[j]] = prime[j];//标记 i*prime[j] 的最小质因数是prime[j]
    22         }
    23     }
    24 }
    25 signed main(){
    26    int n;cin>>n; 
    27     primes(n);
    28      
    29    int sum=0;
    30    for(int i=2;i<=n;i++){
    31     sum+=v[i];
    32    }  
    33    cout<<sum<<endl;
    34     return 0;
    35 }

     模拟一下:【其中含有给4个点坐标,判断是不是正方形模板】

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 struct str{
     5     int x,y;
     6 };
     7 bool cmp(str a,str b){
     8     if(a.x!=b.x){
     9         return a.x<b.x;
    10     }else{
    11         return a.y<b.y;
    12     }
    13 }
    14 int len(int a,int b,int c,int d)
    15 {
    16     return (a-c)*(a-c)+(b-d)*(b-d);
    17 }
    18 int  check(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4){
    19     int s1,s2,s3,s4,s5,s6;
    20     struct str p[10];
    21     p[0].x=x1,p[0].y=y1;
    22     p[1].x=x2,p[1].y=y2;
    23     p[2].x=x3,p[2].y=y3;
    24     p[3].x=x4,p[3].y=y4;
    25     sort(p,p+4,cmp);
    26     s1=len(p[0].x,p[0].y,p[3].x,p[3].y);
    27        s2=len(p[1].x,p[1].y,p[2].x,p[2].y);
    28        if(s1!=s2||s1==0)
    29         {
    30            return 0;
    31             
    32         }
    33         else if(s1==s2)
    34         {
    35             if(((p[0].x-p[3].x)*(p[1].x-p[2].x)+(p[1].y-p[2].y)*(p[0].y-p[3].y))==0)//对角线相等
    36                 return 1;
    37             else return 0;
    38         }
    39 }
    40 int  main(){
    41     int x1,x2,x3,x4,y1,y2,y3,y4;
    42     cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
    43     if(check(x1,y1,x2,y2,x3,y3,x4,y4)){
    44         cout<<"wen";
    45         return 0;
    46     }
    47     int flag=0;
    48     if(check(x1+1,y1,x2,y2,x3,y3,x4,y4)){
    49         flag=-1;
    50     }else if(check(x1-1,y1,x2,y2,x3,y3,x4,y4)){
    51             flag=-1;
    52     }else if(check(x1,y1+1,x2,y2,x3,y3,x4,y4)){
    53             flag=-1;
    54     }else if(check(x1,y1-1,x2,y2,x3,y3,x4,y4)){
    55             flag=-1;
    56     }else if(check(x1,y1,x2+1,y2,x3,y3,x4,y4)){
    57             flag=-1;
    58     }else if(check(x1,y1,x2-1,y2,x3,y3,x4,y4)) {
    59             flag=-1;
    60     }else if(check(x1,y1,x2,y2+1,x3,y3,x4,y4)){
    61             flag=-1;
    62     }else if(check(x1,y1,x2,y2-1,x3,y3,x4,y4)){
    63             flag=-1;
    64     }else if(check(x1,y1,x2,y2,x3+1,y3,x4,y4)){
    65             flag=-1;
    66     }else if(check(x1,y1,x2,y2,x3-1,y3,x4,y4)) {
    67             flag=-1;
    68     }else if(check(x1,y1,x2,y2,x3,y3+1,x4,y4)){
    69             flag=-1;
    70     }else if(check(x1,y1,x2,y2,x3,y3-1,x4,y4)){
    71             flag=-1;
    72     }else if(check(x1,y1,x2,y2,x3,y3,x4+1,y4)){
    73             flag=-1;
    74     }else if(check(x1,y1,x2,y2,x3,y3,x4-1,y4)) {
    75             flag=-1;
    76     }else if(check(x1,y1,x2,y2,x3,y3,x4,y4+1)){
    77             flag=-1;
    78     }else if(check(x1,y1,x2,y2,x3,y3,x4,y4-1)){
    79             flag=-1;
    80     }
    81     if(flag==-1){
    82         cout<<"hai xing"<<endl; 
    83     }else{
    84         cout<<"wo jue de bu xing"<<endl; 
    85     }
    86     
    87     return 0;
    88 }

     树状数组维护一下然后二分答案。【树状数组模板·】

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define N 300000
     5 #define int long long
     6 #define inf 0x3f3f3f3f
     7 struct str{
     8     int c[N];
     9     int lowbit(int x){
    10         return x&(-x);
    11     }
    12     void update(int x,int v){
    13         for(int i=x;i<=N;i+=lowbit(i))  
    14             c[i]+=v;
    15     }
    16     int getsum(int x){
    17         int res=0; 
    18         for(int i=x;i;i-=lowbit(i))
    19             res+=c[i]; 
    20         return res;
    21     }
    22     int query(int l,int r){
    23         return getsum(r)-getsum(l-1);
    24     }
    25 }st;
    26 signed main(){
    27     int _;cin>>_;
    28     while(_--){
    29         int op=0;
    30         int x,y,z;
    31         cin>>op;
    32         if(op==1){
    33             cin>>x>>y>>z;
    34             int temp=(int)ceil(sqrt(x*x+y*y+z*z));
    35             st.update(temp,1);
    36         }else{
    37             int k;
    38             cin>>k;
    39             int l=0;
    40             int r=N;
    41             int ans=inf;
    42             while(l<=r){
    43                 int mid=(l+r)/2;
    44                 if(st.getsum(mid)>=k){
    45                     ans=min(ans,mid);
    46                     r=mid-1;
    47                 }else{
    48                     l=mid+1;
    49                 }
    50             }
    51             if(ans==inf){
    52                 printf("-1
    ");
    53             }else{
    54                 printf("%lld
    ",ans);
    55             }
    56         }
    57         
    58     }
    59     return 0;
    60 }

    B题待补。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 相关阅读:
    自定义序列化类注意事项
    HashMap中的modCount
    transient
    30张图带你彻底理解红黑树(转)
    hashcode和hash算法
    线程池
    VS2015 NuGet错误:远程证书无效
    解决前台JS弹框Alert点击确定页面会刷新
    Regex中Replace方法的简单实用
    .ashx 一般处理程序
  • 原文地址:https://www.cnblogs.com/pengge666/p/11748007.html
Copyright © 2011-2022 走看看