首页 > 代码库 > Codeforces Round #264 (Div. 2)
Codeforces Round #264 (Div. 2)
A. Caisa and Sugar
题意:你有s美元,有n样东西,找钱的零钱会换为糖,1美分=1糖,只能买一样东西的一个,求最多获得多少个糖果
题解:模拟即可。因为c++语法问题fst了。。。
论掌握一门语言的重要性。。。
代码:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<vector> 8 #include<map> 9 #include<set>10 #include<queue>11 #include<string>12 #define inf 100000000013 #define maxn 500+10014 #define maxm 500+10015 #define eps 1e-1016 #define ll long long17 #define pa pair<int,int>18 using namespace std;19 inline int read()20 {21 int x=0,f=1;char ch=getchar();22 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}23 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}24 return x*f;25 }26 int main()27 {28 int n=read(),m=read();29 int x,y,ans=-1;30 for(int i=1;i<=n;i++)31 {32 x=read();y=read();33 if(100*x+y<=100*m)34 {35 if(y)ans=max(ans,100-y);else ans=max(ans,0);36 }37 }38 printf("%d\n",ans); 39 return 0;40 }
B. Caisa and Pylons
题意:给你一个数列,有n+1个数,a[0]=0,将这个序列差分,要保持前缀和时刻都非负,花费1可以使前缀和+1,求最小花费
题解:直接模拟即可,按差分来。。。脑洞好大。。。
稍想一下就知道直接输出max即可。。。
代码:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<vector> 8 #include<map> 9 #include<set>10 #include<queue>11 #include<string>12 #define inf 100000000013 #define maxn 100000+10014 #define maxm 500+10015 #define eps 1e-1016 #define ll long long17 #define pa pair<int,int>18 using namespace std;19 inline ll read()20 {21 int x=0,f=1;char ch=getchar();22 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}23 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}24 return x*f;25 }26 ll n,sum=0,ans=0,a[maxn];27 int main()28 {29 n=read();30 for(int i=1;i<=n;i++)a[i]=read();31 for(int i=0;i<n;i++)a[i]=a[i]-a[i+1];32 for(int i=0;i<n;i++)33 {34 sum+=a[i];35 if(sum<0){ans+=-sum;sum=0;}36 }37 cout<<ans<<endl;38 return 0;39 }
C. Gargari and Bishops
题意:n*n矩阵,n<=2000,你可以选两个点,使得与这两个点处于同一条对角线上的所有数的和最大,并且这两个点所处的对角线不会相交。
题解:直接暴力枚举即可。。。因为选出的两个点对角线不会相交,所以肯定是黑白染色只后黑白各一个。分别取最大即可。
考场上没看见最后一个条件,就弃疗了。。。
论看全题目的重要性。。。
代码:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<vector> 8 #include<map> 9 #include<set>10 #include<queue>11 #include<string>12 #define inf 100000000013 #define maxn 2000+1014 #define maxm 500+10015 #define eps 1e-1016 #define ll long long17 #define pa pair<int,int>18 #define for0(i,n) for(int i=0;i<=n;i++)19 #define for1(i,n) for(int i=1;i<=n;i++)20 using namespace std;21 inline ll read()22 {23 int x=0,f=1;char ch=getchar();24 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}25 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}26 return x*f;27 }28 ll a[maxn<<1],b[maxn<<1],c[maxn][maxn];29 int main()30 {31 freopen("input.txt","r",stdin);32 freopen("output.txt","w",stdout);33 int n=read();34 for1(i,n)35 for1(j,n)36 {37 ll x=read();38 a[i+j]+=x;b[i-j+n]+=x;39 c[i][j]=x;40 }41 ll mx1=-1,mx2=-1,x1,y1,x2,y2,t;42 for1(i,n)43 for1(j,n)44 if((i+j)&1)45 {46 t=a[i+j]+b[i-j+n]-c[i][j];47 if(t>mx1)48 {49 mx1=t;x1=i;y1=j;50 }51 } 52 else 53 {54 t=a[i+j]+b[i-j+n]-c[i][j];55 if(t>mx2)56 {57 mx2=t;x2=i;y2=j;58 }59 }60 cout<<mx1+mx2<<endl;61 cout<<x1<<‘ ‘<<y1<<‘ ‘<<x2<<‘ ‘<<y2<<endl;62 //printf("%d %d %d %d",x1,y1,x2,y2); 63 return 0;64 }
D. Gargari and Permutations
题意:求2-5个数列的最长公共子序列。
题解:不会。。。
Codeforces Round #264 (Div. 2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。