2021 Jiangsu Collegiate Programming Contest

  • 目录
    • A. Spring Couplets
    • C. Magical Rearrangement
    • I. Fake Walsh Transform
    • J. Anti-merge
    • K. Longest Continuous 1
  • 结语

目录

A. Spring Couplets

思路:模拟

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long int ll;
typedef pair<ll,ll> P;
const ll maxn=1e5+10;
ll tt;
ll n;
string s[maxn],t[maxn];
ll pan(ll x,ll y){if(x<=2&&x>=1&&y>=3&&y<=4)return 1;return 0;
}
int main(){cin>>tt;while(tt--){ll flag=0;cin>>n;for(int i=1;i<=n;i++){cin>>s[i];}for(int i=1;i<=n;i++){cin>>t[i];}for(int i=1;i<=n;i++){ll ns=s[i].length();ll nt=t[i].length();ll idx=s[i][ns-1]-'0',idy=t[i][nt-1]-'0';if(idx>idy){swap(idx,idy);}if(!pan(idx,idy)){flag=1;break;}}ll ns=s[n].length();ll nt=t[n].length();ll x=s[n][ns-1]-'0',y=t[n][nt-1]-'0';if(x>=3&&x<=4&&y<=2&&y>=1){}else{flag=1;}if(flag){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}return 0;
}

C. Magical Rearrangement

思路:从小到大贪心,在贪心过程中,每次取一个数的时候判断即可,如果剩下的数字总数为sum,最大的数量为maxv

  • 如果这个最大的数量就是拿的这个数,那么2*maxv-sum≥12∗maxv−sum≥1时,那就不行
  • 如果这个最大数量不是拿的这个数,那么2*maxv-sum>12∗maxv−sum>1时,那就不行
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
const ll maxn=1e5+10;
ll t;
ll n;
ll a[maxn];
ll sum=0;bool ok=1;
void f()
{ok=1;ll Max=0;for(int i=0; i<=9; i++){Max=max(Max,a[i]);}ll k=sum-Max;if(k<Max-1){ok=0;return ;}}
vector<ll> ans;
int main()
{scanf("%lld",&t);while(t--){sum=0;for(int i=0; i<=9; i++){scanf("%lld",&a[i]);sum+=a[i];}if(sum==1&&a[0]==1){printf("0\n");continue;}f();if(ok==0){printf("-1\n");continue;}int pre=-1;ll fl=0;while(1){if(sum==0)break;//cout<<pre<<endl;ll flag=0;for(int i=0;i<=9; i++){if(pre==i)continue;if(ans.size()==0){if(a[i]>0&&i!=0){a[i]--,sum--;f();if(ok==0){a[i]++,sum++;continue;}// printf("%d",i);pre=i;flag=1;ans.push_back(i);break;}}else{if(a[i]>0){a[i]--;sum--;f();if(ok==0){a[i]++,sum++;continue;}pre=i;ans.push_back(i);flag=1;// printf("%d",i);break;}}}if(!flag){fl=1;break;}}if(fl){printf("-1\n");continue;}for(auto to:ans){printf("%lld",to);}printf("\n");ans.clear();}return 0;
}

I. Fake Walsh Transform

思路:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
const ll maxn=1e5+10;
ll t;
ll n,m;
ll pan(ll x){ll sum=0;while(x){if(x&1)sum++;x>>=1;}return sum;
}
int main(){//cout<<pow(2,60)<<endl;cin>>t;while(t--){cin>>n>>m;ll id=pan(m);ll ans=1;for(int i=1;i<=n;i++){ans=ans*2;}if(id)ans--;if(n!=1)cout<<ans<<endl;else{if(m==0){cout<<"1"<<endl;}else{cout<<"2"<<endl;}}}return 0;
}

J. Anti-merge

思路:如果矩阵中不会出现合并现象,即没有相邻数字一样时,直接就输出0 00即可。
如果矩阵中有合并现象,那么 标签种类一定最少一定是1 11,因为合并现象指挥发生在相邻且相同的数字之间,那么只需要给相同数字且相邻的贴上标签1 11,另一个不贴标签,就能区分开两种数字,使其不合并,所以标签种类最少是1 11,标签种类为1 11的情况下,就是二分图染色,把格点看成图中的点,相邻就是连边,那么直接跑二分图就行,对每一个部分染色后,看哪种颜色少,就把哪种存到答案中。

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[505][505];
int dx[4]= {0,1,0,-1};
int dy[4]= {1,0,-1,0};
int color[505][505];
vector<pair<int,int> > ans[4];
int check(int x,int y){int f1=0,f2=0;if(y>1&&a[x][y]==a[x][y-1])f1=1;if(x>1&&a[x][y]==a[x-1][y])f2=1;return (f1|f2);
}
void dfs(int x,int y,int c){color[x][y]=c;ans[c].push_back({x,y});for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx>n||nx<1||ny<1||ny>m||(a[x][y]!=a[nx][ny]))continue;if(color[nx][ny])continue;dfs(nx,ny,3-c);}return ;}
int main()
{cin>>n>>m;for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){scanf("%d",&a[i][j]);}}int types=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(check(i,j)){types=1;break;}}if(types){break;}}if(!types){printf("0 0");}else{for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans[1].clear();ans[2].clear();if(!color[i][j]){dfs(i,j,1);}if(ans[1].size()>ans[2].size()){for(int k=0;k<ans[2].size();k++){ans[0].push_back(ans[2][k]);}}else{for(int k=0;k<ans[1].size();k++){ans[0].push_back(ans[1][k]);}}}}cout<<types<<" "<<ans[0].size()<<endl;for(int i=0;i<ans[0].size();i++){cout<<ans[0][i].first<<" "<<ans[0][i].second<<" 1"<<endl;}}return 0;
}

