Codeforces Round #640 (Div. 4)(ABCDEG题解)

news/2024/7/1 2:35:41

文章目录

    • A. Sum of Round Numbers
    • B - Same Parity Summands
    • C - K-th Not Divisible by n
    • D - Alice, Bob and Candies
    • E - Special Elements
    • F. Binary String Reconstruction
    • G - Special Permutation

A. Sum of Round Numbers

题解:把他一个整数拆分,模拟一波即可

    #pragma GCC optimize(3,"Ofast","inline")#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <math.h>#include <string>#include <list>#include <set>#include <map>#include <queue>#include <stack>#include <algorithm>#include <stdlib.h>#include <vector>#define maxn  200010const int MaxN = 0x3f3f3f3f;const int MinN = 0xc0c0c00c;typedef long long ll;const int mod = 1000007;using namespace std;int a[10];int main(){int t;cin>>t;while(t--){int n;cin>>n;int cnt=0;int ans=1;while(n){if(n%10!=0){a[cnt++]=(n%10)*ans;//cout<<"debug:  "<<a[cnt-1]<<endl;}ans*=10;n/=10;}cout<<cnt<<endl;for(int i=0;i<cnt;i++){cout<<a[i]<<" ";}cout<<endl;}return 0;}

B - Same Parity Summands

题解:我们可以先假设全都用奇数表示出来,只需要将前k-1项为1(最小的奇数),在判断最后一项是否为奇数,再假设可以用偶数表示,如果前k-1项都可以用偶数表示2(最小得偶数即可),在判断最后一项是否为奇数

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  200010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[10];
int main()
{int t;cin>>t;while(t--){int n,k;cin>>n>>k;if((n-k+1)%2==1&&(n-k+1)>0){printf("YES\n");for(int i=0;i<k-1;i++){printf("1 ");}printf("%d\n",n-k+1);continue;}else if((n-2*(k-1))%2==0&&(n-2*(k-1))>0){printf("YES\n");for(int i=0;i<k-1;i++){printf("2 ");}printf("%d\n",n-2*(k-1));continue;}printf("NO\n");}return 0;
}

C - K-th Not Divisible by n

题解:把n和n的倍数抠出来再找k即可

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  200010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[10];
int main()
{int t;cin>>t;while(t--){ll n,k;cin>>n>>k;ll ans=k/(n-1);ll temp=ans*n+k%(n-1);if(k%(n-1)==0) temp--;cout<<temp<<endl;}return 0;
}

D - Alice, Bob and Candies

题解:模拟题
双指针往中间夹,注意处理一下细节即可

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  8010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[maxn];int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++) scanf("%d",&a[i]);int l=1,r=n+1;int ans1=0,ans2=0,cnt=1,x=a[1],y=0;bool flag=false;ans1=a[1];while(l+1!=r){if(flag){cnt++,x=0;while(x<=y){if(l+1==r){break;}x+=a[++l];}ans1+=x;flag=false;}else{cnt++,y=0;while(y<=x){if(l+1==r){break;}y+=a[--r];}ans2+=y;flag=true;}}cout<<cnt<<" "<<ans1<<" "<<ans2<<endl;}
}

E - Special Elements

题解:我们可以对于每个数双指针操作
复杂度n2,不过没超时

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  8010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[maxn];int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;i++){scanf("%d",&a[i]);}int cnt=0;for(int i=0;i<n;i++){int l=0,r=0;ll ans=a[0];while(r<n){if(a[i]==ans&&l-r!=0){cnt++;break;}else if(a[i]<ans){ans-=a[l];l++;}else{r++;ans+=a[r];}//cout<<l<<" "<<r<<endl;}}printf("%d\n",cnt);}return 0;
}

F. Binary String Reconstruction

时间有限,大一刚入坑菜鸡,没写完

G - Special Permutation

题解:感觉应该会其他做法,这题让我硬生生写出了模拟的味道,感觉是找规律+模拟

首先你可以发现长度为2或者是3的数组是不可以的(直接pass掉)

  1. 最小长度为4即可,当然4的倍数长度的数组也是可以的
  2. 然后再看n%4=1的时候,那么n-5一定就是4的倍数,这样前n-5项按照4的倍数进行处理,最后五项自己找一下排序规则
  3. 然后再看n%4=2的时候,那么n-6一定就是4的倍数,这样前n-6项按照4的倍数进行处理,最后六项自己找一下排序规则
  4. 然后再看n%4=3的时候,那么n-7一定就是4的倍数,这样前n-7项按照4的倍数进行处理,最后七项自己找一下排序规则

怎么讲其按照自己预定的顺序输出呢?可以设置一个顺序数组即可

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  200010
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[maxn];
int x[10]={2,4,1,3};
int y[10]={1,3,5,2,4};
int z[10]={1,3,5,2,4,6};
int h[10]={1,4,7,3,5,2,6};
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++) a[i]=i;if(n==2||n==3){printf("-1\n");continue;}if(n%4==0){  //0for(int i=0;i<n;i++){int f=i%4;printf("%d ",a[x[f]+i-f]);}printf("\n");}else if(n%4==1){   //1for(int i=0;i<n-5;i++){int f=i%4;printf("%d ",a[x[f]+i-f]);}for(int i=0;i<5;i++){printf("%d ",a[y[i]+n-5]);}printf("\n");}else if(n%4==2){for(int i=0;i<n-6;i++){int f=i%4;printf("%d ",a[x[f]+i-f]);}for(int i=0;i<6;i++){printf("%d ",a[z[i]+n-6]);}printf("\n");}else if(n%4==3){for(int i=0;i<n-7;i++){int f=i%4;printf("%d ",a[x[f]+i-f]);}for(int i=0;i<7;i++){printf("%d ",a[h[i]+n-7]);}printf("\n");}}return 0;
}

