头像

mc家族




离线:8小时前


最近来访(972)
用户头像
OnjoujiToki
用户头像
揽月
用户头像
limie
用户头像
封禁用户
用户头像
dldl
用户头像
Kauai
用户头像
会飞的泡泡
用户头像
正在加载中...
用户头像
我是2016
用户头像
zeng9999jian
用户头像
deadpool
用户头像
NO.1-Finn
用户头像
yaohy2020
用户头像
bobo2010
用户头像
33号花卷
用户头像
墨染樱飞
用户头像
lgvc
用户头像
zrq071211
用户头像
阿秀
用户头像
离幻

新鲜事 原文


11小时前
中位数 先科普一下“中位数”的概念。 一个序列被从小到大排序后,排名在中间的那个数就是这个序列的“中位数”。例如,{10,40,30}的中位数是30。 如果序列的长度是偶数,我们会说两个中间元素中较小的一个是中位数。例如,{10,40,30,20}的中位数是20。 有F头奶牛(编号1至F)在参加高考,有M个科目(编号1至M)要考,第i头奶牛的第j个科目的成绩是score[i][j]。 显然,总共有F*M个成绩,我们的目标是使得:这F*M个成绩的中位数是goal。 为了完成这个目标,允许奶牛作弊,现在需要完成如下的任务: (1)确定一个最小的整数X,其中X表示必须作弊的奶牛的数量。只要修改了某头奶牛的成绩,那么该头奶牛就是作弊。 (2)在确定了最小X的前提下,还要确定一个最小的Y,其中Y表示总共需要修改多少个成绩。 输入格式 第一行,3个整数:F,M,goal。1 <= F, 1 <= M , F * M <= 1000。 0<=goal <= 99。 接下来有F行M列的二维数组,其中第i行第j列的整数是 score[i][j]。0<=score[i][j]<=99。 输出格式 一行,两个整数, X和Y。 输入/输出例子1 输入: 5 5 8 1 2 3 4 5 10 9 8 7 6 25 24 23 22 21 18 16 17 19 20 11 13 12 14 15 输出: 1 5 样例解释: 如果所有奶牛都不作弊,那么中位数肯定不是8。 X=1,因为只要第3头奶牛作弊就可以达到目标。 第3头奶牛的5个科目成绩都必须修改成不超过8,这样才能使得最终的中位数等于8,所以Y=5。 #include<bits/stdc++.h> using namespace std; int n,m,a[1005],g,ans1,b[1005],t,p,c[1005]; bool cmp(int q,int p) { return q>p; } int main(){ cin>>n>>m>>g; for(int i=1;i<=n;i++) // 遍历n条牛 { for(int j=1;j<=m;j++) { cin>>p; a[++t]=p;// a数组存储各牛各科目的分数 if(p>g) b[i]++;// b数组存储每条牛大于中位数的成绩个数 if(p<g) c[i]++;// c数组存储每条牛小于中位数的成绩个数 } } sort(a+1,a+n*m+1); sort(b+1,b+n+1,cmp); sort(c+1,c+n+1,cmp); int mid=(1+n*m)/2; if(a[mid]==g) // 当前中位数等于目标值,无需处理直接输出 { cout<<"0 0"; return 0; } int y,sum=0,ans1=0; if(a[mid]>g)// 当前中位数大于目标值,则需要修改一些成绩高于中位数的科目 { for(int i=mid;i>=1;i--)// 确定需要修改多少科成绩,更新变量sum后再保存到变量y中 { if(a[i]>g) sum++; else break; } y=sum; for(int i=1;i<=n;i++)// 确定需要修改多少条牛,保存到变量ans1中 { ans1++; sum-=b[i]; if(sum<=0) { cout<<ans1<<" "<<y; return 0; } } } if(a[mid]<g) { for(int i=mid;i<=n*m;i++) { if(a[i]<g) sum++; else break; } y=sum; for(int i=1;i<=n;i++) { ans1++; sum-=c[i]; if(sum<=0) { cout<<ans1<<" "<<y; return 0; } } } return 0; }


新鲜事 原文


13小时前
wc这满级人类太牛逼了 https://www.360kuai.com/9ae6b9d30a77bc705?djsource=XsgsZg&sign=360_36e79513&refer_scene=0&scene=25&uid=a1bcbfb5ed12af744b856f1be714892c&tmprtp=expf%3Dcomindexf2043%2C%26reqid%3D7b14dca1-16b3-4943-a89c-a9d685ba2eb1&tj_url=93b4afbeae4ce1fa7&nsid=ef4bc180-c3c1-4484-bbdd-fc57efef4d00(网址)
图片


新鲜事 原文


1天前
一看这些就不是古人,古人都是作诗的,你们就来上网,一看就是诈骗集团的


新鲜事 原文


1天前
好无语,一句里2个黑的,根本不知道敌人在哪




3天前

include[HTML_REMOVED]

