Educational Codeforces Round 29
来源:互联网 发布:北京软件学院 编辑:程序博客网 时间:2024/06/16 21:01
太弱鸡了,所以只有4题。(C题最难,没有之一)
A. 给你一个数字x,问能不能补充几个前导零使得他变成回文数(可以补充0个前导零)
模拟题
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<vector>#define LiangJiaJun main#define pa pair<int,int>#define INF 1999122700using namespace std;string s;int l,n;int LiangJiaJun(){ cin>>s; l=s.size(); for(int t=0;t<=l;t++){ n=s.size(); bool fe=0; for(int i=0,j=n-1;i<=j;i++,j--)if(s[i]!=s[j]){fe=1;break;} if(!fe)return puts("YES"),0; s='0'+s; } puts("NO"); return 0;}
B.给你2*n个人,n-1艘大船,2艘小船,一艘小船必须载1人,一艘大船必须载2人,大船的不稳的系数为载的两个人的体重之差。小船都是稳定的,求问不稳的系数的总和最小是多少。(n<= 50 , | 体重 |<=1000)
枚举哪两个人要坐小船,剩下的人从小到大排序,两两相邻的坐一起
C.A和B猜拳,1,2,3分别代表锤子剪刀布。给两个九宫格a和b。共K次游戏,每次赢的得一分,输的不得分,平局都不得分,如果当前A出了i , B出 j ,那么下一局中A 会出a[i][j] , B 会出b[i][j] 求问K局之后,A,B 各多少分。
k<=10^18
找规律的题目,挺恶心的
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<vector>#define LiangJiaJun main#define pa pair<int,int>#define INF 1999122700using namespace std;long long k,s1=0,s2=0,ans1=0,ans2=0;int a,b,na,nb,be=-1;vector<pa>c;int mp1[4][4],mp2[4][4],td[4][4];int LiangJiaJun(){ td[1][2]=td[1][1]=td[2][3]=td[2][2]=td[3][1]=td[3][3]=0; td[1][3]=td[2][1]=td[3][2]=1; cin>>k>>a>>b; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++)cin>>mp1[i][j]; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++)cin>>mp2[i][j]; c.push_back(make_pair(a,b)); for(int i=1;i<k;i++){ int x=c[c.size()-1].first,y=c[c.size()-1].second; na=mp1[x][y];nb=mp2[x][y]; for(int j=0;j<c.size();j++) if(na==c[j].first&&nb==c[j].second){ be=j;break; } if(be!=-1)break; c.push_back(make_pair(na,nb)); } if(be==-1){ for(int i=0;i<c.size();i++){ ans1+=td[c[i].first][c[i].second]; ans2+=td[c[i].second][c[i].first]; } cout<<ans1<<" "<<ans2<<endl; return 0; } int l=c.size()-be; for(int i=0;i<be;i++){ k--; ans1+=td[c[i].first][c[i].second]; ans2+=td[c[i].second][c[i].first]; } for(int i=be;i<c.size();i++){ s1+=td[c[i].first][c[i].second]; s2+=td[c[i].second][c[i].first]; } ans1+=s1*(k/l); ans2+=s2*(k/l); for(int i=be;i<be+(k%l);i++){ ans1+=td[c[i].first][c[i].second]; ans2+=td[c[i].second][c[i].first]; } cout<<ans1<<" "<<ans2<<endl; return 0;}
D.给一个序列,长度n,共有q次操作,每次操作三个数t,l,r。如果t==1,那么将下标∈[l,r]的所有数字向右移动一位,下标为r的那个数字移到l;如果t==2,将序列[l,r]翻转。m个询问,每次询问一个x,询问做完这些操作后下标为x 的位置上那个数是多少。
n,q <=2*10^5 ,m<=100
看见m的范围就知道直接暴力了。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<vector>#define LiangJiaJun main#define pa pair<int,int>#define INF 1999122700using namespace std;struct data{int p,l,r;}a[200004];int n,b[200004],x,q,m;int LiangJiaJun(){ scanf("%d%d%d",&n,&q,&m); for(int i=1;i<=n;i++)scanf("%d",&b[i]); for(int i=1;i<=q;i++)scanf("%d%d%d",&a[i].p,&a[i].l,&a[i].r); for(int t=1;t<=m;t++){ scanf("%d",&x); for(int i=q;i>=1;i--){ if(!(a[i].l<=x&&x<=a[i].r))continue; if(a[i].p==1){ if(x==a[i].l)x=a[i].r; else x--; } else x=a[i].r-x+a[i].l; } printf("%d ",b[x]); } puts(""); return 0;}
阅读全文
0 0
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29
- Educational Codeforces Round 29 题解
- Educational Codeforces Round 1
- Educational Codeforces Round 2
- Educational Codeforces Round 2
- Educational Codeforces Round 2
- Educational Codeforces Round 3
- Codeforces Educational Round 3
- Codeforces Educational Round 5
- Codeforces Educational round 5
- Educational Codeforces Round 5
- Educational Codeforces Round 6
- sklearn 决策树可视化
- 【模拟赛】qbxt金秋冲刺训练营杯NOIP模拟赛第二场D1
- js小工具
- 同一系统下,keil 4和keil 5以及keil c51共存的解决方案
- python ----split()
- Educational Codeforces Round 29
- Android 沿曲线绘制文字
- forward与redirect区别
- python_kmeans学习
- 字符串反转的三种方法
- 第三周项目4
- 《算法笔记》入门篇笔记
- LeetCode 4Sum
- Java 详解 JVM 工作原理和流程