牛客练习赛19 E和F(签到就走系列)托米的饮料+托米搭积木

时间:2023-02-04 00:04:39

E题传送门:点我

F题传送门:点我

 

可爱的小托米得到了n瓶饮料.
但他不小心把开盖的工具弄丢了,所以他只能利用饮料瓶来开盖.
已知第i个瓶子的品牌为a i,且其能打开b i品牌的瓶子.
问有几瓶饮料托米无法喝到.
被用于打开饮料瓶的瓶子不一定需要被打开.
一个瓶子不能打开其本身.

输入描述:

第一行一个整数n,表示饮料的瓶数.
接下来n行,每行两个整数ai,bi.

输出描述:

输出一行一个整数,表示小托米无法喝到的饮料瓶数.

示例1

输入

4
1 1
2 2
3 3
4 4

输出

4
示例2

输入

4
1 2
2 3
3 4
4 1

输出

0

CF原题:http://codeforces.com/problemset/problem/315/A

读懂题意注意细节即可。。在CFWA过所以清醒点了

代码:

n = int(input())
a,b,c= [],[],[1]*n
for i in range(n):
    q = input().split()
    a.append(q[0])
    b.append(q[1])
for i in range(n):
    for j in range(n):
        if i!=j and a[j]==b[i]:
            c[j] = 0
print(sum(c))

 

F题:

这天,可爱的小托米得到了n堆积木,且第i堆积木初始时有ai块积木.

小托米很快就喜欢上了玩积木.
他会作出三种操作:
1.把第v堆的积木数量更改为x.
2.在每堆积木的上面都加上y个积木.
3.数第q堆积木的积木个数.
由于这天可爱的小托米实在是太困了,所以他请你帮他完成这些操作.

输入描述:

第一行两个整数n,m.
第二行n个整数,第i个整数代表ai的值.
接下来m行,每行代表一个操作:
第一个整数t代表操作的类型
若t=1,则接下来两个整数v,x,代表操作1.
若t=2,则接下来一个整数y,代表操作2.
若t=3,则接下来一个整数q,代表操作3.

输出描述:

对于每个操作3,输出其对应的答案.

输入

10 11
1 2 3 4 5 6 7 8 9 10
3 2
3 9
2 10
3 1
3 10
1 1 10
2 10
2 10
3 1
3 10
3 9

输出

2
9
11
20
30
40
39

1≤n,m≤ 10^5
1≤ai≤10^9
1≤t≤3
1≤v≤ n,1≤ x≤10^9
1≤y≤10^4
1≤q≤n

思路:简单的单点瞎维护。// 操作一  脑子一抽写了a[x] = add-y。。送上一发WA。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    int n,m;
    LL a[100001];
    scanf("%d %d",&n,&m);
    for(int i = 1 ; i <= n ;i ++){
        scanf("%lld",&a[i]);
    }
    LL add = 0;
    for(int i = 0; i < m ; i ++){
        int cmd,x;
        scanf("%d %d",&cmd,&x);
        if(cmd == 1){
            LL y;
            scanf("%lld",&y);
            a[x] = y-add;
        }
        if(cmd == 2){
            add += x;
        }
        if(cmd == 3){
            printf("%lld\n",a[x] + add + 0LL);
        }
    }
}