zoukankan      html  css  js  c++  java
  • Codeforces Round #270

    A

    题意:给出一个数n,求满足a+b=n,且a+b均为合数的a,b

    方法一:可以直接枚举i,n-i,判断a,n-i是否为合数

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map>  
     8 #include<algorithm>  
     9 #define mod=1e9+7;
    10 using namespace std;
    11 
    12 typedef long long LL;
    13 bool  isp[1001000];
    14 
    15 void isprime(){
    16     isp[1]=isp[0]=true;
    17     for(int i=2;i<=1000010;i++){
    18         if(isp[i]==false)
    19         for(int j=i*2;j<=1000010;j+=i)
    20         isp[j]=true;
    21     }
    22 }
    23 
    24 int main()
    25 {
    26     int n;
    27     cin>>n;
    28     isprime();    
    29     for(int i=2;i<=n;i++){
    30         if(isp[i]&&isp[n-i]){
    31             printf("%d %d
    ",i,n-i);
    32             break;
    33         }
    34     }
    35     return 0;
    36 }
    View Code

    方法二:注意到n>=12,而4是最小的合数,

    所以:当n为奇数的时候,那么n-9至少是为4的合数,输出9,n-9

    当n为偶数的时候,那么n-8至少是为4的合数,输出8,n-8

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map>  
     8 #include<algorithm>  
     9 #define mod=1e9+7;
    10 using namespace std;
    11 
    12 typedef long long LL;
    13 
    14 int main(){
    15     int n;
    16     cin>>n;
    17     if(n%2) printf("%d %d
    ",9,n-9);
    18     else printf("%d %d
    ",8,n-8);
    19     return 0;
    20 }
    View Code

    B

    题意:给出一个电梯,给出n个人,n个人要上到的楼层a[i],以及电梯每次最多能装载的人数k,问把每个人都送到目标楼层,需要花费的最少时间

    看的出题人的题解:先是第一组k个人和这k个人里面要去往的楼层最高的人乘同一次电梯,再是第二组k个人和这k个人里面要去往的楼层最高的人乘同一次电梯,

    所以总时间为ans=2*((a[n]-1)+(a[n-k]-1)+a[n-2k]-1)----

    所以先排序,再倒着取依次取第k个数,这样能够尽量减少下一次运送人的时间, 出题人的证明没有看明白= =

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map>  
     8 #include<algorithm>  
     9 #define mod=1e9+7;
    10 using namespace std;
    11 
    12 typedef long long LL;
    13 int a[100050];
    14 
    15 int main(){
    16     int n,k,i,j,ans=0;
    17     cin>>n>>k;
    18     for(i=1;i<=n;i++) cin>>a[i];
    19     sort(a+1,a+n+1);
    20     for(i=n;i>=1;i=i-k){
    21         ans+=(a[i]-1)*2;
    22     }
    23     printf("%d
    ",ans);
    24     return 0;
    25 }
    View Code

    C

    题意:给出n个人的姓,和名,任意选择其中一个作为排序的关键字,问能否满足给出的序列。

    按照给出的序列来遍历,先将a[i],b[i]排序成小的在前,大的在后,如果a[i]大于当前的cur,那么将a[i]赋值给cur,否则b[i]赋给cur,都不满足的话则是“NO” 就是尽量选择a[i],b[i]中更小的作为关键字

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map>  
     8 #include<algorithm>  
     9 #define mod=1e9+7;
    10 using namespace std;
    11 
    12 typedef long long LL;
    13 string  a[100050],b[100050];
    14 int p[100050];
    15 string cur="";
    16 
    17 int main()
    18 {
    19     int  n,i,j;
    20     cin>>n;
    21     for(i=0;i<n;i++) cin>>a[i]>>b[i];
    22     for(i=0;i<n;i++) {
    23         cin>>p[i];
    24         p[i]--;
    25     }
    26     
    27     for(i=0;i<n;i++){
    28         int x=p[i];
    29         if(a[x]>b[x]) swap(a[x],b[x]);
    30         if(cur<a[x]) cur=a[x];
    31         else if(cur<b[x]) cur=b[x];
    32         else{
    33             printf("NO
    ");
    34             return 0;
    35         }
    36     }
    37     printf("YES
    ");
    38     return 0;    
    39 }
    View Code


    D

    题意:给出一个矩阵,问这个矩阵是否能由一颗带权值的树构成

    先用prim建树,再依次枚举每一个节点到其他节点的距离,看是否和给出的矩阵一样

    还不懂写= =

  • 相关阅读:
    mssql索引视图无法对视图创建 索引,因为该视图未绑定到架构
    说说回车键触发表单提交的问题
    在C#中使用SqlDbType.Xml类型参数
    使用nginx实施负载均衡
    SQL Server 索引中include的魅力(具有包含性列的索引)
    群发“站内信”的实现
    ORM映射框架总结终极JSON
    51 地图基本接口(二)
    通用短信平台接口
    ORM映射框架总结Flash 处理
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4338808.html
Copyright © 2011-2022 走看看