Newcoder 132 C.简单瞎搞题(01背包+bitset)

186 篇文章 0 订阅
30 篇文章 0 订阅

Description

一共有 n n n个数,第 i i i 个数是 x i x_i xi x i x_i xi 可以取 [ l i , r i ] [l_i , r_i] [li,ri] 中任意的一个值。 设 S = ∑ x i 2 S=\sum x_i^2 S=xi2,求 S S S种类数。

Input

第一行一个数 n n n
然后 n n n 行,每行两个数表示 l i , r i l_i,r_i li,ri

( 1 ≤ n , l i , r i ≤ 100 ) (1\le n,l_i,r_i\le 100) (1n,li,ri100)

Output

输出一行一个数表示答案。

Sample Input

5
1 2
2 3
3 4
4 5
5 6

Sample Output

26

Solution

01 01 01背包,背包体积 10 0 3 100^3 1003,时间复杂度 O ( 10 0 5 ) O(100^5) O(1005),用 b i t s e t bitset bitset优化一下复杂度为 O ( 10 0 5 32 ) O(\frac{100^5}{32}) O(321005)

Code

#include<cstdio>
#include<bitset> 
using namespace std;
bitset<1000005>b[105];
int n,l[105],r[105];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d%d",&l[i],&r[i]);
	b[0].set(0);
	for(int i=1;i<=n;i++)
		for(int j=l[i];j<=r[i];j++)
			b[i]|=(b[i-1]<<(j*j));
	printf("%d\n",b[n].count());
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
植物大战僵尸是一款非常经典的塔防游戏,实现这个游戏需要用到很多复杂的算法和技术,需要投入大量的时间和精力。在这里,我可以给您提供一个简单的植物大战僵尸的 C++ 实现,但是与原版游戏相比,这个实现只是一个简化版,可能会缺少一些功能和细节。 以下是大致的实现步骤: 1. 定义游戏地图和植物、僵尸的基本属性。例如,地图的大小、僵尸和植物的初始位置、血量、攻击力等属性。 2. 实现植物和僵尸的移动和攻击逻辑。例如,植物可以发射子弹攻击僵尸,僵尸可以接近植物并攻击它们。 3. 实现游戏的主循环。在每次循环中,判断是否有植物或僵尸死亡,如果有则从游戏中移除它们。同时,检查是否有新的植物或僵尸需要生成,如果需要则在地图上添加它们。 4. 添加用户输入的处理逻辑。例如,用户可以在地图上选择植物并将其放置到指定位置,植物的选择和放置可以通过鼠标事件、键盘事件等方式实现。 以下是一个简单的代码示例: ```c++ #include <iostream> #include <vector> #include <cstdlib> #include <ctime> using namespace std; // 定义地图大小 const int MAP_WIDTH = 10; const int MAP_HEIGHT = 5; // 僵尸和植物的基本属性 struct Zombie { int x, y; // 僵尸的坐标 int hp; // 僵尸的血量 int attack; // 僵尸的攻击力 }; struct Plant { int x, y; // 植物的坐标 int hp; // 植物的血量 int attack; // 植物的攻击力 int cost; // 植物的价格 }; // 游戏地图 vector<vector<char>> map(MAP_HEIGHT, vector<char>(MAP_WIDTH, '-')); // 存储僵尸和植物 vector<Zombie> zombies; vector<Plant> plants; // 随机生成僵尸 void generateZombie() { Zombie z; z.x = MAP_WIDTH - 1; z.y = rand() % MAP_HEIGHT; z.hp = 10; z.attack = 2; zombies.push_back(z); } // 随机生成植物 void generatePlant() { Plant p; p.x = rand() % MAP_WIDTH; p.y = rand() % MAP_HEIGHT; p.hp = 5; p.attack = 1; p.cost = 2; plants.push_back(p); } // 在地图上添加植物或僵尸 void addEntity(char c, int x, int y) { map[y][x] = c; } // 在地图上移除植物或僵尸 void removeEntity(int index) { if (index < zombies.size()) { map[zombies[index].y][zombies[index].x] = '-'; zombies.erase(zombies.begin() + index); } else { map[plants[index - zombies.size()].y][plants[index - zombies.size()].x] = '-'; plants.erase(plants.begin() + index - zombies.size()); } } // 植物攻击僵尸 void plantAttack() { for (int i = 0; i < plants.size(); i++) { for (int j = 0; j < zombies.size(); j++) { if (plants[i].x == zombies[j].x && plants[i].y == zombies[j].y) { zombies[j].hp -= plants[i].attack; if (zombies[j].hp <= 0) { removeEntity(j); } } } } } // 僵尸攻击植物 void zombieAttack() { for (int i = 0; i < zombies.size(); i++) { for (int j = 0; j < plants.size(); j++) { if (zombies[i].x == plants[j].x && zombies[i].y == plants[j].y) { plants[j].hp -= zombies[i].attack; if (plants[j].hp <= 0) { removeEntity(j + zombies.size()); } } } } } // 判断游戏是否结束 bool isGameOver() { for (int i = 0; i < zombies.size(); i++) { if (zombies[i].x == 0) { return true; } } return false; } int main() { // 随机种子 srand(time(NULL)); // 初始化地图 for (int i = 0; i < MAP_HEIGHT; i++) { for (int j = 0; j < MAP_WIDTH; j++) { cout << map[i][j] << " "; } cout << endl; } // 游戏主循环 while (!isGameOver()) { // 生成植物或僵尸 if (rand() % 5 == 0) { generateZombie(); } if (rand() % 5 == 0) { generatePlant(); } // 移动僵尸和植物 for (int i = 0; i < zombies.size(); i++) { zombies[i].x--; } for (int i = 0; i < plants.size(); i++) { plants[i].x++; } // 植物攻击僵尸 plantAttack(); // 僵尸攻击植物 zombieAttack(); // 显示当前地图 system("cls"); // 清屏 for (int i = 0; i < MAP_HEIGHT; i++) { for (int j = 0; j < MAP_WIDTH; j++) { bool isEntity = false; // 是否有植物或僵尸 for (int k = 0; k < zombies.size(); k++) { if (zombies[k].x == j && zombies[k].y == i) { cout << "Z "; isEntity = true; break; } } if (!isEntity) { for (int k = 0; k < plants.size(); k++) { if (plants[k].x == j && plants[k].y == i) { cout << "P "; isEntity = true; break; } } } if (!isEntity) { cout << map[i][j] << " "; } } cout << endl; } // 延时等待 system("pause"); } // 游戏结束 cout << "Game Over!" << endl; return 0; } ``` 这个示例实现了一个简单的植物大战僵尸游戏,但是它还有很多不足之处,例如僵尸和植物的移动和攻击逻辑比较简单,用户交互也没有实现。如果您想实现一个更完整的植物大战僵尸游戏,需要更加深入地研究游戏开发相关技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值