http://lihuaxi.xjx100.cn/news/285935.html

相关文章

第1关:实现一个顺序存储的线性表

#if !defined(Seqlist__CIELSI_989SE_AJIEZN_728JULC__INCLUDED_) #define Seqlist__CIELSI_989SE_AJIEZN_728JULC__INCLUDED_ typedef int T; // 数据元素的数据类型 struct SeqList{T* data; // 数据元素的开始地址int len; // 当前长度int max; // 线性表的最大长度 };SeqL…

一文带你看懂Springboot核心功能及优缺点

点击上方[视学算法]→右上角[...]→[设为星标⭐]SpringBoot核心功能1、独立运行Spring项目Spring boot 可以以jar包形式独立运行&#xff0c;运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。2、内嵌servlet容器Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这…

最小费用最大流 ---- 2017icpc青岛现场赛 K Our Journey of Xian Ends (拆点控制原图点度 + 中间必经过的点设置成源点 + 起点设成汇点)

题目链接 题目大意&#xff1a; 题目贼恶心难读 就是你出发地是"Xian"西安&#xff0c;现在你要出发到上海然后再去青岛&#xff0c;然后回到上海 飞机场限制&#xff1a;就是每个机场只能降落和起飞一次 上海的限制&#xff1a;上海有两个机场&#xff0c;叫虹桥…

koa-grace:一个基于koa的node多应用MVC框架

春节期间没回家留在北京写了一个基于koa的node MVC框架&#xff1a;koa-grace &#xff0c;大家有兴趣可以star & fork下&#xff0c;谢谢支持啦&#xff01;&#xff01; 项目地址&#xff1a; https://github.com/xiongwilee/koa-grace 详细文档&#xff1a; 1. 简介 koa…

07-图6 旅游规划 (25分)(以此感谢zyx佬)

这个题的话算是模板题改编了一点吧&#xff0c;不过个人感觉这个改编很有助于你理解迪杰斯特拉这个算法的真谛。 题解&#xff1a;新开一个cost数组来记录花费&#xff0c;仍然是用了优先队列优化的一个思想&#xff0c;与模板题不同的是只需要加一句话&#xff08;感谢zyx佬发…

百度Apollo 3.5是如何设计Cyber RT计算框架的?

自百度Apollo自动驾驶平台开源以来&#xff0c;已快速迭代至 3.5 版本&#xff0c;代码行数超过 39 万行&#xff0c;合作伙伴超过 130 家&#xff0c;吸引了来自 97 个国家的超 15000 名开发者。无疑&#xff0c;Apollo 是目前世界范围内最活跃的自动驾驶开放平台之一。最新发…

有没有必要把机器学习算法自己实现一遍?

编辑&#xff1a;机器学习算法与自然语言处理-忆臻&#xff0c;Charlotte数据挖掘-小杜https://www.zhihu.com/question/36768514作者&#xff1a;微调https://www.zhihu.com/question/36768514/answer/376510114不少自学的朋友很容易陷入到焦虑当中&#xff0c;尤其是在学习理…

Chapter 3、Java语法基础(二)----Java基本数据类型、变量与常量 (20th,Feb)

基本数据类型 1、整数类型 整数类型用来储存整数数值&#xff0c;即没有小数部分的数值&#xff0c;可以使正数、负数&#xff0c;也可以是零。根据所占内存的大小不同&#xff0c;分为byte、short、int、long 4种类型。 Byte型 整型中所分配内存空间最少的&#xff0c;只分配1…