今天CF打的块残废了 就是一废物
A 在24点之前到 直接模拟即可
#include<stdio.h> #include<algorithm> #include<cstring> #include<string> #include<cmath> using namespace std; #define LL long long #define MAXN 1010 #define inf 1000000000.0 int main() { int n,k; scanf("%d%d",&n,&k); int ans=0; int i; for(i=1;i<=n;i++) { if(ans+5*i+k>240) { break; } else ans = ans +5*i; } printf("%d\n",i-1); return 0; }
B
显然东西是没用的 但是在南北极就出问题了
从北极点开始 最后要回到北极点
在北极点 只能往南边 南极同理 不然就有问题
然后 40000 不能随便%掉 因为可能走到一边点 然后还是这个方向 就翻车了
就分类讨论 唉 翻车翻车
#include<stdio.h> #include<algorithm> #include<cstring> #include<string> #include<cmath> using namespace std; #define LL long long #define MAXN 1010 #define inf 1000000000.0 int main() { int n; while(scanf("%d",&n)!=EOF) { int ans=0; int ok=0; for(int i=1;i<=n;i++) { int a; char s[65]; scanf("%d %s",&a,s); if(s[0]==‘N‘) { if(20000-ans+a>20000) ok=1; } if(s[0]==‘S‘) { if(ans+a>20000) ok=1; } a=a%40000; if(ans ==0&&s[0]!=‘S‘||ans==20000&&s[0]!=‘N‘) ok=1; if(s[0]==‘N‘) { if(ans ==0) { if(a<=20000) { ans = ans +a; } else { ans = 20000 - (a-20000); } } else if(ans<20000) { if(ans >=a) { ans =ans -a; } else { a-=ans; ans =0; if(a<=20000) ans =ans +a,a=0; else ans =20000,a=a-20000; if(a>0) ans =20000-a; } } else if(ans ==20000) { if(a<=20000) ans =ans-a; else { ans=0; a=a-20000; if(a>0) ans = a; } } } else if(s[0]==‘S‘) { if(ans ==0) { if(a<=20000) ans =a; else { ans =20000 -(a-20000); } } else if(ans <20000) { if(a<=20000-ans) ans = ans +a; else { a=a-(20000-ans); ans =20000; if(a<=20000) ans = 20000-a; else { ans =0; a=a-20000; if(a>0) ans = a; } } } else if(ans==20000) { if(a<=20000) ans =20000-a; else { ans =0; a=a-20000; if(a>0) ans =ans +a; } } } ans = ans %40000; if(ans >20000) ans =ans -20000; } if(ans==0&&ok!=1) printf("YES\n"); else printf("NO\n"); } return 0; }
C
>=1900 去DIV1
否则去 2
从头开始维护 一个左右边界
写一个不等式 就是维护的 然后判断结果
#include<stdio.h> #include<algorithm> #include<cstring> #include<string> #include<cmath> using namespace std; #define LL long long #define MAXN 210010 #define inf 1000000000 int a[MAXN],b[MAXN]; int main() { int l,r,n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]); } l=-inf; r=inf; int c=0; for(int i=1;i<=n;i++) { if(b[i]==1) { l=max(l,1900-c); } else { r=min(r,1900-c); } c=c+a[i]; } r--; if(r==inf-1) printf("Infinity\n"); else if(l>r) printf("Impossible\n"); else { for(int i=1;i<=n;i++) r=r+a[i]; printf("%d\n",r); } } return 0; }
原文:http://www.cnblogs.com/cherryMJY/p/6523150.html