水题集

刻苦练习CCF

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1585

就是旋转一下,找对应关系,注意这里枚举的顺序按原来顺序来,然后输出的时候把n和m的内外顺序换一下

#include<stdio.h>
int a[105][105],b[105][105];
int main(){
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int T,q,n,m;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&n,&m,&q);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				scanf("%d",&a[i][j]);
			}
		}
		if(q==1){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=m;j++){
					b[j][n-i+1]=a[i][j];
				}
			}
			for(int i=1;i<=m;i++){
				for(int j=1;j<=n;j++){
					//b[i][j]=a[m-j+1][i];
					if(j==n) printf("%d\n",b[i][j]);
					else printf("%d ",b[i][j]);
				}
			}
		}
		else{
			for(int i=1;i<=n;i++){
				for(int j=1;j<=m;j++){
					b[m-j+1][i]=a[i][j];
				}
			}
			for(int i=1;i<=m;i++){
				for(int j=1;j<=n;j++){
					if(j==n) printf("%d\n",b[i][j]);
					else printf("%d ",b[i][j]);
				}
			}
		}
	}
}

合并果子

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1588

每次优先合并最小的两个数,其实就是哈夫曼树的建法,用一个优先队列维护

#include<stdio.h>
#include<queue>
#include<iostream>
using namespace std;

int main(){
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	priority_queue<int,vector<int>,greater<int> > pq;
	int T,n,tmp;
	scanf("%d",&T);
	while(T--){
		int s=0;
		scanf("%d",&n);
		for(int i=0;i<n;i++) {
			scanf("%d",&tmp);
			pq.push(tmp);
		}
		int t1,t2;
		for(int i=1;i<n;i++){
			t1=pq.top();
			pq.pop();
			t2=pq.top();
			pq.pop();
			s+=t1+t2;
			pq.push(t1+t2);
		}
		pq.pop();
		printf("%d\n",s);
	}

}

烦人的异或:

用一个数组该点到左上角的异或总值

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int s[1005][1005],l[1005][1005],h[1005][1005];
int T,n,m,q;
int main(){
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif

	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&n,&m,&q);
		memset(s,0,sizeof(s));
		memset(l,0,sizeof(l));
		memset(h,0,sizeof(h));
		int tmp;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				scanf("%d",&tmp);
				l[i][j]=l[i][j-1]^tmp;
				h[i][j]=h[i-1][j]^tmp;
				s[i][j]=s[i-1][j-1]^tmp^l[i][j-1]^h[i-1][j];
			}
		}
		for(int i=1;i<=m;i++){
			//printf("%d %d\n",s[1][i],l[1][i]);
		}
		int x1,y1,x2,y2;
		while(q--){
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			int sum=0;
			sum^=s[x1-1][y1-1];
			sum^=s[x1-1][m]^s[x1-1][y2];
			sum^=s[x2][y2]^s[x1-1][y1-1]^(s[x1-1][y2]^s[x1-1][y1-1])^(s[x2][y1-1]^s[x1-1][y1-1]);
			sum^=s[n][y1-1]^s[x2][y1-1];
			sum^=s[n][m]^s[x2][y2]^(s[x2][m]^s[x2][y2])^(s[n][y2]^s[x2][y2]);
			printf("%d\n",sum);
		}

	}
}

括号匹配:

这道题,一开始理解错了,给出的已经括号是符合运算表达式的括号,所以直接用个栈来维护就行了

#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) -x&x
using namespace std;
const int maxn=110000;
const int INF=0x3f3f3f3f;