K. Longest Continuous 1

思路:打表找规律
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
const ll maxn=1e5+10;
ll t;
ll s[100000];
int main()
{s[0]=0;s[1]=2;ll i=2;while(s[i-1]<=1e9&&i<=1e5){ll m=(pow(2,i)-pow(2,i-1))*i;s[i]=s[i-1]+m;++i;}/*cout<<i<<s[i-1]<<endl;for(int i=0;i<=10;++i)cout<<s[i]<<' ';cout<<i<<' '<<s[i-1]<<endl;*/cin>>t;while(t--){ll k;cin>>k;ll j=0;if(k==1){cout<<0<<endl;continue;}while(s[j++]<k);j--;cout<<j<<endl;}return 0;
}

结语


“遇事不决可问春风,春风不语即随本心”的意思是:对一件事犹豫不决,就问春风该如何做,春风给不出答案,就凭自己本心做出决断。“遇事不决可问春风,春风不语即随本心”一句出自网络作家“烽火戏诸侯”的《剑来》,其原文是:“遇事不决,可问春风。春风不语,遵循己心”。


2021 Jiangsu Collegiate Programming Contest部分题解相关推荐

  1. 「团队训练赛」2021 Jiangsu Collegiate Programming Contest题解

    A - Spring Couplets 题目描述: 写春联,满足所需的平仄关系 如果上联的一个字是平的,那下联对应的字必须是仄的 相同的,如果上联的一个字是仄的,那下联对应的字必须是平的 而且上联的最 ...

  2. 2021 Jiangsu Collegiate Programming Contest——K. Longest Continuous 1

    题目地址https://codeforces.com/gym/103495/problem/K 题目解析 题目 思路 代码 题目 Example: 4 1 2 3 4 output: 0 1 2 2 ...

  3. 2021 Jiangsu Collegiate Programming Contest F. Jumping Monkey II 树剖+线段树

    F. Jumping Monkey II 题意: 给你 n = 2 e 5 n=2e5 n=2e5的一棵树,每个点有点权 a [ i ] < = 1 e 9 a[i]<=1e9 a[i]& ...

  4. The 16th Heilongjiang Provincial Collegiate Programming Contest部分题解

    The 16th Heilongjiang Provincial Collegiate Programming Contest 目录 D - Doin' Time 题目思路 题目代码 F - Func ...

  5. Nordic Collegiate Programming Contest 2017 题解

    前几天打了一场外国人的比赛,感觉那边的题目质量还是很好的,区分度很鲜明,题目没有国内的难,坑点比较少,比较注重思维,基础算法. B题: Best Relay Team Picture by Ferna ...

  6. The 15th Chinese Northeast Collegiate Programming Contest部分题解

    The 15th Chinese Northeast Collegiate Programming Contest 目录 E. Easy Math Problem 题目思路 题目代码 I. Takea ...

  7. The 18th Zhejiang Provincial Collegiate Programming Contest部分题解(A,C,G,J,L,M)

    A. League of Legends Codeforces 题意 签到题 C. Cube Codeforces 题意 给出 888 个点,判断这 888 个点是否组成一个正方体. 题解 888 个 ...

  8. 2020 Jiangsu Collegiate Programming Contest

    比赛链接 题号 题目 难易 考点 Gym 102875A Array 难 线段树,欧拉降幂 Gym 102875B Building Blocks Gym 102875C Cats 签到题 贪心,思维 ...

  9. 2022 Jiangsu Collegiate Programming Contest I. Cutting Suffix

    题目链接 Examples input aa Output 1 input ab Output 0 题目大意: 后缀i是字符串从第i个字符开始到最后的字符字串 定义Wi,j是字符串 后缀i和后缀j的公 ...

最新文章

  1. 暴雪还不赶快?劳拉与光之守护者PC平台登陆
  2. 入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一
  3. 大剑无锋之JVM 堆内存溢出后,其他线程是否可继续工作?
  4. 数值范围_数值模拟在铸造业中的发展
  5. An unspecified error occurred!
  6. EntityFramework Core动态加载模型,我们要知道些什么呢?
  7. Hibernate应用程序级可重复读取
  8. 【PAT - 甲级1004】Counting Leaves (30分) (dfs,递归)
  9. CompletableFuture详解~supplyAsync
  10. Eclipse导入类库【Java】
  11. 原型模式(Prototype) 1
  12. 记录一个好用的压缩软件 HandBrake
  13. 通过网络爬虫采集大数据
  14. Java switch使用详解
  15. 技能高考计算机专业考什么,2016年技能高考计算机专业考试总结.pdf
  16. 互联网+双“高新”时代
  17. Cloning A Database Home And Changing The User/Group That Owns It
  18. Android学习笔记(4)——探究碎片
  19. 我为何一直强调外包公司别去
  20. python的拼音_GitHub - mozillazg/python-pinyin: 汉字转拼音(pypinyin)

热门文章

  1. 什么是pisa测试_什么是pisa考试?
  2. 字节飞书后端面经(已offer)
  3. Altium Designer多图纸原理图关联设计方法
  4. Android读书笔记---View基础
  5. 连十分钟都坚持不了,学长你不行啊!
  6. mysql查询and和or同时使用
  7. 直播(腾讯会议+小鹅通+obs)
  8. UOS桌面操作系统定制镜像(下)
  9. android设置listview的item颜色相间排列
  10. 西门子S7-1500PLC大型程序,各种FB块PTO控制20多个轴