zoukankan      html  css  js  c++  java
  • [51nod] 1613 翻硬币

    1613 翻硬币

    基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
     
    有 n 个硬币,一开始全部正面朝上,每次可以翻转 k 个硬币( k 小于 n ),那么至少要 p 次翻转,才能让所有硬币反面朝上,求 p 的值。如果不能成功翻转则输出-1
     
    Input
    输入2个数:n,k (1 <= n <= 10^9, 1 <=  k <= 10^9)。
    Output
    输出翻转次数的最小值。
    如果不能成功翻转则输出-1
    Input示例
    6 5
    Output示例
    6
    Analysis分析
    详情请见曾加老师的答案= =
    果然数论玩家都是这个显然那个显然= =然而吾此等凡夫俗子就得抓耳挠腮一晚上了
    我最后也没推到完,只能get个大概
    那么关键式子两条
     And 

    这两条式子很迷,但就是关键

    qwq

    既然没推完,就不发出来了

    Code代码

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 
     5 long long n,k;
     6 
     7 long long gcd(long long A,long long B){
     8     if(A < B) swap(A,B);
     9     return (!B)?A:gcd(B,A%B);
    10 }
    11 
    12 int main(){
    13     scanf("%lld%lld",&n,&k);
    14     
    15     long long ans = 0;
    16     
    17     if(n%2){
    18         if(k%2 == 0){ cout << -1; return 0; }
    19         else{ ans = n/k; if(n%k) ans++; if(ans%2 == 0) ans++; cout << ans; return 0; }
    20     }else{
    21         if(k*2 > n && k < n-1 && k%2 == 0){ cout << 3; return 0; }
    22         if(k*2 > n && k <= n-1 && k%2){ ans = n/(n-k); if(n%(n-k)) ans++; if(ans%2) ans++; cout << ans; return 0; }
    23         if(2*k <= n && k%2 == 0){ ans = n/k; if(n%k) ans++; cout << ans; return 0; }
    24         if(2*k <= n && k%2){ ans = n/k; if(n%k) ans++; if(ans%2) ans++; cout << ans; return 0; }
    25     }
    26     
    27     return 0;
    28 }
    qwq套结论打的
  • 相关阅读:
    maven工程的目录结构
    集合的区别
    名词解析
    1.(字符串)-判断字符串是否是子集字符串
    1.(字符串)-判断两字符串是否相等
    python max函数技巧
    1.(字符串)-子字符串位置查找
    numpy线性代数np.linalg
    Python图像库PIL 使用
    pyhthon-chr
  • 原文地址:https://www.cnblogs.com/Chorolop/p/7701737.html
Copyright © 2011-2022 走看看