2021 Jiangsu Collegiate Programming Contest部分题解
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部分题解相关推荐
- 「团队训练赛」2021 Jiangsu Collegiate Programming Contest题解
A - Spring Couplets 题目描述: 写春联,满足所需的平仄关系 如果上联的一个字是平的,那下联对应的字必须是仄的 相同的,如果上联的一个字是仄的,那下联对应的字必须是平的 而且上联的最 ...
- 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 ...
- 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]& ...
- The 16th Heilongjiang Provincial Collegiate Programming Contest部分题解
The 16th Heilongjiang Provincial Collegiate Programming Contest 目录 D - Doin' Time 题目思路 题目代码 F - Func ...
- Nordic Collegiate Programming Contest 2017 题解
前几天打了一场外国人的比赛,感觉那边的题目质量还是很好的,区分度很鲜明,题目没有国内的难,坑点比较少,比较注重思维,基础算法. B题: Best Relay Team Picture by Ferna ...
- The 15th Chinese Northeast Collegiate Programming Contest部分题解
The 15th Chinese Northeast Collegiate Programming Contest 目录 E. Easy Math Problem 题目思路 题目代码 I. Takea ...
- The 18th Zhejiang Provincial Collegiate Programming Contest部分题解(A,C,G,J,L,M)
A. League of Legends Codeforces 题意 签到题 C. Cube Codeforces 题意 给出 888 个点,判断这 888 个点是否组成一个正方体. 题解 888 个 ...
- 2020 Jiangsu Collegiate Programming Contest
比赛链接 题号 题目 难易 考点 Gym 102875A Array 难 线段树,欧拉降幂 Gym 102875B Building Blocks Gym 102875C Cats 签到题 贪心,思维 ...
- 2022 Jiangsu Collegiate Programming Contest I. Cutting Suffix
题目链接 Examples input aa Output 1 input ab Output 0 题目大意: 后缀i是字符串从第i个字符开始到最后的字符字串 定义Wi,j是字符串 后缀i和后缀j的公 ...
最新文章
- 暴雪还不赶快?劳拉与光之守护者PC平台登陆
- 入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一
- 大剑无锋之JVM 堆内存溢出后,其他线程是否可继续工作?
- 数值范围_数值模拟在铸造业中的发展
- An unspecified error occurred!
- EntityFramework Core动态加载模型,我们要知道些什么呢?
- Hibernate应用程序级可重复读取
- 【PAT - 甲级1004】Counting Leaves (30分) (dfs,递归)
- CompletableFuture详解~supplyAsync
- Eclipse导入类库【Java】
- 原型模式(Prototype) 1
- 记录一个好用的压缩软件 HandBrake
- 通过网络爬虫采集大数据
- Java switch使用详解
- 技能高考计算机专业考什么,2016年技能高考计算机专业考试总结.pdf
- 互联网+双“高新”时代
- Cloning A Database Home And Changing The User/Group That Owns It
- Android学习笔记(4)——探究碎片
- 我为何一直强调外包公司别去
- python的拼音_GitHub - mozillazg/python-pinyin: 汉字转拼音(pypinyin)