Codeforces Round #138 (Div. 2)

1768 ワード

A題:3つの面の面積を与えて12本の辺の長さとを求めます.
前に1種の方法が完璧ではありませんて、結局杯のお茶、ひざまずいてぼろぼろになります
int main(){
    int s1,s2,s3;
    int a,b,c;
    cin>>s1>>s2>>s3;
    for(int i=1;i<10004;i++){
        a=i;
        if(s1%a==0&&s2%a==0){
            b=s1/a;
            c=s2/a;
            if(b*c==s3)
            break;
        }
    }
   // printf("%d %d %d 
",a,b,c); printf("%d
",(a+b+c)*4); return 0; }

B問題は完璧に考えれば難しくない.考えが足りないだけで、
1つのシーケンスのうち、異なる数が少なくともk個の最小シーケンスを求める.[l.r].シーケンスの数がkより小さい場合は不可能です-1.1.そうでなければl.rを出力してtrickにひざまずいた.前の数字が後ろに現れたら、lを後ろに移動します.5555
int main(){
    int n,k;
    int A[maxn],B[maxn],hash[maxn];
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>A[i];
        B[i]=A[i];
    }
    sort(A,A+n);
    memset(hash,0,sizeof(hash));
    int sum=1;
    for(int i=1;i<n;i++){
        if(A[i]!=A[i-1]) sum++;
    }
 //  printf("%d
",sum); if(sum<k) printf("-1 -1
"); else { int tmp=1; int l=0,r; for(int i=0;i<n;i++){ if(B[i]!=B[i+1]){ l=i; hash[B[i]]++; break; } } if(k==1) l=0; for(int i=l+1;i<n;i++){ if(!hash[B[i]]) {tmp++;} hash[B[i]]++; if(tmp==k) {r=i;break;} } for(int i=l;i<r;i++){ if(hash[B[i]]==1) break; else { l++; hash[B[i]]--; } } printf("%d %d
",l+1,r+1); } return 0; }

C題..D題、E題もしないで寝た.
神愛ちゃんorzをクリックhttp://blog.csdn.net/acm_cxlove/article/details/7987812