暑假第十二测

题解:第一题:

打表找规律,从12以后每次加49,我一直在前十找规律,,找了半天,以后还是多打点,学聪明点

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int zl[4] = {1,5,10,50};
ll ans[] = {0,4,10,20,35,56,83,116,155,198,244,292,341,390,439,488,537,586,635,684,733,782,831,880,929,978,1027,1076,1125,1174,1223,1272,1321,1370,1419,1468,1517,1566,1615,1664,1713,1762,1811,1860,1909,1958,2007,2056,2105,2154,2203,2252,2301,2350,2399,2448,2497,2546,2595,2644,2693,2742,2791,2840,2889,2938,2987,3036,3085,3134,3183,3232,3281,3330,3379,3428,3477,3526,3575,3624,3673,3722,3771,3820,3869,3918,3967,4016,4065,4114,4163,4212,4261,4310,4359,4408,4457,4506,4555,4604,4653};
int Ans = 0;
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    ll n;
    scanf("%I64d", &n);
    if(n <= 12)printf("%I64d\n", ans[n]);
    else printf("%I64d\n", 49* (n - 12) + ans[12]);
}

第二题:

这是一道傻逼题,但我就是没想出来,利用log单增函数就好了,比较log2 x^y. log2 y^x ‘即 ylog2x  xlog2y

#include <bits/stdc++.h>
using namespace std;

int main()
{
    freopen("b.in","r",stdin);
    freopen("b.out","w",stdout);
    int T;
    scanf("%d", &T);
    while(T--){
        double a, b;
        scanf("%lf%lf", &a, &b);
           if(a == b){puts("=");continue;}
           if(a == 1 && b > 1){puts("<");continue;}
        if(b == 1 && a > 1){puts(">");continue;}
        if(a*log(b) > b*log(a)){puts("<");continue;}
        if(a*log(b) < b*log(a)){puts(">");continue;}
        puts("=");
        //printf("%d\n", work(a, b, x, y, aa, bb));
   }
    return 0;
}

第三题:

这道题最开始看着像上司的舞会,但简单画画图就知道会成环,然后就二分图匹配,原题是bzoj数字匹配,把数按质因子个数奇偶拆成两组,最大点独立集

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int M = 500005;
int a[M], tmp[M];
bool check(int a, int b){
    if(a > b)swap(a, b);
    if(b%a)return 0;
    int d = b/a;
    for(int i = 2; i <= d; i++){
        if(d%i == 0 && d != i)return 0;
    }
    return 1;
}
struct {int id, val;}odd[M], even[M];
int h[M], match[M], tot, cnt, t2, t1;
bool vis[M];
struct edge{int v,nxt;}G[M<<1];
void add(int u, int v){G[++tot].nxt=h[u]; h[u]=tot; G[tot].v=v;}
void init(){
    memset(h, 0, sizeof(h));
    memset(match, 0, sizeof(match));
    tot = cnt = t1= t2 = 0;

}

bool find(int u){
    for(int i = h[u]; i; i = G[i].nxt){
        int v = G[i].v;
        if(vis[v])continue;
        vis[v] = 1;
        if(!match[v] || find(match[v])){
            match[v] = u;
            return 1;
        }
    }
    return 0;
}

int main()
{
    freopen("c.in","r",stdin);
    freopen("c.out","w",stdout);
    int T;
    scanf("%d", &T);
    while(T--){
        int n, ans = 0, cur = 0;
        scanf("%d", &n);
        init();
        for(int i = 1; i <= n; i++){
            scanf("%d", &a[i]);
            int tt = a[i];
            int cnt = 0;
            for(int j = 2; j <= a[i]; j++)
                if(a[i]%j == 0){
                    while(a[i]%j == 0) a[i] /= j, cnt++;
                }
            if(cnt & 1) odd[++t1].val = tt, odd[t1].id = ++cur;
            else even[++t2].val = tt, even[t2].id = ++cur;
        }
        for(int i = 1; i <= t1; i++)
            for(int j = 1; j <= t2; j++)
                if(check(odd[i].val, even[j].val))add(odd[i].id, even[j].id);
        for(int i = 1; i <= t1; i++){
            memset(vis, 0, sizeof(vis));
            if(find(odd[i].id)) ans++;
        }

        printf("%d\n", n - ans);

   }
    return 0;
}

