标签:style blog http color os io ar for art
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 1000000000 13 #define maxn 500+100 14 #define maxm 500+100 15 #define eps 1e-10 16 #define ll long long 17 #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 1000000000 13 #define maxn 100000+100 14 #define maxm 500+100 15 #define eps 1e-10 16 #define ll long long 17 #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 1000000000 13 #define maxn 2000+10 14 #define maxm 500+100 15 #define eps 1e-10 16 #define ll long long 17 #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)
标签:style blog http color os io ar for art
原文地址:http://www.cnblogs.com/zyfzyf/p/3946740.html