ZOJ Monthly, October 2010 ABEFI

来源:互联网 发布:广州云计算培训 编辑:程序博客网 时间:2024/04/28 06:36

ZOJ 3406Another Very Easy Task

#include <cstdio>#include <cstring>const int N = 100005;char s[N];int main() {bool f = 0;int size = 0;char ch;while(scanf("%c", &ch)!=EOF) {if( !(ch >= 'a' && ch <='z') && !(ch >='A' && ch <= 'Z')) {if(size <= 2) {s[size] = '\0';printf("%s", s);} else {printf("%c%d%c", s[0], size-2, s[size-1]);}size = 0;printf("%c", ch);} else {s[size++] = ch;}}return 0;}

ZOJ 3407Doraemon's Cake Machine
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <iostream>using namespace std;typedef long long ll;int Rand(int l,int r){int ans = rand()%r+1;while(ans<l) ans = rand()%r+1;return ans;}int main() {//freopen("b.txt","w+",stdout);int T;scanf("%d", &T);ll n, m;while(T -- > 0) {cin >> n >> m;//n = Rand(1,6000000), m = Rand(0,10000);if(m == 0) {if(n == 1) puts("0");else puts("-1");continue;}if(m >= n) {puts("-1");}else {ll d = 2 * (n-m) - 1;ll ans = -1;ans = 2 * m - n;// shuif(ans < 0) ans = -1;if(n==m+1)ans = 0; // hengfor(ll i = 1; i * i <= d; i += 2) {if( d % i == 0 ) {ll a = (i + 1) / 2;ll b = (d / i - 1) / 2;ll c = m - a - b;if(c < 0) continue;if(ans == -1 || ans>c ){//printf("%I64d %I64d %I64d %I64d\n", d, a, b, c);ans = c;}}}cout<<ans<<endl;}}return 0;}


ZOJ 3410Layton's Escape

#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <map>#include <stack>#include <iostream>#include <algorithm>/*#include <bits/stdc++.h>#define _ ios_base::sync_with_stdio(0);cin.tie(0);using namespace std;int main() {return 0;}*/typedef long long ll;const ll Inf = (ll)(1e15);const int N = 25000 + 10;const int M = 5000 + 10;struct node {int cos, lim;};node a[N];ll d[2][M];std::priority_queue<int> Q;bool cmp(const node& i, const node& j) {return i.lim < j.lim;}int main() {int n, K, cnt;while (~scanf("%d%d", &n, &K)) {for (int i = 0; i < n; ++i)scanf("%d%d", &a[i].cos, &a[i].lim);std::sort(a, a + n, cmp);while (!Q.empty())Q.pop();cnt = 0;ll sum = 0;for (int i = 0; i < n; ++i) {sum += a[i].cos;Q.push(a[i].cos);while (sum > a[i].lim && !Q.empty()) {sum -= Q.top();++cnt;Q.pop();}if (sum > a[i].lim || cnt >= K) {cnt = -1;break;}}printf("%d\n", cnt);}return 0;}
ZOJ 3411Special Special Judge
import java.io.*;import java.math.BigDecimal;import java.math.BigInteger;import java.math.RoundingMode;import java.util.Scanner;public class Main {BigInteger gcd(BigInteger a, BigInteger b) {BigInteger tmp;while(a.equals(BigInteger.ZERO)==false){b = b.mod(a);tmp = b;b = a;a = tmp;}return b;}public void work() {int n, m, a, b, x;BigInteger[][] d = new BigInteger[55][55];BigInteger up, down, v;while (cin.hasNext()) {n = cin.nextInt();m = cin.nextInt();a = cin.nextInt();b = cin.nextInt();v = BigInteger.valueOf(b - a + 1);for (int i = 0; i <= n; ++i)for (int j = 0; j <= m; ++j)d[i][j] = BigInteger.ZERO;d[0][0] = BigInteger.ONE;for (int i = 0; i < n; ++i) {x = cin.nextInt();for (int j = 0; j <= m; ++j)if (d[i][j].compareTo(BigInteger.ZERO) > 0)for (int z = a; z <= b; ++z)if (Math.abs(x - z) + j <= m) {d[i + 1][Math.abs(x - z) + j] = d[i + 1][Math.abs(x - z) + j].add(d[i][j]);}}up = BigInteger.ZERO;for (int i = 0; i <= m; ++i)up = up.add(d[n][i]);down = BigInteger.ONE;for (int i = 1; i <= n; ++i)down = down.multiply(v);v = gcd(up, down);up = up.divide(v);down = down.divide(v);out.println(up + "/" + down);}out.close();}Main() {cin = new Scanner(System.in);out = new PrintWriter(System.out);}public static void main(String[] args) {Main e = new Main();e.work();}public Scanner cin;public PrintWriter out;}

ZOJ 3414Trail Walk
#include <cstdio>#include <cstring>#include <math.h>#include <iostream>using namespace std;#define eps (1e-8)const int N = 100005;bool Is0(double x){return (x>0?x:-x)<eps;}struct node{double x,y;void put(){printf("(%.3f, %.3f)\n",x,y);}}a[N], last;double dis(node aa,node bb){return sqrt((aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y));}int n,m;int main() {int i,j,Cas = 1;while(~scanf("%d %d",&n,&m)) {m++;printf("Route %d\n",Cas++);a[0].x=a[0].y=0;double len = 0;for(i=1;i<=n;i++) {scanf("%lf %lf",&a[i].x,&a[i].y);len += dis(a[i],a[i-1]);}double now = len/(double)m;//cout<<"len:"<<len<<"now: "<<now<<endl;int num = 1;last = a[0];for(i = 1; i <= n; i++) {if(num>=m)break;//last.put();double t = dis(last, a[i]);if(t<now && !Is0(t-now)) {//puts("1");now -= t;last = a[i];continue;}else if(Is0(t-now)){//puts("2");printf("CP%d: ",num++);last = a[i];now = len/(double)m;a[i].put();}else {//puts("3");printf("CP%d: ",num++);double b = now/t;double x = a[i].x-last.x, y = a[i].y-last.y;node tmp = last;tmp.x += b*x; tmp.y += b*y;tmp.put();last = tmp;now = len/(double)m;i--;}}}return 0;}/*5.88634951737267444162003606167231.4715873793431686104050090154181*/


0 0