char str[maxn];
int match[maxn];
int tree[3][maxn];
void insert(int *a,int x){
    while(x<maxn){
        a[x] ++;
        x += lowbit(x);
    }
}
int get_sum(int *a,int x){
    int res = 0;
    while(x>0){
        res += a[x];
        x -= lowbit(x);
    }
    return res;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
    while(~scanf("%s",str+1)){
        stack<int> ss;
        int s,m,l,n;
        s=m=l=0;
        memset(tree,0,sizeof(tree));
        m=strlen(str+1);
        for(int i = 1;i<=m;i++){
            if(str[i]=='(' || str[i]=='[' || str[i]=='{')
                ss.push(i);
            else{
                int t = ss.top();
                ss.pop();
                match[t]=i;
                match[i]=t;
                if(str[i]==')') insert(tree[0],t);
                else if(str[i]==']') insert(tree[1],t);
                else if(str[i]=='}') insert(tree[2],t);
            }

        }
        scanf("%d",&n);
        for(int i = 0;i<n;i++){
            int t;
            scanf("%d",&t);
            int c=match[t];
            //printf("%d %d\n",get_sum(tree[0],c),get_sum(tree[0],t));
            printf("%d",c);
            if(match[t]<t) c=t,t=match[t];
            c--;
            printf(" %d %d %d\n",get_sum(tree[0],c)-get_sum(tree[0],t),get_sum(tree[1],c)-get_sum(tree[1],t),get_sum(tree[2],c)-get_sum(tree[2],t));
        }
        printf("\n");
    }

    return 0;
}
时间: 2024-10-06 00:48:28

水题集的相关文章

【省选水题集Day1】一起来AK水题吧! 题目(更新到A)

题解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水题A: [AHOI2001]质数和分解 题目网址: https://www.luogu.org/problem/show?pid=2563 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如,9 的质数和表达式就有四种本质不同的形式: 9 = 2 + 5 + 2 =

【省选水题集Day1】一起来AK水题吧! 题解(更新到A)

题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数! 完全背包都会打吧,原来是最优值,现在是累计值. 状态转移方程:f[j]=f[j]+f[j-w[i]],w[i]是待选质数. 理解:一个数要拆成若干素数和,等同于拆成所有该数减去一个素数差的方案数之和(而不是最优方案数) 但这么做需要初始化为0,同时用滚动数组可以减小时间和空间复杂度. 代码如下:

ccf 水题集

201612-2   工资计算 #include<iostream> using namespace std; int main() { int n; cin >> n; for(int i=1;i<=1000;i++) { int T=i*100; int cnt=T-3500; int fei=0; int ans=T-n; if(cnt<=0&&T==n) { cout << T << endl; break; } if(c

java水题集

POJ - 1220 进制转换 1 import java.io.*; 2 import java.util.*; 3 import java.math.*; 4 5 public class Main { 6 public static int GetNum(char c) 7 { 8 if (Character.isDigit(c))return c-'0'; 9 if (Character.isUpperCase(c))return c-'A'+10; 10 if (Character.i

G - Brain Network (easy)(并查集水题)

G - Brain Network (easy) Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u CodeForces 690C1 Description One particularly well-known fact about zombies is that they move and think terribly slowly. While we still don't know

POJ2236 wireless network 【并查集水题】

前端开发whqet,csdn,王海庆,whqet,前端开发专家 今天是个好日子,2014年5月20日,表白的最佳时机,虽说孩子已经四岁.结婚已经五年,但是也不可以偷懒,于是有了这个效果. 在线研究点这里,下载收藏点这里.程序猿and程序媛,大胆秀出你的爱吧. 利用html5 canvas实现动态的文字粒子效果,效果如下. OK,简单看看原理,首先我们需要在canvas里面实现描边文字,然后利用getImageData获得描边文字的像素矩阵,将粒子效果绑定在描边文章上. 整个效果如下. html文

4.7-4.9补题+水题+高维前缀和

题目链接:51nod 1718 Cos的多项式  [数学] 题解: 2cosx=2cosx 2cos2x=(2cosx)^2-2 2cos3x=(2cosx)^3-3*(2cosx) 数归证明2cos(nx)能表示成关于2cosx的多项式,设为f(n) f(1)=x,f(2)=x^2-2(其中的x就是2cosx) 假设n=1~k时均成立(k>=3) 当n=k+1时 由cos((k+1)x)=cos(kx)cos(x)-sin(kx)sin(x) cos((k-1)x)=cos(kx)cos(x)

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

codeforces 505B Mr. Kitayuta&#39;s Colorful Graph(水题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The vertices of the graph are numbered from 1 to n. Each edge, namely edge