真题演练1
Posted y-knightqin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了真题演练1相关的知识,希望对你有一定的参考价值。
ACM-ICPC 2017 Asia Shenyan
F. Heron and His Triangle
三边长给出,海伦公式算出面积,暴力枚举整数情况,得:
4,14,52,194,724等数据
之后就要灵性找规律了,得:a[i] = a[i-1]*4-a[i-2]
总结:1.对于类似题目,暴力枚举出一大串数据之后,应该第一时间反应过来找规律。 2.大数题应考虑java或python写(java暂时不会)
a={} a[1]=4 a[2]=14 for i in range(3,61,1): a[i]=a[i-1]*4-a[i-2] t=int(input()) for i in range(1,t+1,1): k=int(input()) for j in range(1,61,1): if a[j]>=k : print(a[j]) print(" ") break
G. Infinite Fraction Path
bfs+剪枝即可
总结:对于普通情况而言,一个不起眼的剪枝根本起不到作用,但是对于十分极端情况而言,比如数据全都是同一个数,这个剪枝算是能够“特判”掉这种数据,避免超时。
#include <bits/stdc++.h> #define debug freopen("r.txt","r",stdin) #define mp make_pair using namespace std; typedef long long ll; const int maxn = 250010; const int INF = 0x3f3f3f3f; const int mod = 998244353; inline ll read(){ll s=0,w=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)w=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) s=s*10+ch-‘0‘,ch=getchar(); return s*w;} ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;} struct node { int step; ll pos; }; int b[maxn],vis[maxn],c[maxn],i,j,t,maxx,cnt,x; ll n; char ans[maxn],s[maxn],a[maxn]; queue<node> q; map <int,int> mapp; void bfs() { node k; while (!q.empty()) { k=q.front(); q.pop(); if (k.step==n) continue; if (s[k.pos]==ans[k.step]) { if (vis[k.pos]==k.step) continue;//important vis[k.pos]=k.step; k.pos=(k.pos*k.pos+1)%n; k.step++; if (s[k.pos]>=ans[k.step]) { ans[k.step]=s[k.pos]; q.push(k); } } } } int main() { t=read(); while (t--) { n=read(); scanf("%s",s); maxx=-INF; memset(ans,-1,sizeof(ans)); while (!q.empty()) q.pop(); for (i=0;i<n;i++) { maxx=max(maxx,(int)s[i]); } for (i=0;i<n;i++) if (maxx==s[i]) { q.push({1,i}); } memset(vis,-1,sizeof(vis)); ans[1]=maxx; bfs(); printf("Case #%d: ",++cnt); ans[n+1]=‘