zoukankan      html  css  js  c++  java
  • 5.25周赛

    怎么说呢,从排名看来,其实是较之上一次有一定进步的

    不过心情比上一次难受多了

    以前还是能够稍稍比得过的过CocaCola的,但是最近一周都在无休止的颓废之中,虽然没看她的解题记录,但是我估计,这一周她过的题应该是比我多很多的

    差点忘了我是一个蒟蒻,没资格主观臆断人的,orz orz orz。

    不知道为什么老板讲课讲着讲着就颓了,好像也没干什么,但是就是对一些关键知识有所遗漏。讲完课又需要自己去看PDF来补回来,很多时候因为没听懂,所以补的时候也很orz,搞不懂就想着背下来就行了,错过了好多东西。orz orz orz地也就不想做题,板题都搞得不求甚解的,更何况轮到自己实际运用的时候了。

    看PDF没什么动力,打代码的时候也没什么动力,就一直拖拖拖的,看一两页就颓一会儿,稍微看到稍微难一点的就放空,刷题量也就这么下来了。

    仔细想想我的代码功底一直很差,一道题往往只要稍微有一点点难写就写不出来,稍微巧一点点的操作就一头雾水的。平时遇到这些问题好像也没有想一定要自己去解决,经常就是问问大佬们,翻翻题解,翻翻AC代码,有些时候看着太复杂了甚至原理都没有搞懂,照着抄完就交上去了。其实这是很不对的。往后的练习似乎是需要加强一下这方面了,,,不能有逃避心理啊。

    最近貌似经常写错一些很微小很微小的细节,但是造成的后果非常的惨痛。自己看不出来,也不会用debug调试,往往也就是随便逮一个大佬问,应该学会自己找错误的。。。

    颓了。


    A

    不会 暴力求解成功WA15。在sort和差分数组之类的边缘想了很久很久,最后什么都没想出来【其实跟sort和差分根本没关系】

    正解:只需要输入一个a,数组cnt[a - 1],cnt[a],cnt[a + 1] 都++一下,最后扫一遍求出cnt最大值就可以了


    B

    Tarjan板题,单纯求一个强连通分量个数,再去掉只有一个点的个数即可。

    但是因为一道板题(消息的传递)没有搞懂的原因,莫名其妙的敲了一个缩点的代码上去,根据答案改输出(看见样例1的答案给自己最后输出的tot--,然后一看过得了样例就直接交了)

    数据太水了,给了我90分。

    强连通分量个数和缩点完全是两个概念啊,强连通分量就是强连通分量,但是缩点是将一个强连通分量看成一个点,用于找入读为零的点的个数。

    再吐槽一下,数据真的是太水了。


    C

    其实只用讨论四种情况(题意理解我就不说了orz,不过反正我是没有理解出来)
    1.如果当前讨论到的第i块是竖着放的:
    ①如果第i - 1块也是竖着放的:那么它一共有2种选择:ans = (ans * 2)% mod
    ②如果第i - 1块是横着放的:那么它只有2种选择:ans = ans
    2.如果当前讨论到的第I块是横着放的(其实这个时候只能算半块):
    ①如果第i - 1块也是横着放的:那么它一共有3种选择:ans = (ans * 3)% mod
    ②如果第i - 1块是竖着放的:那么它只有2种选择:ans = (ans * 2)% mod
    特别的,如果它是横着放的,那么它影响的范围要广一点,也就是讨论到第i + 1块时ans的值不变
    再用字符串或者字符数组什么的记下来扫一遍讨论就是了
    不过需要注意的是讨论第一个:
    如果第一个是竖着放的时候,那么讨论就从i = 2开始,初值赋为 ans = 3
    如果第一个时横着放的时候,需要从i = 3开始讨论,初值赋为ans = 6
    (这两个就是单纯的排列组合的问题了)


    D

    以前做过的一道题,贪心+后悔堆
    考试的时候把以前的讲义翻出来了orz,结果第一次还因为没有开long long WA了一发.
    其实就是排序,首先替换掉必须替换的一波(如果这个时候次数已经超限了就输出“NIE”),然后因为功率要尽量小的原则,再用剩下的次数用来把符合标准但是差值大的灯泡换掉,要通过建立一个小根堆一个大根堆来维护。


    E

    树形背包DP
    【感觉都快忘了什么是树形DP了,复习一波】
    阶段:每一个以当先点U为根节点的树
    状态dp[u][v]:表示以U为根节点的树给V个用户播放节目的最大收益
    决策:给不给某一个叶子节点播放节目
    方程:

    for(int j = cnt[u]; j >= 1; j --)//一次性背包问题避免重复
    			for(int k = 1; k <= min(cnt[v], j); k ++)//k 不仅要小于j,还要以当前点v为根节点的树的叶子结点总数(cnt[v])
    				dp[u][j] = max(dp[u][j],dp[u][j - k] + dp[v][k] - Len[i]);//Len[i]记录第i号边所需费用
    

    偷偷摸摸发一下代码

    A

    #include <stdio.h>
    #include <bits/stdc++.h> 
    using namespace std;
    int n, ans, woshihaer;
    int a[100005];
    int main(){
    	scanf("%d", &n);
    	for(int i = 1; i <= n; i ++){
    		scanf("%d", &woshihaer);
    		a[woshihaer] ++;a[woshihaer - 1]++;a[woshihaer + 1]++;
    	}
    	for(int i = 1; i <= n; i ++)ans = max(ans, a[i]);
    	printf("%d
    ", ans);
    	return 0;
    }
    

    B

    #include <stdio.h>
    #include <bits/stdc++.h>
    using namespace std;
    
    int ru[10005];
    int n, m, scc, tot, orz, VisitTime,owo;
    bool Map[10005][10005], InStack[10005];
    int dfn[10005], low[10005], Belong[10005],cnt[10005];
    
    stack<int>S;
    
    int Min(int a, int b) {
    	return a < b ? a : b;
    }
    
    void Tarjan(int u){
    	low[u] = dfn[u] = ++VisitTime;
    	S.push(u), InStack[u] = true;
    	
    	for(int v = 1; v <= n; v ++)
    		if(Map[u][v] && !dfn[v]){
    			Tarjan(v);
    			low[u] = Min(low[u], low[v]);
    		}
    		else if(Map[u][v] && dfn[v] && InStack[v]){
    			low[u] = Min(low[u], low[v]);
    		}
    		
    	int v = 0;
    	if(dfn[u] == low[u]){
    		scc ++;int qwq = 0;
    		do{
    			v = S.top();
    			S.pop();
    			InStack[v] = false;
    			Belong[v] = scc;
    			qwq ++;
    			cnt[scc] ++;
    		}while(u != v);
    	}
    
    }
    
    int main(){
    	scanf("%d%d", &n, &m);
    	for(int i = 1; i <= m; i ++){
    		int a, b;
    		scanf("%d%d", &a, &b);
    		Map[a][b] = true;
    	}
    		
    	for(int i = 1 ; i <= n; i ++)if(dfn[i] == 0)Tarjan(i);
    		
    	for(int i = 1; i <= scc; i ++)if(cnt[i] > 1)owo ++;
    	
    	printf("%d", owo);
    }
    

    C

    #include <stdio.h>
    #include <bits/stdc++.h>
    #define ll long long
    #define hdhd 1000000007ll
    using namespace std;
    
    string s1,s2;
    ll n, ans, qwq;//赋初值
    
    int main(){
    	ios::sync_with_stdio(false);
    	
    	cin>>n>>s1>>s2;
    	s1 = " " + s1;
    	s2 = " " + s2;
    	
    	if(s1[1] == s2[1])qwq = 2, ans = 3;
    	else ans = 6, qwq = 3;
    
    	//写成 if(s1[1] == s2[1])qwq = 3, ans = 6;
    	//else ans = 3, qwq = 2;了qwqqqqqqq 
    	
    	if(n == 1){puts("3");return 0;}
    	
    	for(int i = qwq; i <= n; i ++){
    		if(s1[i] == s2[i]){//s1[i] != s1[i + 1]
    			if(s1[i - 1] == s2[i - 1])ans = (ans * 2) % hdhd;
    			else ans = ans;
    		}
    		else{
    			if(s1[i - 1] == s2[i - 1])ans = (ans * 2) % hdhd;
    			else ans = (ans * 3) % hdhd;
    			i ++;
    		}
    	}
    	
    	cout<<ans;
    }
    

    D

    #include <stdio.h>
    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    
    int n, k, ans;
    int p[500005], w[500005];
    priority_queue<int,vector<int>,greater<int> >q;
    priority_queue<int>cha;
    
    main(){
    	ios::sync_with_stdio(false);
    	
    	cin>>n>>k;
    	for(int i = 1; i <= n; i ++)cin>>p[i];
    	for(int i = 1; i <= n; i ++)cin>>w[i];
    	
    	sort(p + 1, p + n + 1);
    	sort(w + 1, w + n + 1);
    	
    	int j = n;
    	for(int i = n; i >= 1; i --){
    		while(w[i] <= p[j]){
    			q.push(p[j]);
    			j --;
    		}
    		if(q.size()){
    			ans += q.top();
    			cha.push(q.top()-w[i]);
    			q.pop();
    		}
    		else{k --;ans += w[i];}
    		if(k < 0){
    			cout<<"NIE";
    			return 0;
    		}
    	}
    	while(k > 0){
    		ans -= cha.top();
    		cha.pop();
    		k --;
    	}
    	cout<<ans;
    }
    

    E

    #include <stdio.h>
    #include <bits/stdc++.h>
    #define inf 1e9
    #define maxn 3010
    using namespace std;
    
    int n, p, k, qwq, qaq, tot = 0;
    int dp[maxn][maxn], cnt[maxn];
    int End[maxn], Next[maxn], Last[maxn], Len[maxn];
    
    void TreeDP(int u){
    	for(int i = Last[u]; i; i = Next[i]){
    		int v = End[i];
    		TreeDP(v); 
    		cnt[u] += cnt[v];//cnt记录叶子结点总个数qwq 
    		for(int j = cnt[u]; j >= 1; j --)
    			for(int k = 1; k <= min(cnt[v], j); k ++)//k <= min(cnt[v],j)!!!!! 
    				dp[u][j] = max(dp[u][j],dp[u][j - k] + dp[v][k] - Len[i]);
    	}
    }
    
    int main()
    {
    	ios::sync_with_stdio(false);
    	
    	cin>>n>>p;
    	
        for(int i = 1; i <= n; i ++)for(int j = 1; j <= p; j ++)dp[i][j] = - inf;//~赋~初~值~ 
        
    	for(int i = 1; i <= n - p; i ++){
    		cin>>k;
    		for(int j = 1; j <= k; j ++){
    			cin>>qwq>>qaq;
    			Len[++ tot] = qaq;
    			End[tot] = qwq;
    			Next[tot] = Last[i];
    			Last[i] = tot;
    		}
    	}
                
    	for(int i = n - p + 1; i <= n; i ++){cnt[i] = 1;cin>>dp[i][1];}
    	
    	TreeDP(1);
    	
    	for(int i = p; i; i --)
    		if(dp[1][i] >= 0){cout<<i;return 0;}
    		
    }
    
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/qwqq/p/10924760.html
Copyright © 2011-2022 走看看