2012 Tianjing Online (HDU4278 - 4287)
来源:互联网 发布:stc单片机官网选型 编辑:程序博客网 时间:2024/05/03 05:30
A Faulty Odometer
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<math.h>using namespace std;#define nMax 100010#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)long long s,n;int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifwhile(cin >> n,n) {s = 0;long long k = n;long long t = 1,m;while(n) {m = n%10;if(m>=0 && m<=2) s += m*t;else if(m>=4&&m<=7) s += (m-1)*t;else s += (m-2)*t;n /= 10;t *= 8;}cout << k << ": " << s << endl;}return 0;}B Number
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<math.h>using namespace std;#define nMax 100010#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)int phi(int x) {int ret = x;int s = 1;for(int i=2;i<=x;i++) if(x%i==0) {ret = ret/i*(i-1);int nu = 0;while(x%i ==0 ) {x /= i;nu ++;}s *= (nu+1);}return (ret+s)%2;}int ok[nMax];int sum[nMax];void baoli() {for(int i=1;i<=100;i++) {if((i+1+phi(i))%2==1) ok[i]=1;else ok[i]=0;}sum[0] =0;for(int i=1;i<=100;i++) {sum[i] = sum[i-1] + ok[i];pf("%d := %d %d\n",i,i/2-1,sum[i]);}}#define ll long longll f(ll x) {if(x<=5ll) return 0;//if(x<=15ll) return x/2ll-1ll;ll y = sqrt(x);//cout << "f" << endl;if(y*y == x) {if(y%2 == 0) {return x/2-2;}else return x/2-1;}else {if(y%2 == 0) {return x/2-2;}else return x/2-1;}}int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);#endif//baoli();ll a,b;int T;cin >> T;while(T--) {cin >> a >> b;//cout << f(b) << endl;cout << f(b) - f(a-1) << endl;}return 0;}C ...
D Judges' response
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<queue>using namespace std;#define A first#define B second#define pii pair<int,int>#define pb push_back#define sqr(x) ((x)*(x))const int maxn=20;const int maxm=1<<16;const int none=1<<30;int n,m,all;int c[maxn];pii a[maxn];int cost[maxm];int f[maxm];int ans1,ans2;int g[maxn][maxm];int dis(pii a,pii b){ return ceil(sqrt(sqr(a.A-b.A)+sqr(a.B-b.B)));}int dfs(int S){ //cout<<S<<' '<<cost[S]<<endl; if (cost[S]<=m) return 1; if (f[S]!=-1) return f[S]; int ans=none; for (register int s=S;s;s=(s-1)&S) if (cost[s]<=m) ans=min(ans,dfs(S^s)+1); return f[S]=ans;}int init(){ n--; memset(cost,0,sizeof(cost)); scanf("%d%d",&a[n].A,&a[n].B); for (int i=0;i<n;i++) scanf("%d%d",&a[i].A,&a[i].B); scanf("%d",&c[n]); for (int i=0;i<n;i++) scanf("%d",&c[i]); for (int i=0;i<n;i++) if (c[i]>m) return 0; all=1<<n ; all--; for (register int i=0;i<=all; i++){ for (register int j=0;j<n;j++) if (i>>j&1) cost[i]+=c[j]; } return 1;}int get(int S){ if (S==0) return 0; if (f[S]!=-1) return f[S]; int ans=none; for (register int s=S;s;s=(s-1)&S) if (cost[s]!=none) ans=min(ans,get(S^s)+cost[s]); return f[S]=ans;}queue<pii> q;int vis[maxn][maxm];int run(){ for (register int i=0;i<n;i++) for (register int j=0;j<=all;j++) g[i][j]=-1; for (register int i=0;i<n;i++){ g[i][1<<i]=dis(a[n],a[i]); q.push(pii(i,1<<i)); vis[i][1<<i]=1; } while (q.size()){ int pos=q.front().A,st=q.front().B; vis[pos][st]=0; q.pop(); for (int i=0;i<n;i++){ if ((st>>i&1)) continue; if (c[i]+cost[st]>m) continue; int ns=st|(1<<i); if (g[i][ns]==-1||g[i][ns]>g[pos][st]+dis(a[pos],a[i])){ g[i][ns]=g[pos][st]+dis(a[pos],a[i]); if (!vis[i][ns]){ vis[i][ns]=1; q.push(pii(i,ns)); } } } } for (register int i=0;i<=all;i++){ int t=none; for (int j=0;j<n;j++) if (g[j][i]!=-1) t=min(t,g[j][i]+dis(a[j],a[n])); cost[i]=t; } for (register int i=0;i<=all;i++) f[i]=-1; return get(all);}int main(){ //freopen("input.txt","r",stdin); while (scanf("%d%d",&n,&m)>0){ if (init()){ for (int i=0;i<=all;i++) f[i]=-1; ans1=dfs(all); ans2=run(); printf("%d %d\n",ans1,ans2); } else printf("-1 -1\n"); }}E A very hard mathematic problem
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;typedef long long ll;ll X,Y,Z,K,ans;ll cheak1(){ ll t=(ll)sqrt(K+0.5); if (t*t==K) return (t-1)/2; return 0ll;}ll mi(ll a,ll n){ ll y=1; while (n){ if (n&1) y*=a; a=a*a; n>>=1; } return y;}ll sum(){ return mi(X,Z)+mi(Y,Z)+X*Y*Z;}ll find(){ Y=X+1; if (sum()>K) return -1; for (Y=X+1;;Y++){ if (sum()==K) return Y; if (sum()>K) return 0; }}void run(){ for (Z=3;;Z++){ //if (mi(2ll,Z)>K) break; X=1ll;Y=2ll; if (sum()>K) break; for (X=1;;X++){ Y=find(); //if (X==2&&Z==4) cout<<Y<<endl; if (Y==-1) break; if (X<Y) ans++; //if (X<Y) cout<<X<<" "<<Y<<' '<<Z<<endl; } }}int main(){ //freopen("input.txt","r",stdin); while (true){ scanf("%I64d",&K); if (K==0) break; ans=0; ans+=cheak1(); run(); printf("%I64d\n",ans); }}F You Are the One
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<math.h>using namespace std;#define nMax 110#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)int a[nMax];int dp[nMax][nMax],sum[nMax];int const oo = 1000000000;int inline min(int x,int y) {return x < y ? x : y;}int dfs(int i,int j) {if(i>=j) return dp[i][j] = 0;if(dp[i][j] != oo) return dp[i][j];dp[i][j] = min(dp[i][j],dfs(i+1,j)+sum[j]-sum[i]);dp[i][j] = min(dp[i][j],dfs(i+1,j)+a[i]*(j-i));for(int k=i+1;k<=j;k++) {dp[i][j] = min(dp[i][j],dfs(i,k-1)+dfs(k+1,j)+a[k]*(j-i)+(sum[j]-sum[k])*(k-i));}return dp[i][j];}int n;int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifint T,cas=1;cin >> T;while(T--) {sf("%d",&n);for(int i=0;i<n;i++) sf("%d",&a[i]);sum[0]=a[0];for(int i=1;i<n;i++) sum[i]=sum[i-1]+a[i];for(int i=0;i<n;i++) for(int j=0;j<n;j++) dp[i][j] = oo;//cout << dp[0][n-1] << endl;dfs(0,n-1);pf("Case #%d: %d\n",cas++,dp[0][n-1]);}return 0;}
I Data Handler
Code :
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<math.h>using namespace std;#define nMax 1000010#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)#define bug(x) cerr << __LINE__ << ": " << #x << " = " << (x) << endl;struct T1{int to[2];int val;void init(int x) {to[0]=to[1]=-1;val = x;}};int l,r,nu;int lp,rp;T1 a[nMax];void mov(int p,int d) { // 0 for left 1 for rightif(p==0) {if(d==0) {int tmp = lp;if(a[tmp].to[0]==l) lp = a[tmp].to[1];else lp = a[tmp].to[0];l = tmp;}else {int tmp = l;if(a[tmp].to[0] == lp) l = a[tmp].to[1];else l = a[tmp].to[0];lp = tmp;}}else {if(d==0) {int tmp = r;if(a[tmp].to[0] == rp) r = a[tmp].to[1];else r = a[tmp].to[0];rp = tmp;}else {int tmp = rp;if(a[tmp].to[0] == r) rp = a[tmp].to[1];else rp = a[tmp].to[0];r = tmp;}}}void ins(int p,int val) {a[nu].init(val);if(p==0) {a[nu].to[0] = l;a[nu].to[1] = lp;if(a[l].to[0] == lp) a[l].to[0] = nu;else a[l].to[1] = nu;if(a[lp].to[0] == l) a[lp].to[0] = nu;else a[lp].to[1] = nu;l = nu;}else {a[nu].to[0] = r;a[nu].to[1] = rp;if(a[r].to[0] == rp) a[r].to[0] = nu;else a[r].to[1] = nu;if(a[rp].to[0] == r) a[rp].to[0] = nu;else a[rp].to[1] = nu;r = nu;}nu ++;}void del(int p) {if(p==0) {int R,L;if(a[l].to[0] == lp) {R = a[l].to[1];if(a[lp].to[0] == l) a[lp].to[0] = R;else a[lp].to[1] = R;if(a[R].to[0] == l) a[R].to[0] = lp;else a[R].to[1] = lp;l = R;}else {R = a[l].to[0];if(a[lp].to[0] == l) a[lp].to[0] = R;else a[lp].to[1] = R;if(a[R].to[0] == l) a[R].to[0] = lp;else a[R].to[1] = lp;l = R;}}else {int L,R;if(a[r].to[0] == rp) {L = a[r].to[1];if(a[rp].to[0] == r) a[rp].to[0] = L;else a[rp].to[1] = L;if(a[L].to[0] == r) a[L].to[0] = rp;else a[L].to[1] = rp;r = L;}else {L = a[r].to[0];if(a[rp].to[0] == r) a[rp].to[0] = L;else a[rp].to[1] = L;if(a[L].to[0] == r) a[L].to[0] = rp;else a[L].to[1] = rp;r = L;}}}void revers() {int L , R;/*if(a[l].to[0] == lp) L = a[l].to[1];else L = a[l].to[0];if(a[r].to[0] == rp) R = a[r].to[1];else R = a[r].to[0];*/L = l,R = r;if(a[lp].to[0] == L) a[lp].to[0] = R;else a[lp].to[1] = R;if(a[rp].to[0] == R) a[rp].to[0] = L;else a[rp].to[1] = L;if(a[L].to[0] == lp) a[L].to[0] = rp;else a[L].to[1] = rp;if(a[R].to[0] == rp) a[R].to[0] = lp;else a[R].to[1] = lp;swap(l,r);}void out() {while(lp!=0) {mov(0,0);}vector<int> ans;ans.clear();int step = 0;while(l!=0) {ans.push_back(a[l].val);mov(0,1);//pf("l=%d lp=%d\n",l,lp);//step ++;}for(int i=0,len=ans.size();i<len;i++){if(i) pf(" ");pf("%d",ans[i]);}pf("\n");}int n,m;char s[nMax];int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifint T;cin >> T;while(T--) {sf("%d",&n);nu = 1;int x;for(nu=1;nu<=n;nu++) {sf("%d",&x);a[nu].init(x);a[nu].to[0] = nu-1;a[nu].to[1] = nu+1;}a[n].to[1] = 0;sf("%d%d",&l,&r);lp = l-1; rp = r+1;if(rp == n+1) rp = 0;sf("%d",&m);while(m--) {sf("%s",s);if(s[0] == 'M') {int d = s[4]=='L'?0:1;sf("%s",s) ;mov(s[0]=='R'?1:0,d);}else if(s[0] == 'I') {sf("%s%d",s,&x);ins(s[0]=='L'?0:1,x);}else if(s[0] == 'D') {sf("%s",s);del(s[0]=='R'?1:0);}else {revers();}//pf("l=%d lp=%d r=%d rp=%d\n",l,lp,r,rp);}out();}return 0;}
J
Code :
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<math.h>using namespace std;#define nMax 50000#define sf scanf#define pf printf#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)int inline f(char ch) {if(ch >= 'a' && ch <= 'c') return 2;if(ch >= 'd' && ch <= 'f') return 3;if(ch >= 'g' && ch <= 'i') return 4;if(ch >= 'j' && ch <= 'l') return 5;if(ch >= 'm' && ch <= 'o') return 6;if(ch >= 'p' && ch <= 's') return 7;if(ch >= 't' && ch <= 'v') return 8;if(ch >= 'w' && ch <= 'z') return 9;}int node[nMax][15];int ok[nMax][15];int nu;void init() {memset(node,-1,sizeof(node));memset(ok,0,sizeof(ok));nu = 1;};void ins(char s[]) {int p = 0;for(int i=0;s[i];i++) {s[i] = f(s[i]);}int i,n=strlen(s);for(i=0;i<n;i++) {if(i+1==n) {ok[p][s[i]] ++;break;}if(node[p][s[i]]==-1) {node[p][s[i]] = nu++;}p = node[p][s[i]];}}int find(char s[]) {int n=strlen(s);rep(i,n) s[i] -= '0';int p = 0;for(int i=0;i<n;i++) {if(i+1 == n) return ok[p][s[i]];if(node[p][s[i]] == -1) return 0;p = node[p][s[i]];}}char ask[nMax][10];char s[nMax];int n,m,ans;int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifint T;cin >> T;while(T--) {sf("%d%d",&n,&m);rep(i,n) sf("%s",ask[i]);init();rep(i,m) {sf("%s",s);ins(s);}rep(i,n) {ans = find(ask[i]);pf("%d\n",ans);}}return 0;}
- 2012 Tianjing Online (HDU4278 - 4287)
- hdu4278
- HDU4278
- hdu4278
- 2012天津赛区网络赛第一题---Faulty Odometer(hdu4278)
- hdu4278 小想法
- HDU4278 Faulty Odometer
- hdu4278 Faulty Odometer (进制)
- hdu4278&poj2719--Faulty Odometer--进制转换
- hdu4278 Faulty Odometer 八进制转十进制
- hdu4278 Faulty Odometer(反常规则水题--八进制)
- HDU4278 Faulty Odometer(进制转化问题)
- 2012 ACM/ICPC Asia Regional Tianjin Online hdu 4287 map和char[]的合作应用
- 2012 ACM/ICPC Asia Regional Changchun Online
- 2012 ACM/ICPC Asia Regional Tianjin Online
- 2012 ACM/ICPC Asia Regional Jinhua Online
- 【2012-12】【概率&期望】ALfheim Online
- hdu4291-A Short problem(2012 chengdu online )
- 智能手机网页开发笔记
- linux 下 版本库的使用
- GCC编译选项
- <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”
- could not build module darwin
- 2012 Tianjing Online (HDU4278 - 4287)
- 【android-cocos2d-X2.2 环境配置】在Mac下搭建Cocos2d-X-android开发环境!
- Socket的错误码和描述(中英文翻译)
- ios获取本地音乐库音乐很详细
- 第十四周上机实践项目——字符串统计(2)
- 嵌入式 对于Linux下驱动module_param&&MODULE_PARM_DESC模块参数详解
- 使用Spring的LdapTemplate进行LDAP操作
- xml解析相关总结
- codexl analyze 模式下 build 错误