早上洛谷说忌模拟赛,结果真的倒数,而且今天题挺水的,自己太菜了

原文地址:https://www.cnblogs.com/EdSheeran/p/9460615.html

时间: 2024-10-17 18:26:08

暑假第十二测的相关文章

暑假第二十五测

以后WA了T了看数组: 暑假四次数组下标超界,多次数组开小,暂时没有访问到负下标 题解: 第一题:这道题可以转换为颜色相同的点缩成一个点,每次可以将两个点合并成同一点,问最少几次将所有点合并成一个点: 开始想到并查集+贪心合并度数最多的并查集,但这样是有问题的,比如度数一样时,选择的先后顺序是有影响的: 正解:缩点+找直径,如果是一条黑白相间的链,就是点数/2, 而树上任何一条直径都会有一个点经过直径,我们从交点开始往外延伸,发现最长延伸就是直径本身: 思想:从特殊到一般 #include<bi

平时二十二测

第一题水题未放,今天第二题又读入超时2000*2000的读入要快读啊,上次没长教训 第二题: 图论题.二维前缀和的应用. 最重要的: 这就是一棵树啊 标算为:对于不包含环的图,连通块数目=点数-边数,所以利用二维前缀和进行预处理,O(1)求出矩形区域内的边数和点数. #include<bits/stdc++.h> using namespace std; const int maxn = 2005; int sum[maxn][maxn], row[maxn][maxn], line[maxn

暑假第十四测

题解: 第一题:nlogn LIS #include<bits/stdc++.h> using namespace std; const int M = 100005; int a[M], f[M]; int main(){ freopen("lis.in","r",stdin); freopen("lis.out","w",stdout); int n, cnt = 0; scanf("%d"

暑假第二十四测

题解: 第一题:二分+贪心:二分距离上限,两端的人能从两端取就从两端取,这样可以为中间的做贡献: #include<bits/stdc++.h> using namespace std; const int M = 10005; int a[M], b[M], pos[M], x, n, m; bool id[M]; #define ll long long inline int ab(int a, int b){ if(a > b)return a - b; return b - a;

暑假第二十六测

今天又考的奇差 题解: 第一题: 这么简单一道题我想了好久,智商实在是下线了: #include<bits/stdc++.h> using namespace std; int main(){ freopen("shortway.in","r",stdin); freopen("shortway.out","w",stdout); int n, k; scanf("%d%d", &n,

暑假第二十九测

第三题换成能否得到x, 可以1, 不可以-1 题解: 第一题:打表找规律: 打表发现a是:1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9-- 对于每一项Ai = i拆分成质因数中有多少个2 + 1:如果把桶也给打出来,就发现他是这样的: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 2 + 4 + 6 + 8 +  4  + 8 +  8 + 即2^i的等差数列,所以对一个数m我们就很容易确定他前面的数的和: 但是对于一个位置我们怎么找到他对应的m呢? 把上

平时十二测

题解: 第一题:简单模拟: #include<bits/stdc++.h> using namespace std; const int M = 500000;// up; char s[M], ans[M]; int main(){ freopen("expression.in","r",stdin); freopen("expression.out","w",stdout); int tot = -1; sca

SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC规范.KML规范)的GIS专业理论知识.

汇编入门学习笔记 (十二)—— int指令、port

疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引发一个n号中断. 运行过程相当于: (1)取中断类型吗n. (2)标志寄存器入栈:设置IF=0,TF=0. (3)CS.IP入栈 (4)(IP)=(n*4),(CS)=(n*4+2) 样例1:编写.安装中断7ch.实现求一个word型数据的平方,用ax存放这个数据. assume cs:code code s