using namespace std;
const int N = 10;
int path[N];//保存序列
int state[N];//数字是否被用过
int n;
void dfs(int u)
{
if(u > n)//数字填完了,输出
{
for(int i = 1; i <= n; i++)//输出方案
cout << path[i] << ” “;
cout << endl;
}

for(int i = 1; i <= n; i++)//空位上可以选择的数字为:1 ~ n
{
    if(!state[i])//如果数字 i 没有被用过
    {
        path[u] = i;//放入空位
        state[i] = 1;//数字被用,修改状态
        dfs(u + 1);//填下一个位
        state[i] = 0;//回溯,取出 i
    }
}

}

int main()
{

cin >> n;
dfs(1);
return 0;

}



活动打卡代码 LeetCode 87. 扰乱字符串


3天前

class Solution {
public:
bool isScramble(string s1, string s2) {
if (s1.size() != s2.size()) return false;
if (s1 == s2) return true;

    // 统计s1,s2字母是否一致
    vector<int> c1(26), c2(26);
    for (char c: s1) ++c1[c - 'a'];
    for (char c: s2) ++c2[c - 'a'];

    for (int i = 0; i < 26; ++i)
        if (c1[i] != c2[i]) return false;

    // 枚举翻转位置
    for (int i = 1; i < s1.size(); ++i){
        // 不翻转的情况
        if (isScramble(s1.substr(0, i), s2.substr(0, i)) && 
            isScramble(s1.substr(i), s2.substr(i))) return true;
        // 翻转的情况
        if (isScramble(s1.substr(0, i), s2.substr(s2.size() - i)) && 
            isScramble(s1.substr(i), s2.substr(0, s1.size() - i))) return true;
    }

    return false;
}

};



活动打卡代码 AcWing 1055. 股票买卖 II


3天前

include [HTML_REMOVED]

using namespace std;
const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int n;
int w[N];
int f[N][2];

int main() {
scanf(“%d”, &n);
for (int i = 1; i <= n; ++i) scanf(“%d”, &w[i]);

f[0][1] = -INF;
for (int i = 1; i <= n; ++i) {
    f[i][0] = max(f[i - 1][0], f[i - 1][1] + w[i]);
    f[i][1] = max(f[i - 1][1], f[i - 1][0] - w[i]);
}
printf("%d\n", f[n][0]);
return 0;

}



活动打卡代码 LeetCode 213. 打家劫舍 II


3天前

class Solution {
public:
int rob(vector[HTML_REMOVED]& nums) {
int n = nums.size();
if (nums.empty()) return 0;
if (n == 1) return nums[0];

    vector<int> f(n + 1, 0), g(n + 1, 0);
    f[1] = nums[0];
    for (int i = 2; i <= n - 1; i ++)
        f[i] = max(f[i - 1], f[i - 2] + nums[i - 1]);

    g[n - 1] = nums[n - 1];
    for (int i = n - 2; i ; i --)
        g[i] = max(g[i + 1], g[i + 2] + nums[i]);

    return max(f[n -1], g[1]);
}

};



活动打卡代码 AcWing 142. 前缀统计


3天前

include [HTML_REMOVED]

using namespace std;

define fir(i,a,b) for(int i=a;i<=b;i++)

const int N=1e6+10;
char str[N];
int trie[N][26],n,m,i,j,t,End[N],tot=1;
void insert(char a[])
{
int len=strlen(a),p=1;
fir(i,0,len-1)
{
int ch=a[i]-‘a’;
if (trie[p][ch]==0)
trie[p][ch]=(tot);
p=trie[p][ch];
}
End[p]
;//统计个数
}
int Search(char a[])
{
int len=strlen(a),p=1,ans=0;
fir(i,0,len-1)//把这个字符串所有的前缀都找出来
{
p=trie[p][a[i]-‘a’];
if (p==0)
return ans;
ans+=End[p];
}
return ans;
}
int main()
{
scanf(“%d%d\n”,&n,&t);
fir(i,0,n-1)
{
scanf(“%s\n”,str);
insert(str);
}
while(t–)
{
scanf(“%s\n”,str);
printf(“%d\n”,Search(str));
}
return 0;
}





3天前

class Trie {
Trie son[26] {nullptr};
bool is_tail = false;
public:
/
Initialize your data structure here. /
Trie() {}

/** Inserts a word into the trie. */
void insert(string word) {
    Trie *root = this;
    for ( const auto& ch : word ) {
        if ( !root->son[ch - 'a'] )
            root->son[ch - 'a'] = new Trie();
        root = root->son[ch - 'a'];
    }
    root->is_tail = true;
}

/** Returns if the word is in the trie. */
bool search(string word) {
    Trie *root = this;
    for( const auto& ch : word ) {
        if( !root->son[ch - 'a'] )
            return false;
        root = root->son[ch - 'a'];
    }
    return root->is_tail;
}

/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
    Trie *root = this;
    for( const auto& ch : prefix ) {
        if ( !root->son[ch - 'a'] )
            return false;
        root = root->son[ch - 'a'];
    }
    return true;
}

};