https://vjudge.net/problem/1550034/origin
- Wa: 对极限情况没考虑好,k==0对元素x的取值,不仅仅是-1,还有成立可能。极限的化,k==n,x取值要考虑。对wa的test4、3其实是可以推测的。改了算法发现wa同一个点。
-
#include<cstdio> #include<iostream> #include<cmath> #include<sstream> #include<cstring> #include<algorithm> #include<vector> #include<set> #include <queue> #include <map> #include <stack> const int INF = 0x3f3f3f3f; using namespace std; const int N=200000+10; const int M=30; const int BUF =1024 ; typedef long long ll; typedef __int64 I64; I64 a[N]; void init(){ } void F(){ freopen("","r",stdin); } int main() { F(); init(); int n,k; while(scanf("%d%d",&n,&k)!=EOF){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); int ans=-1; if(k==0){ if(a[0]-1<1){ printf("-1\n"); }else{ printf("%d\n",a[0]-1); } continue; } if(k==n) { printf("%d\n",a[n-1]); continue; } if(a[k-1]!=a[k]) ans=a[k-1]; printf("%d\n",ans); } return 0; }
-
wa代码:个人的
#include<cstdio> #include<iostream> #include<cmath> #include<sstream> #include<cstring> #include<algorithm> #include<vector> #include<set> #include <queue> #include <map> #include <stack> const int INF = 0x3f3f3f3f; using namespace std; const int N=100+10; const int M=256; const int BUF =1024 ; typedef long long ll; typedef __int64 I64; char s[N]; int mp[M]; char h[]={'a','o','u','i','e'}; void init(){ } void F(){ freopen("","r",stdin); } int main() { F(); init(); memset(mp,0,sizeof(mp)); mp['n']=2; for(int i=0;i<5;i++){ mp[h[i]]=1; } while(scanf("%s",s)!=EOF){ getchar(); int len=strlen(s); bool flag=1; if(!mp[s[len-1]]&&mp[s[len-1]]!=2) flag=0; if(flag) for(int i=0;i<len;i++){ if(!mp[s[i]]&&s[i]!='n'){ if(mp[s[i+1]]&&i+1<len) i++; else{ flag=0;break; } } } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }
我觉得没事就i++,越过下个合法的字符区域,但是一直wa在6。别人精简ac代码:https://blog.csdn.net/ZscDst/article/details/81044260逻辑也不会像我这样写的乱,判断句写的精简。
-
- http://codeforces.com/problemset/problem/670/B巧妙的递减,减少很多不必要的麻烦,我是wa后听了别人的讲解写的,自己原来是限定了k的区间来做,很麻烦,容易手推错,debug不容易。减法的妙用!无关我就扔掉,不去管多余的数字量。
-
-
#include<cstdio> #include<iostream> #include<cmath> #include<sstream> #include<cstring> #include<algorithm> #include<vector> #include<set> #include <queue> #include <map> #include <stack> const int INF = 0x3f3f3f3f; using namespace std; const int N=100000+10; const int M=30; const int BUF =1024 ; typedef long long ll; typedef __int64 I64; int a[N]; void init(){ } void F(){ freopen("","r",stdin); } int main() { F(); init(); int n,k,ans=0; while(scanf("%d%d",&n,&k)!=EOF){ int ans=1; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(k<=i){ ans=k; } else k-=i; } printf("%d\n",a[ans]); } return 0; }
3.
-
http://codeforces.com/problemset/problem/463/B很不理解的算法思路,感觉还是有点疙瘩,从不死的角度来看,我如果往上走,只有保证我的血量是正,那么我的每一次及时加血,其实就是为了登上新的台阶。按照别人的说法,重力势能往上,我一定需要那么多能量才能垫脚石上去。可能我需要列举下情况,会对这样的能量理解有所理解。总感觉不对,说明考虑、思考不深入,不具体,纸上模拟是王道吧。
-
#include<cstdio> #include<iostream> #include<cmath> #include<sstream> #include<cstring> #include<algorithm> #include<vector> #include<set> #include <queue> #include <map> #include <stack> const int INF = 0x3f3f3f3f; using namespace std; const int N=100000+10; const int M=30; const int BUF =1024 ; typedef long long ll; typedef __int64 I64; int a[N]; void init(){ } void F(){ freopen("","r",stdin); } int main() { F(); init(); int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); printf("%d\n",a[n-1]); } return 0; }