头像

代码人生




离线:1天前


最近来访(38)
用户头像
不高兴的兽奶
用户头像
这道题有点难耶
用户头像
倒悬打Treap
用户头像
jianp
用户头像
甜心还不会算法
用户头像
xiayutao
用户头像
noobs
用户头像
Sunburst7
用户头像
安之若素_4
用户头像
何在南方..
用户头像
jkz_
用户头像
唯念月色凉
用户头像
大雪菜1号
用户头像
懸囂轐㷣爥鶩榌
用户头像
种花家的蒟蒻
用户头像
complexpug
用户头像
垫底抽風
用户头像
LAG_流雲
用户头像
我vnhukvm
用户头像
松_8

活动打卡代码 AcWing 4086. 分糖果

#include <cstdio>
#include <algorithm>
using namespace std;
int n,l,r,k;
int ans = 0;
int main(){
    scanf("%d %d %d",&n,&l,&r);
    int a = l / n * n + n;
    if(a >= l && a <= r){ // l ~ r 是否有n的倍数
        k = a - 1;// n的最小倍数 - 1 
    }
    else{
        k = r;
    }
    ans = max(ans,k - (k / n) * n);
    printf("%d",ans);
    return 0;
}



首先是最好想的暴力法:

#include <cstdio>
#include <algorithm>
using namespace std;
int n,l,r;
int ans = 0;
int main(){
    scanf("%d %d %d",&n,&l,&r);
    for(int k=l;k<=r;k++){
        int x = k;
        while(x >= n){
            x -= n;
        }
        ans = max(ans,x);
    }
    printf("%d",ans);
    return 0;
}

这种方法超时了3个点(洛谷80分)

接下来是进阶做法(优化了内层循环):

#include <cstdio>
#include <algorithm>
using namespace std;
int n,l,r;
int ans = 0;
int main(){
    scanf("%d %d %d",&n,&l,&r);
    for(int k=l;k<=r;k++){
        ans = max(ans,k - (k / n) * n);
    }
    printf("%d",ans);
    return 0;
}

这种方法超时了1个点(洛谷90分)

最后是ac做法

#include <cstdio>
#include <algorithm>
using namespace std;
int n,l,r,k;
int ans = 0;
int main(){
    scanf("%d %d %d",&n,&l,&r);
    int a = l / n * n + n;
    if(a >= l && a <= r){ // l ~ r 是否有n的倍数
        k = a - 1;// n的最小倍数 - 1 
    }
    else{
        k = r;
    }
    ans = max(ans,k - (k / n) * n);
    printf("%d",ans);
    return 0;
}


活动打卡代码 AcWing 4299. 删点

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int x,y,l,r;
int main()
{
    cin >> n;
    while (n -- ){
        cin >> x >> y;
        if(x < 0) l ++;
        else r ++ ;
    }
    if(l <= 1 || r <= 1) puts("Yes");
    else puts("No");
    return 0;
}



#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int x,y,l,r;
int main()
{
    cin >> n;
    while (n -- ){
        cin >> x >> y;
        if(x < 0) l ++;
        else r ++ ;
    }
    if(l <= 1 || r <= 1) puts("Yes");
    else puts("No");
    return 0;
}


活动打卡代码 AcWing 4617. 解方程

#include <iostream>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t -- ){
        int a;
        scanf("%d",&a);
        int cnt = 0;
        while(a) cnt += a & 1,a >>= 1;
        cout << (1 << cnt) << endl;
    }
    return 0;
}



#include <iostream>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t -- ){
        int a;
        scanf("%d",&a);
        int cnt = 0;
        while(a) cnt += a & 1,a >>= 1;
        cout << (1 << cnt) << endl;
    }
    return 0;
}


活动打卡代码 AcWing 4616. 击中战舰

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int N = 2e5 + 10;
char s[N];
int n,a,b,k; 
int main(){
    scanf("%d %d %d %d",&n,&a,&b,&k);
    scanf("%s",s + 1);
    vector<int> ans;
    int cnt = 0;
    for(int i=1;i<=n;i++){
        if(s[i] == '0'){
            cnt++;
            if(cnt == b){
                cnt = 0;
                ans.push_back(i);
            }
        }
        else cnt = 0;
    }
    cout << ans.size() - a + 1 << endl;
    for(int i=0;i<ans.size() - a + 1;i++){
        cout << ans[i] << " ";
    }
    return 0;
}



#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int N = 2e5 + 10;
char s[N];
int n,a,b,k; 
int main(){
    scanf("%d %d %d %d",&n,&a,&b,&k);
    scanf("%s",s + 1);
    vector<int> ans;
    int cnt = 0;
    for(int i=1;i<=n;i++){
        if(s[i] == '0'){
            cnt++;
            if(cnt == b){
                cnt = 0;
                ans.push_back(i);
            }
        }
        else cnt = 0;
    }
    cout << ans.size() - a + 1 << endl;
    for(int i=0;i<ans.size() - a + 1;i++){
        cout << ans[i] << " ";
    }
    return 0;
}


活动打卡代码 AcWing 4615. 相遇问题

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t -- ){
        int x,y,a,b;
        scanf("%d %d %d %d",&x,&y,&a,&b);
        double ans = 1.0 * abs(y - x) / (a + b);
        int t = ans;
        if(t == ans){
            printf("%d\n",t);
        }
        else puts("-1");
    }
    return 0;
}



#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t -- ){
        int x,y,a,b;
        scanf("%d %d %d %d",&x,&y,&a,&b);
        double ans = 1.0 * abs(y - x) / (a + b);
        int t = ans;
        if(t == ans){
            printf("%d\n",t);
        }
        else puts("-1");
    }
    return 0;
}